前提条件:
- 启用二进制文件选项:
[root@node2 ~]# vim /etc/my.cnf
[mysqld]
log_bin=/data/log_bin/mariadb-bin
- 数据库全备份
[root@node2 ~]# mysqldump -A -F --single-transaction --master-data=2 --flush-privileges > /backup/full_bak_$(date +%F).sql
还原步骤:
数据库加读锁,防止进一步的变化,并做好准备工作
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER LOGS; #查看binlog的position
mysql> FLUSH LOGS; #生成新日志
导出二进制日志文件
- 查看全备份文件中二进制日志起始位置
[root@node2 ~]# head /backup/full_bak_2020-03-31.sql
- 导出二进制日志为sql脚本
[root@node2 ~]# mysqlbinlog --start-position=245 /data/bin_log/mariadb-bin.000003 > /backup/bin_log.sql
编辑二进制日志sql脚本
- 找到误操作指令并删除
~]# vim /backup/bin_log.sql
恢复数据库
- 禁止用户访问数据库,启动之
[root@node2 ~]# vim /etc/my.cnf
[mysqld]
skip-networking
[root@node2 ~]# systemctl restart mariadb.service
- 恢复全备,导入全备sql脚本
~]# mysql -uroot -pcentos < /backup/full_bak_2020-03-31.sql
- 恢复二进制日志,导入sql脚本
~]# mysql -uroot -pcentos < /backup/bin_log.sql
- 解除禁止用户访问,重启服务
[root@node2 ~]# vim /etc/my.cnf
[mysqld]
[root@node2 ~]# systemctl restart mariadb.service