20190328
今天遇到了个场景,用户把多张表里数据删除了,要求做恢复。
首先拿到了个mysqldump的文件,开始新建实例,开始source导入sql文件
然后就遇到坑了,最开始以为是字符集的问题,检查一遍发现没啥问题,接着看出sql文件
一堆堆看不懂的,查看表结构发现,表中带longblob字段。原因其实是mysqldump时表中带blob这种要加特定参数--hex-blob,不然就是上图那种,导入不进去。
带参数的sql文件如下。
接着上面场景继续,当然这个备份是废了,想办法解析binlog,解析binlog后又来坑了,发现只有主表SQL语句,主表关联的外键操作并没有,而级联表才是需要恢复的。顿时又GG了。当然对于binlog不记录这个操作我也是才知道的,看见外键危害多大,主从复制都没办法做吧(我猜的)。
接着说生产库上有个冷备份,然后拷贝下来,覆盖测试库上的datadir,报错各种wings,具体忘截图了,和数据字典有关,及时表.frm存在但无法读取。后来慢慢摸索发现,这个备份是通过mysqlbackup备份的,靠,还真有用官方备份的。既然找到了备份方式,那么就好对付了。处理方式和xtrabackup类似。
全备
mysqlbackup --user=mysqlbackup --password=123 --backup-dir=/backup --with-timestamp --compress-level=9 backup
mysqlbackup --backup-dir=/backup/2017-09-18_13-49-11 apply-log
mysqlbackup --datadir=/data/mysql --backup-dir=/backup/2017-09-18_13-49-11 copy-back
增量
mysqlbackup --defaults-file=/etc/my.cnf --user=mysqlbackup --password=123 --with-timestamp --incremental --incremental-backup-dir=/backup/ --incremental-base=dir:/backup/2017-09-18_14-51-25 backup
mysqlbackup --backup-dir=/backup/2017-09-18_15-25-59 apply-log #全备的库先apply-log
mysqlbackup --backup-dir=/backup/2017-09-18_15-25-59 --incremental-backup-dir=/backup/2017-09-18_15-42-56 apply-incremental-backup #在步骤一的基础上继续恢复
mysqlbackup --defaults-file=/etc/my.cnf --force --backup-dir=/backup/2017-09-18_15-25-59/ --datadir=/data/mysql copy-back-and-apply-log #拷贝然后再恢复增备的log
官方推荐的
mysqlbackup --user=mysqlbackup --password=123 --backup-image=backup.mbi --backup-dir=/backup --with-timestamp backup-to-image
mysqlbackup --defaults-file=/backup/2017-09-15_17-06-07/server-my.cnf --datadir=/data/mysql --backup-dir=/backup/2017-09-15_17-06-07 copy-back
增量
mysqlbackup --user=mysqlbackup --password=123 --backup-image=backup.mbi --backup-dir=/backup --with-timestamp backup-to-image #先备份成image
mysqlbackup --defaults-file=/etc/my.cnf --user=mysqlbackup --password=123 --with-timestamp --incremental --incremental-backup-dir=/backup/ --incremental-base=dir:/backup/2017-09-18_15-53-57 backup #在原来备份的基础上进行增量备份
mysqlbackup --backup-dir=/backup/full --backup-image=/backup/2017-09-18_15-53-57/backup.mbi image-to-backup-dir 先转换成方法一的备份文件,后续的步骤都跟前面一样
mysqlbackup --backup-dir=/backup/full apply-log
mysqlbackup --backup-dir=/backup/full --incremental-backup-dir=/backup/2017-09-18_15-56-13 apply-incremental-backup
mysqlbackup --defaults-file=/etc/my.cnf --force --backup-dir=/backup/full --datadir=/data/mysql copy-back-and-apply-log