MySQL 用 binlog 及备份进行回滚/恢复

摘要:
MySQL使用binlog和备份进行回滚/恢复简介如果您遇到数据错误,需要回滚/恢复,可以使用binlog文件和备份进行操作。但是,请注意,如果未提前备份文件或未打开binlog日志文件,则此方法不适用。简单的总结可以扩展binlog的知识。此外,备份必须在工作日做好。

MySQL 运用 binlog 及备份进行回滚/恢复

MySQL 用 binlog 及备份进行回滚/恢复第1张

引言

如果碰到数据错误,需要进行回滚/恢复,可以利用 binlog 文件及备份进行操作。但是请注意,没有提前备份文件,或者没有开启 binlog 日志文件,不适用此方法。
如果数据库建立在云端,可以向相关服务提供商要求恢复;如果自建,建议找找其他办法,或者咨询专业的数据恢复服务。

回滚/恢复

1. 平复下情绪,立即终止相关应用/服务
为最坏情况做准备,所以需要避免磁盘的写操作,以免发生数据写入覆盖。

2. 找到并下载合适时间的全量备份
下载的前提是有提前备份,备份命令:
mysqldump -h主机名 -P端口 -u用户名 -p密码 --database 数据库名 > 文件名.sql

示例:
mysqldump -h 192.168.1.100 -p 3306 -uroot -ppassword --database cmdb > /data/backup/cmdb.sql

可以写一个定时脚本,进行日/周/月备份,以备不时之需。

3. 本地(第二环境)导入备份库
在本地(第二环境)安装MySQL,登录后进行导入:
mysql> source /home/backup.sql

4. 找到并下载 binlog 文件
同样,下载的前提是已提前打开 binlog。
打开需要开启 binlog 的MySQL,查看日志开启状态show variables like 'log_%';

MySQL 用 binlog 及备份进行回滚/恢复第2张

查看所有binlog日志列表show master logs;

MySQL 用 binlog 及备份进行回滚/恢复第3张

将全量备份时间节点耦合上的的所有日志文件下载到备份库所在的环境,比如备份时间为 1月31日,日志文件共有4个,创建时间为:1月1日、1月15日、1月30日、2月1日,那就需要1月30日、2月1日的日志文件。

4. 定位备份库起始位置
将全量备份时间点前后的 SQL 生成,如果备份时间点为2月1日13点整,生成命令:
mysqlbinlog --database=test --start-datetime='2020-02-01 13:00:00' --stop-datetime='2020-02-01 13:00:00' "/Users/***/Downloads/bin/mysql-bin.000020" > /Users/test.sql

打开生成的 SQL 文件:

MySQL 用 binlog 及备份进行回滚/恢复第4张

确认全量备份时间点后的第一条 SQL,记录位置编号

5. 生成备份库备份时间后的所有 SQL
SQL 生成命令:
mysqlbinlog --start-position='164361' /Users/****/Downloads/bin/mysql-bin.000020> binlog_name000020.sql

如果备份文件有多个,例如还有一个mysql-bin.000021,SQL 生成命令不用带位置编号:
mysqlbinlog /Users/****/Downloads/bin/mysql-bin.000021> binlog_name000021.sql

6. 检查并剔除错误 SQL
打开文件,找到错误的 SQL,将其删除,不然还原出的数据仍然为错误数据

7. 本地(第二环境)依次导入SQL,还原完成
按照时间先后顺序依次导入 SQL:
mysql> source /home/binlog_name000020.sql
mysql> source /home/binlog_name000021.sql

现在本地(第二环境)的数据已经恢复正常了,可以进行数据回传,覆盖掉错误数据,最后重启应用/服务,还原完成。

一点总结

可以拓展学习下 binlog 的相关知识,另外,备份平日一定要做好。多饶一句,写这篇博文的时候,微盟的删库事件还在眼前,权限层层制约确实是好事,但也要想到"一抓就死,一放就乱"这句话,管的太严,一定会出现办事效率低下的问题,太松,风险又是可预期的。

免责声明:文章转载自《MySQL 用 binlog 及备份进行回滚/恢复》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ActivityManager分布式环境下限流方案的实现redis RateLimiter Guava,Token Bucket, Leaky Bucket下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql慢查询日志分析工具 mysqlsla(转)

mysql数据库的慢查询日志是非常重要的一项调优辅助日志,但是mysql默认记录的日志格式阅读时不够友好,这是由mysql日志记录规则所决定的,捕获一条就记录一条,虽说记录的信息足够详尽,但如果将浏览慢查询日志做为一项日常工作,直接阅读mysql生成的慢查询日志就有可能比较低效了。 除了操作系统命令直接查看slowlog外,mysql自己也提供了一个阅读s...

3. mysql 索引命中规则及优化

1.什么是索引 “索引(在mysql中叫键 key),是存储引擎快速找到记录的一种数据结构。” --- 《高性能MySQL》,例如innodb引擎使用的就是B+树。 2.索引类型 命令:show index from table_name; 查看索引详情。 主键索引 PRIMARY KEY: 一种特殊的唯一索引,不允许为null,一般建表时会创建主键,若...

分布式监控系统之Zabbix proxy

  前文我们了解了zabbix 使用snmp和jmx信道采集数据的相关使用配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14029864.html;今天我们来说zabbix proxy;   1、zabbix proxy是什么?为什么要使用zabbix proxy?   简单讲zabbix proxy就是zab...

MySQL查询截取分析

一、查询优化 1,mysql的调优大纲 慢查询的开启并捕获 explain+慢SQL分析 show profile查询SQL在Mysql服务器里面的执行细节和生命周期情况 SQL数据库服务器的参数调优 2,小表驱动大表 mysql的join实现原理是,以驱动表的数据为基础,“嵌套循环”去被驱动表匹配记录。驱动表的索引会失效,而被驱动表的索引有效。 #假...

Docker 运行 MYSQL 数据库的总结

公司里面要求做一个小demo 学习java相关的东西  然后使用了mysql数据库  很早之前做过mysql的容器化运行. 现在想想已经忘记的差不多了  所以这里总结一下 docker化运行mysql数据库的方法 1. 先说 mariadb 其实mariadb 就是mysql创始人反抗oracle的一个硬分支 里面的 环境变量和数据文件的路径还基本上相似....

MySQL中实现递归查询

对于数据库中的树形结构数据,如部门表,有时候,我们需要知道某部门的所有下属部分或者某部分的所有上级部门,这时候就需要用到mysql的递归查询 1、创建表 按 Ctrl+C 复制代码 按 Ctrl+C 复制代码 2、初始数据 INSERT INTO `t_areainfo` VALUES ('1', '0', '中国', '0', '0'); I...