使用 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 阅读更多
从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 阅读更多
相关文章推荐
- 关于使用Mysql binlog对数据进行恢复的实战
- 数据恢复之R-Studio的使用常见问题解答
- 使用EasyRecovery Pro 6.04恢复RAW格式硬盘的数据实战
- 数据恢复-ext3grep的使用
- 注册表故障恢复 必须使用记录或另一备份以恢复包含系统注册表数据的文件。恢复成功
- 必须使用记录或另一备份以恢复包含系统注册数据的文件.恢复成功(已解决)
- 使用blockrecover 对有坏块的数据文件进行恢复
- 使用mysql备份工具innobackupex将本地数据 直接恢复 到远端服务器数据目录操作实例
- 使用Oracle9i的新特性Flashback Query恢复误删除数据
- 使用重复数据删除进行灾难恢复和达到RTO
- [原]记一次使用flashback恢复数据,警惕自己不要浮躁,还是太嫩了
- 使用dul恢复数据(转载)
- 使用数据恢复顾问DRA
- oracle使用闪回技术中恢复误删除和修改的表及数据
- 使用数据恢复顾问ADR
- 使用RMAN恢复全库、表空间、数据文件的方法总结
- 《WinHex》误使用Ghost恢复系统恢复数据图文教程
- oracle 使用DBMS_FLASHBACK恢复意外删除的数据
- 使用SQL语句备份与恢复数据库
- 使用Log Explorer查看和恢复数据