MySQL 利用 Binlog 日志恢复指定时间节点的数据
需求
恢复 edurp_service_user 数据库在 2020 年 1 月 11 号 22:33:16 之前的数据。
恢复过程
- 先将 MySQL 数据目录(默认为 /var/lib/mysql)迁移至配置相同的测试 MySQL 环境,覆盖原本的数据目录即可。
- 基于时间点导出 SQL 语句。
mysqlbinlog --no-defaults --database=edurp_service_user --skip-gtids --stop-datetime='2020-01-11 22:33:16' /var/lib/mysql/mysql-bin.000006 > /opt/2020-01-11.sql
- 在 MySQL 客户端命令行进入
edurp_service_user
数据库,执行source /opt/2020-01-11.sql
恢复数据即可。
知识点
基于时间点
# 起始时间 mysqlbinlog --start-datetime='2016-01-04 15:11:00' # 结束时间 mysqlbinlog --stop-datetime='2016-01-04 15:11:00'
基于定位符
# 起始定位符 mysqlbinlog --start-position=249 binlog.000006 # 结束定位符 mysqlbinlog --stop-position=249 binlog.000006
指定表
使用 grep
命令抽取二进制日志:
grep -B3 -w tb_name db_name.sql > tb_name.sql