实验背景:对数据库进行备份是运维工作中非常重要的一环,生产环境下常用mysqldump这一逻辑备份工具进行,而且通常是完全备份且热备份。结合数据库自身的二进制日志文件,可以对基于备份时间点之后的误删除数据等操作进行数据恢复。
实验条件:热备需求-->数据库引擎支持事务(此例中用的是mariadb默认的innodb引擎),恢复需求-->数据库的二进制日志文件确保为开启状态。
实验过程:模生产环境下的正常备份(通常设置计划任务,在规定时间点利用逻辑备份工具mysqldump进行整个库的全备份);模拟破坏数据库中的库或者表;利用备份节点处的二进制格式日志恢复被破坏的库或者表。
实验步骤:1.[root@centos7 ~]# mysqldump -uroot -pcentos -A -F --single-transaction --master-data=2 > /app/databak.$(date +%F_+%T).sql
2.错误操作 [root@centos7 ~]# mysql -uroot -pcentos -e "drop database hellodb"
正确操作 [root@centos7 ~]# mysql -uroot -pcentos -e "create database testdb"
3.恢复被误删除的数据库hellodb
1)查询/app/databak.2018-10-11_+20\:52\:28.sql 文件,找到备份节点时的二进制日志文件
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=245;
2)导出指定二进制日志
[root@centos7 ~]# mysqlbinlog /app/binlog/mysql-bin.000002 > binlog.sql
3)编辑binlog.sql文件,将错误操作的部分注释或者删除
#drop database hellodb
4)阻挡客户端访问数据库
[root@centos7 ~]# iptables -A INPUT -p tcp --dport 3306 -j REJECT
5)导入备份文件以及修改的二进制日志
[root@centos7 ~]# mysql -uroot -pcentos < /app/databak.2018-10-11_+20\:52\:28.sql
[root@centos7 ~]# mysql -uroot -pcentos < ./binlog.sql
6)解除防火墙策略,完成恢复操作
[root@centos7 ~]# iptables -D INPUT -p tcp --dport 3306 -j REJECT