mysql binlog 查找

dzypb 2010-08-25 09:27:21
接着昨天的mysql delete还原,我现在大致的思路是,从还原一个最近备份的表,然后再从日志文件里面找,可是如果日志文件非常大的情况下找起来非常的麻烦,我想能不能通过linux sed 或者grep 找出和表相关的操作, grep 'xxx' 1.sql 值能列出和xxx相关的操作,但是列不出时间等等。下面是日志文件的部分,我现在想得到和xxx相关的东西包括时间等,例如:其他的不想要,这个正则表达式怎么写??
BEGIN
/*!*/;
# at 170
#100824 11:26:27 server id 1 end_log_pos 277 Query thread_id=1 exec_time=0 error_code=0
use test_dbo/*!*/;
SET TIMESTAMP=1282620387/*!*/;
update xxx set ChineseName='abc'
/*!*/;
# at 277
#100824 11:26:27 server id 1 end_log_pos 304 Xid = 38
COMMIT/*!*/;
# at 304
#100824 11:26:27 server id 1 end_log_pos 376 Query thread_id=3 exec_time=658 error_code=0
SET TIMESTAMP=1282620387/*!*/;
BEGIN
/*!*/;
# at 376
#100824 11:26:27 server id 1 end_log_pos 483 Query thread_id=3 exec_time=658 error_code=0
SET TIMESTAMP=1282620387/*!*/;
update xxx set ChineseName='abc'
/*!*/;
# at 483
#100824 11:26:27 server id 1 end_log_pos 510 Xid = 54
COMMIT/*!*/;

所有的日志文件
BEGIN
/*!*/;
# at 170
#100824 11:26:27 server id 1 end_log_pos 277 Query thread_id=1 exec_time=0 error_code=0
use test_dbo/*!*/;
SET TIMESTAMP=1282620387/*!*/;
update xxx set ChineseName='abc'
/*!*/;
# at 277
#100824 11:26:27 server id 1 end_log_pos 304 Xid = 38
COMMIT/*!*/;
# at 304
#100824 11:26:27 server id 1 end_log_pos 376 Query thread_id=3 exec_time=658 error_code=0
SET TIMESTAMP=1282620387/*!*/;
BEGIN
/*!*/;
# at 376
#100824 11:26:27 server id 1 end_log_pos 483 Query thread_id=3 exec_time=658 error_code=0
SET TIMESTAMP=1282620387/*!*/;
update xxx set ChineseName='abc'
/*!*/;
# at 483
#100824 11:26:27 server id 1 end_log_pos 510 Xid = 54
COMMIT/*!*/;
# at 510
#100824 11:40:13 server id 1 end_log_pos 582 Query thread_id=1 exec_time=0 error_code=0
SET TIMESTAMP=1282621213/*!*/;
BEGIN
/*!*/;
# at 2353
#100825 9:13:49 server id 1 end_log_pos 2443 Query thread_id=8 exec_time=0 error_code=0
SET TIMESTAMP=1282698829/*!*/;
delete from ddd
/*!*/;
# at 2443
#100825 9:13:49 server id 1 end_log_pos 2470 Xid = 202
COMMIT/*!*/;
# at 2470
#100825 9:13:53 server id 1 end_log_pos 2542 Query thread_id=8 exec_time=0 error_code=0
SET TIMESTAMP=1282698833/*!*/;
BEGIN
/*!*/;
# at 2542
#100825 9:13:53 server id 1 end_log_pos 2639 Query thread_id=8 exec_time=0 error_code=0
SET TIMESTAMP=1282698833/*!*/;
delete from zzz
/*!*/;
# at 2639
#100825 9:13:53 server id 1 end_log_pos 2666 Xid = 206
COMMIT/*!*/;
# at 2666
#100825 9:13:54 server id 1 end_log_pos 2738 Query thread_id=8 exec_time=0 error_code=0
SET TIMESTAMP=1282698834/*!*/;
BEGIN
/*!*/;
# at 2738
#100825 9:13:54 server id 1 end_log_pos 2835 Query thread_id=8 exec_time=0 error_code=0
SET TIMESTAMP=1282698834/*!*/;
delete from zzz
/*!*/;
# at 2835
#100825 9:13:54 server id 1 end_log_pos 2862 Xid = 207
COMMIT/*!*/;
# at 2862
#100825 9:15:34 server id 1 end_log_pos 2954 Query thread_id=8 exec_time=1 error_code=0
SET TIMESTAMP=1282698934/*!*/;
DROP TABLE `qqq`
/*!*/;
DELIMITER ;



...全文
112 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dzypb 2010-08-25
  • 打赏
  • 举报
回复
这个正则表达式不够彻底。grep -e '[0-9]\{1,2\}:[0-9]\{2\}:[0-9]\{2\}' -e 'SET TIMESTAMP' -e 'xxx' 1.sql
grep 好像做不到 与 $ 这个操作,上面的是或 | 操作,列出好多不想要的
#100825 9:13:53 server id 1 end_log_pos 2639 Query thread_id=8 exec_time=0 error_code=0
SET TIMESTAMP=1282698833/*!*/;
这些东西
dzypb 2010-08-25
  • 打赏
  • 举报
回复
如果把所有对该表操作的放到一个文件,还原的时候非常快,如果没有归类的话,要是一个日志文件几百M 找起来非常费劲,虽然可以加--database=""过滤,如果数据库下面的表多的话,找起来也非常慢
feixianxxx 2010-08-25
  • 打赏
  • 举报
回复
额 写正则啊 帮顶

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧