在企业中数据是至关重要的,所以我们需要对数据库的数据进行备份,但是怎样才能保证恢复的数据最接近数据库出问题的那一刻呢或者是误操作的那一刻呢?。我们就需要一个合适的备份方案。现在我就说一种比较好的备份方案。mysqldump完全备份+binlog增量备份。通过mysqldump进行完全备份,这个时间最好是一天一备或者一天两备,这个备份的间隔越小,恢复数据越精准,但是也不是越多越好,因为这个备份文件是很占用空间的。这里就只备份一次,凌晨备份,另外通过备份binlog文件,来通过binlog定位故障或者问题的时间点或者position,最大程度的恢复数据。
一、准备生产环境
创建一个数据库yck,创建一个表yck,生成一些数据。
如下所示:
二、模拟生产环境的误操作
2.1、备份数据库,完全备份
命令:mysqldump -uroot -padmin@1234 --single-transaction --master-data=2 --flush-logs yck >yck.sql
mysqldump -uroot -padmin@1234 --single-transaction --master-data=2 --flush-logs yck >yck.sql
命令讲解:
--single-transaction:用于热备份是锁定数据库所有表
--master-data=2:记录当前二进制文件名称和position值,2这个值表示生成sql语句记录在备份文件中,且这条语句是被注释的,只用于恢复数据时确认还原点。这个值还可以是1,但是生成的sql语句是非注释的
--flush-logs:日志滚动,备份前滚动一次日志,生成新的二进制文件。
2.2、模拟产环境正常数据产生
现在模拟误操作,删除一条数据。
查看当前二进制日志的文件名字,滚动日志,让误操作的日志保存在当前日志中。
三、数据恢复
删除数据库yck,创建数据库yck,use进入数据库yck。恢复完全备份文件的数据。
根据备份文件中记录的二进制文件和position点,我们可以退通过二进制文件mysql-bin.000008,和position=154,进行增量恢复。
通过分析二进制文件,确定还原结束点position=733
命令: mysqlbinlog --database=yck --start-position=154 --stop-position=733 /var/log/mysql/mysql-bin.000008 |mysql -uroot -padmin@1234 -v yck
mysqlbinlog --database=yck --start-position=154 --stop-position=733 /var/log/mysql/mysql-bin.000008 |mysql -uroot -padmin@1234 -v yck
命令解析:
--databse=yck:制定要回复的数据名称
--start-position=154:指定从position=154位置点开始恢复
--stop-position=733:指定从position=733位置点结束恢复
|:管道将前面的命令结果交给后面的命令执行
-v :表示执行mysql语句
四、验证数据是否恢复
至此,模拟的误操作,已经将数据恢复到误操作之前。