环境:
两台mac上的docker实例里的mysql 5.6之前配置了两台mysql的主从。今天不小心停掉了一台docker,导致数据对不上。于是,来个全量备份与恢复的操作。
全量备份和恢复
//锁库 只能读 不能写。 退出终端时默认unlock tables; 释放表。踩到的第一个坑
flush table with read lock;
//导出 压缩 又踩到一个坑。第一次导出时忘记了写库名 db3。 导出的是错误信息,但是没有提示!!
mysqldump -uroot -p --flush-logs db3 | gzip > db3.gz
//将数据移到需要恢复的机子
scp xxxx
//cannot contect。。。忘记给docker映射22端口。这条命令行不通。最后放到nginx的html目录下,然后用wget方式下载。
//解压
gunzip db3.gz
//导入 这一步注意 如果报错很有可能就是之前导出的数据有异常
mysql -uroot -p < db3
//完成。释放库。
unlock tables;
增量备份和恢复
//执行该命令 重新生成个bin文件。每天一次。
flush-logs
//按照位置恢复
mysqlbinlog --stop-position=4590 e:/mysqldb/logbin.000001 | mysql -uroot -p
//按照时间恢复
mysqlbinlog --stop-datetime="2013-07-24 18:17:19" e:/mysqldb/logbin.000001 | mysql -uroot -p
//可以控制从什么时候开始 到什么是结束
mysqlbinlog --start-position=4 --stop-position=106 yueliangd
ao_binglog.000001 > c:\\test1.txt