您的位置:首页 > 数据库 > MySQL

MySql数据的备份与恢复

2019-08-08 13:07 585 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/a1224645904/article/details/98851428

在项目开发中对数据的定期备份十分重要,在系统受到攻击,数据被破坏后通过日志文件进行数据的恢复是必不可少的技能。
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)
);

操作步骤

  1. 必要知识介绍
    在服务器安装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;

  2. 数据库备份
    /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保留之前的操作记录。

  3. 添加新的数据,并模拟黑客破坏数据库
    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-postion="106" --stop-position="747" | /var/lamp/mysql/bin/mysql -uroot -p123456 test


此时查看数据表 t1 数据成功恢复,完美!

此时数据已经恢复,可以通过刷新日志的方式重新开启新的日志。
mysql>flush logs;

结论

数据库的备份与恢复是开发人员必备的技能,以上步骤是我学习数据库的备份与恢复的过程,我相信通过这篇文章大家对数据的恢复有了一定了解,文章中仍有许多不足的地方,这里只记录了实际操作的一小部分,我会在后面不断的学习的,让我们一起进步吧。

如果您对这个文章有任何异议,那么请在文章评论处写上你的评论。
愿大家都能在编程这条路,越走越远。

别人都有背景,而你只有背影。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: