mysql数据库-秒级别精度恢复数据、误删表恢复实现

1 前提条件

  1. 源db要可用的全量备份数据
  2. 源db要有可用的bin-log日志备份
  3. 还原实施依据实际问题情况,使用2.1或是2.2的步骤执行

1.1 源数据库二进制日志独立存放

[mysqld]
log-bin=/data/mysql/mysql-bin

1.2 完全备份时,需记录备份的二进制位置

mysqldump -uroot -p123456 -A -F --default-character-set=utf8  --single-transaction --master-data=2 | gzip > /backup/all_`date +%F`.sql.gz

mysql> show master logs;

2 还原实施

2.1 全量备份还原环境初始化准备

2.1.1 备份文件准备

gzip -d /backup/all_2000-01-01.sql.gz

2.1.2 数据库准备

如果是故障本机从修复,重新启动数据库程序,如果是新建数据库无需此操作

systemctl restart mariadb
#mysql_install_db  --user=mysql  #依据损坏程度可能需要事先重新生成数据库相关文件,或是重装数据库,或是重装系统

2.1.3 还原数据

2.1.3.1 登录数据库确认bin-log position并还原数据文件

MySQL> show master logs;
# 还原数据库前先关闭bin-log日志记录功能,避免无效记录
MySQL> set sql_log_bin=0;
MySQL> source /data/all_1999-01-01.sql

2.1.3.2 确认全备份文件中记录的二进制文件和位置,将其之后生成的所有二进制日志进行复制备份

# grep '^-- CHANGE MASTER TO' /data/all_1999-01-01.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=188;

2.1.3.3 根据bin log position,备份从完全备份后的二进制日志,生成新需要的增量sql数据文件

# 二进制日志的备份还原
mysqlbinlog mysql-bin.000002 --start-position=188 > /backup/inc.sql
mysqlbinlog mysql-bin.000003 >> /backup/inc.sql
mysqlbinlog mysql-bin.000004 >> /backup/inc.sql
...

2.1.3.4 还原增量备份sql数据

# 还原备份文件
MySQL> source /backup/inc.sql
MySQL> set sql_log_bin=1;

2.2 误删表还原准备

2.2.1 首先执行以上2.1到2.1.3.3的步骤,完成全量数据还原增量数据的生成操作

2.2.2 找到误删除的语句,从bin_log增量备份中删除此语句

sed -i.bak '/^DROP TABLE/d' /data/inc.sql

2.2.3 对修改过的二进制日志进行还原

# 还原备份文件
MySQL> source /backup/inc.sql
MySQL> set sql_log_bin=1;

5 其他

PS:

Mysql数据库按时间点恢复实战

原文地址:https://www.cnblogs.com/firewalld/p/14816431.html