MySQL非常规恢复
来自技术开发小组内部wiki
目录
1、快速恢复全库到当天任意时间点(179操作)
从190上确定要恢复时间点的logfile,postion,然后执行恢复脚本。 例如:
/root/script/start_slave.sh mysql-bin.000796 636526112
2、快速恢复单表到当天0点(179操作)
恢复脚本在/data/backup/split/目录下,名为:split--表名.sql 执行前注释类似CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000845', MASTER_LOG_POS=891633490;行,或只取出需要的insert语句。 例如: /data/backup/split/split--uc_vars.sql
3-1、update误操作回退(190操作)
从190上确定要恢复时间点的logfile,postion,然后执行恢复。 例如:
-B参数,指定用于闪回数据。其它参数同mysqlbin。 mysqlflashback -B --start-position=359220 --stop-position=1425649 mysql-bin.000790 > /work/01.sql #查看 mysqlflashback -B --start-position=359220 --stop-position=1425649 mysql-bin.000790 | mysql -S/tmp/mysql.sock test #执行闪回
3-2、作为mysqlflashback的补充
mysqlflashback遇特殊字符等(如换行/x0a)会失败,如果包含特殊字符的列并不需要恢复,可以使用。 例如:
/usr/local/mysql/bin/mysqlbinlog -vv --start-position=359220 --stop-position=1425649 mysql-bin.000790 > /work/01.sql #取时间段binlogsql /root/script/set_update_col.sh fmb_new.fmb_order_returns #设置要恢复的set,where包含的列 /root/script/get_update_sql.sh /work/01.sql #生成回退sql-->/tmp/t_s02.tmp
4、如果187承担主角色时操作
a)59.151.119.187:(如不执行,在任务执行时间段负载会高一些) 停用定时任务 03 05 * * * /data/backup/mysql_179_bak/script/run.sh > /data/backup/mysql_179_bak/script/run.log 2>&1 b)检查上面定时任务run.sh是否正在运行,有则kill及其子进程 c)59.151.119.179: /root/script/dump_mysql.sh脚本中注释以下行: . /root/script/sync_mysqlbak_187.sh
5、其它
方法一恢复速度最快,最精确。