您的位置:首页 > 数据库 > MySQL

使用 mysql binlog 恢复数据

2015-09-02 13:29 591 查看
【mysqlbinlog】
从binlog里面摘出需要恢复执行的SQL
mysqlbinlog   --start-position="$startpos"  --stop-datetime="$stoptime"    --database="$db"    "$binlog_xxxxxx"   >   recover.sql
/$homedir/bin/mysql  --defaults-extra-file=/$homedir/etc/user.root.cnf   <  recover.sql           // 或者 source  /$path/recover.sql                      
【例子1,按position导出】mysqlbinlog --start-position=xxx --stop-position=xxx  mysql-bin.000xxx > all.sql
【例子2,按position,只导出某个库的SQL】mysqlbinlog --start-position=xxx  --stop-position=xxx  --database=dbname     mysql-bin.000xxx  > dbname.sql
【例子3,同样可以处理relay-log】mysqlbinlog --start-position=253 --stop-position=6731   relay-log.000146 > sql
【手动主从切换,需要补数据的时候】
当主库异常,从库没有都停在同一个点上,如果主库还可以连上继续同步(从库还能继续拉binlog),那么就等待从库同步完成,再主从切换
当主库异常,从库没有都停在同一个点上,如果从库已经不能继续直接通过主从同步拉binlog,但是主库机器没死,可以手动去主库机器上把binlog找出来恢复(根据从库slave staus点和主库master status点的差异,或者说根据从库slave staus点和主库最后一条binlog的position点的差异)
当主库异常,从库没有都停在同一个点上,如果从库已经不能继续直接通过主从同步拉binlog,并且主库机器死了,那么可以选择已经同步完成,并且拉取的binlog最多那个从库作为新主库,
先切中间层入口,让其提供写服务,然后把其它从库“向新主看齐”(通过其它从库relay-log最后一条SQL,找到新主relay-log中相应位置position_A,然后把position_A往后的所有relay-log抓出来
 去从库上进行恢复,注意每个从库与新主库之间的relay-log可能都是不一样的,要分别抓取不同的relay-log段)
【例子4,按 时间 导出】
可以在mysqlbinlog语句中通过--start-date和--stop-date选项指定DATETIME格式的起止时间
./mysqlbinlog --stop-date="2009-04-10 17:41:28"    /$path/mysql-bin.000002 > xxx.sql
【例子5,如果按时间导出的时候跨越多个binlog,中间用空格隔开,打上完全路径】
./mysqlbinlog --start-date="2009-04-10 17:30:05" --stop-date="2009-04-10 17:41:28" /$path/mysql-bin.000002  /$path/mysql-bin.0000023>  xxx.sql
【ROW模式下从binlog里面截取SQL并重新执行的方法---基本和STATEMENT模式一样】
 mysqlbinlog   -vv   mysql-bin.000xxx|less       // 查看ROW格式binlog的时候加上 -vv ,可以把SQL语句部分信息打印出来,方便辨认,方便找到 start-position 和 stop-position
 mysqlbinlog  --start-position=xxx      --stop-position=xxx     mysql-bin.000xxx > recover.sql       //和STATEMENT模式一样
 mysql.local   <   recover.sql     //和STATEMENT模式一样
【其它,查看row格式的binlog的相关语句】
mysqlbinlog --base64-output="decode-rows" –vv mysqlbinlog    |less 
1、show binlog/relaylog  events in mysql-bin.xxxxxx   from posxxx   limit xxx;
2、mysqlbinlog --base64-output="decode-rows" --verbose -v   --datebase -D --start-position --start-datetime  阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: