在项目开发中对数据的定期备份十分重要,在系统受到攻击,数据被破坏后通过日志文件进行数据的恢复是必不可少的技能。
1.数据库的备份
2.通过bin-log日志文件对数据进行恢复。
通过bin-log日志恢复数据的前提是需要mysql开启bin-log日志。
话不多说,直接开干。
情景介绍
存在数据库test,有一张t1表,字段为 id、name,插入数据 user1,user2,user3,user4,user5之后进行数据备份,并重新生成bin-log日志,之后在插入数据user6,user7,user8,user9,user10,然后模拟数据库被黑客攻击,test数据库被恶意删除,此时只能通过日志文件来对数据库进行恢复。
### t1的表结构语句
create table tl (
id int primary key auto_increment,
name varchar(30)
);
操作步骤
-
必要知识介绍
在服务器安装mysql服务,开启bin-log日志#修改mysql的配置文件my.cnf,在mysqld下 添加如下配置 [mysqld] log-bin=mysql-bin #然后重启mysql服务,在日志目录下查看生成的日志文件 mysql-bin.000001 #日志文件的名称是根据你的配置变化的,如果配置成 log-bin=myql-log-bin,则日志文件生成为myql-log-bin.000001
查看数据库日志
mysql>show master status;
-
数据库备份
/var/lamp/mysql:这是我的mysql安装目录,在使用过程中替换成自己的安装目录即可
t1表中插入数据user1,user2,user3,user4,user5 (在mysql命令行操作)mysql>insert into tl (name) values("user1"),("user2"),("user3"),("user4"),("user5");
对test数据库进行备份,生成备份文件test.sql (在服务器命令行操作)
#/var/lamp/mysql/bin/mysqldump -root -p123456 test -l-F >"/tmp/test.sql";
-l:在备份过程中对数据库添加读锁,所有人在备份期间无法写入数据库。
-F:在备份完成后生成新的日志文件。
在以上命令完成后,会在tmp目录下生成test.sql的文件,并且mysql的日志文件中多了mysql-bin.000002的日志文件。此之后的操作都会记录在mysql-bin.000002中,mysql-bin.000001保留之前的操作记录。 -
添加新的数据,并模拟黑客破坏数据库
t1表中插入数据user6,user7,user8,user9,user10 (在mysql命令行操作)mysql>insert into tl (name) values("user6"),("user7"),("user8"),("user9"),("user10");
模拟黑客恶意删除数据库
mysql>drop table tl;
4. 通过备份文件恢复数据库
通过备份文件恢复备份数据库
#/var/lamp/mysql/bin/mysql -uroot -p123456 test </tmp/test.sql
此时数据库部分数据已经恢复,其余数据通过bin-log日志文件进行恢复。
5. 通过日志文件恢复其余数据。
分析:现在日志文件中除了插入记录外,还有黑客删除数据库的记录,此时若直接通过恢复mysql-bin.000002中的全部记录,则仍会使数据全部清除,所以需要只选择mysql-bin.000002中的部分记录进行恢复,黑客删除的记录,则剔除。
查看mysql-bin.000002中的日志信息。
mysql>show binlog events in "mysql-bin.000002"
通过日志文件恢复数据库,指定需要恢复的位置
#/var/lamp/mysql/bin/mysqlbinlog --no-defaluts mysql-bin.000002 --start-position="106" --stop-position="747" | /var/lamp/mysql/bin/mysql -uroot -p123456 test
此时查看数据表 t1 数据成功恢复,完美!
此时数据已经恢复,可以通过刷新日志的方式重新开启新的日志。
mysql>flush logs;
结论
数据库的备份与恢复是开发人员必备的技能,以上步骤是我学习数据库的备份与恢复的过程,我相信通过这篇文章大家对数据的恢复有了一定了解,文章中仍有许多不足的地方,这里只记录了实际操作的一小部分,我会在后面不断的学习的,让我们一起进步吧。
如果您对这个文章有任何异议,那么请在文章评论处写上你的评论。
愿大家都能在编程这条路,越走越远。
别人都有背景,而你只有背影。