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、其它

方法一恢复速度最快,最精确。