- 逻辑全量备份数据库 tmp
- 正常的数据库写操作
- 漏了 WHERE 从句,错误地删除了 tmp 表的所有记录
- 在MySQL 恢复实例上,用上面 tmp 数据库的全量备份恢复 tmp 数据库到全量备份时的状态
- 将误删除时间点前后一段时间的 binlog 转换成 sql 文件
- 从 binlog 转换出的 sql 文件搜索 “DELETE”,找到 DELETE 语句的 binlog 记录开始位置为 3184,结束位置为 3255
- 将 binlog 中, 从全量备份 sql 文件中记录的 binlog 位置 2409 开始,到 DELETE 语句的 binlog 记录开始位置 3184 为止的记录转换成 sql 文件
- 在MySQL 恢复实例上,执行从全量备份 sql 文件中记录的 binlog 位置 2409 开始,到 DELETE 语句的 binlog 记录开始位置 3184 为止的数据库写操作
本文介绍使用 mysqldump 和 binlog 进行 MySQL 逻辑备份和恢复。
环境:
MySQL: 8.0.25 MySQL Community Server - GPL
操作系统: Windows 10 家庭中文版,版本号 1803
CPU: 4核,AMD A4-5000 APU,1.50 GHz
逻辑全量备份数据库 tmp
mysqldump -h127.0.0.1 -P3306 -uroot -p —single-transaction —master-data=2 —databases tmp > tmp-mysqldump-20211111.sql
正常的数据库写操作
UPDATE tmp SET status
= 2 WHERE id = 1;
INSERT INTO tmp (id, status
) VALUES (4, 1);
漏了 WHERE 从句,错误地删除了 tmp 表的所有记录
DELETE FROM tmp;
在MySQL 恢复实例上,用上面 tmp 数据库的全量备份恢复 tmp 数据库到全量备份时的状态
mysql -h127.0.0.1 -P3316 -uroot < tmp-mysqldump-20211111.sql
将误删除时间点前后一段时间的 binlog 转换成 sql 文件
mysqlbinlog —start-datetime=”2021-11-11 20:43:00” —stop-datetime=”2021-11-11 20:50:00” —verbose D:\ProgramData\MySQL8.0\Data\SYZHOU1402-bin.000120 > binlog-around-wrong-delete.sql
从 binlog 转换出的 sql 文件搜索 “DELETE”,找到 DELETE 语句的 binlog 记录开始位置为 3184,结束位置为 3255
将 binlog 中, 从全量备份 sql 文件中记录的 binlog 位置 2409 开始,到 DELETE 语句的 binlog 记录开始位置 3184 为止的记录转换成 sql 文件
mysqlbinlog —start-position=2409 —stop-position=3184 D:\ProgramData\MySQL8.0\Data\SYZHOU1402-bin.000120 > binlog-between-full-backup-and-wrong-delete.sql
在MySQL 恢复实例上,执行从全量备份 sql 文件中记录的 binlog 位置 2409 开始,到 DELETE 语句的 binlog 记录开始位置 3184 为止的数据库写操作
mysql -h127.0.0.1 -P3316 -uroot < binlog-between-full-backup-and-wrong-delete.sql
参考
https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html
https://dev.mysql.com/doc/refman/8.0/en/point-in-time-recovery-binlog.html
https://dev.mysql.com/doc/refman/8.0/en/point-in-time-recovery-positions.html