那就直接分析 MYSQLDUMP导出的全备,把这个表相关的 CREATE TABLE , INSERT INTO 取出。然后这张表。然后再用MYSQLBINLOG生成 BINLOG日志中的SQL语句文件,做同样处理,找出所有与这个表相关的操作。(如果有触发器则会更复杂)
binlog中的sql文件找不到啊!-- 找到csf_pub库的所有记录。 [root@sh-192-168-250-20 daily]# /usr/local/mysql/bin/mysqlbinlog mysql-bin.000042 -dcsf_pub > csf_pub_22.sql;-- 找到所有file_trace_b表的记录 [root@sh-192-168-250-20 daily]# grep -i "file_trace_b" csf_pub_22.sql >trac_file_d.sql;-- 找到所有file_trace_b表的inesrt记录 [root@sh-192-168-250-20 daily]# grep -v -i "delete" trac_file_d.sql > trac_file_d_insert.sql最后 [root@sh-192-168-250-20 daily]# more trac_file_d_insert.sql 显示出来确是: #101221 14:02:45 server id 1 end_log_pos 139263144 Table_map: `csf_pub`.`file_trace_b` mapped to number 13677 #101221 14:06:06 server id 1 end_log_pos 140344665 Table_map: `csf_pub`.`file_trace_b` mapped to number 13677 #101221 14:06:06 server id 1 end_log_pos 140345266 Table_map: `csf_pub`.`file_trace_b` mapped to number 13677 #101221 14:06:06 server id 1 end_log_pos 140346197 Table_map: `csf_pub`.`file_trace_b` mapped to number 13677 不是insert的sql语句,大家指点,问题出在哪里啊?
只能把最新的全备找出, 你或者可以恢复到另一台MYSQL服务器上。然后再通过 BINLOG导出SQL语句进行分析。 这些操作即使使用某种工具也必须去执行的。
binlog中的sql文件找不到啊!-- 找到csf_pub库的所有记录。
[root@sh-192-168-250-20 daily]# /usr/local/mysql/bin/mysqlbinlog mysql-bin.000042 -dcsf_pub > csf_pub_22.sql;-- 找到所有file_trace_b表的记录
[root@sh-192-168-250-20 daily]# grep -i "file_trace_b" csf_pub_22.sql >trac_file_d.sql;-- 找到所有file_trace_b表的inesrt记录
[root@sh-192-168-250-20 daily]# grep -v -i "delete" trac_file_d.sql > trac_file_d_insert.sql最后
[root@sh-192-168-250-20 daily]# more trac_file_d_insert.sql
显示出来确是:
#101221 14:02:45 server id 1 end_log_pos 139263144 Table_map: `csf_pub`.`file_trace_b` mapped to number 13677
#101221 14:06:06 server id 1 end_log_pos 140344665 Table_map: `csf_pub`.`file_trace_b` mapped to number 13677
#101221 14:06:06 server id 1 end_log_pos 140345266 Table_map: `csf_pub`.`file_trace_b` mapped to number 13677
#101221 14:06:06 server id 1 end_log_pos 140346197 Table_map: `csf_pub`.`file_trace_b` mapped to number 13677
不是insert的sql语句,大家指点,问题出在哪里啊?
grep -i "insert" trac_file_d.sql > trac_file_d_insert.sql 这样呢,要是没的话,.估计这个binlog里面没有insert的记录
2 你的需求是库分表,时分段。
3 我觉得像你这种情况,分表备份是必须的,也是容易实现的。
可以写脚本来完成,也就是说枚举出所有库名,然后进入第一个库,枚举所有表名,然后备份第一个表。如此循环,就可以每个表生成一个sql文件。
但有个小缺点,是这种备份方法出来的sql没有建库语句。也就是说这个备份,不适合到另外一台机子上恢复。当然你也可以用脚本单独生成这些语句。
4 binglog 正相反,它可以基于时间回复,但是却不是每个表单独一个文件,如何实现binlog只恢复单个表,还没想到,不知道
mysqlbinlog hostname-bin.[0-9]* | mysql aaa bbb
这样的命令可以不?
http://www.zmanda.com/backup-mysql.html