MySql数据的备份与恢复

8 篇文章 1 订阅

在项目开发中对数据的定期备份十分重要,在系统受到攻击,数据被破坏后通过日志文件进行数据的恢复是必不可少的技能。
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-position="106" --stop-position="747" | /var/lamp/mysql/bin/mysql -uroot -p123456 test
在这里插入图片描述
此时查看数据表 t1 数据成功恢复,完美!
在这里插入图片描述
此时数据已经恢复,可以通过刷新日志的方式重新开启新的日志。
mysql>flush logs;

结论

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

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

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

php版mysql数据备份恢复工具,这是亮仔修改的无乱码版 在原faisunSQL 4.0的基础上,针对数据备份过程中出现乱码的问题,做了优化. 增强的功能: 1.自动识别数据库版本,对于MySQL 4.1以上,备份数据时提示选择字符集. 2.导入数据时,提示原数据库编码,并自动识别. 3.增加导入目标数据库字符集选项. 4.支持GBK、BIG5、UTF8之间的编码转换(见特别说明4). 特别说明: 1.乱码问题一般仅出现在MySQL 4.1/MySQL 5 版本以后,如果你的数据库低于这个版本,基本可以不用考虑这个问题. 2.确保原始数据的完整是至关重要的.就算导出时出现乱码,但只要原始数据完整,总有解决的办法.所以,导出时数据库字符集的选择必须正确,保证导出数据无乱码.一般为GBK,UTF8或Latin1.导出后,可以用文本编辑器先查看一下,看是否出现问号(?)等乱码. 3.导出和导入数据编码要保持一致(见特别说明4). 4.虽然程序目前支持GBK、BIG5、UTF8之间的编码转换,但这种转换不是安全的.首先你的目标导入服务器要支持iconv,即在导入时如果"编码转换功能"提示为支持,则可以使用此功能.反之则不可以.其次,转换时的数据必须是"干净"的.即GBK、BIG5、UTF8不能混合.如果你想将原来备份出的GBK数据导入到编码为UTF8数据库,则你的GBK数据中仅能含有GBK或GB2312的简体中文字符.不可以出现BIG5等繁体字符,否则转换将失败.基本上,一般的博客/论坛数据都不能保证这种纯净性,谁也不能保证你的文章中不会混合使用简体和繁体文字,所以这种跨字符集的导入导出数据难度很大.绝对不要轻易尝试这种游戏.目前的主流论坛如Discuz、PHPWind等都提供支持GBK、BIG5和UTF8的不同程序.你在最初安装时,一定先想好自己需要那种字符的程序,一旦选定,以后不是迫不得已,不要更改.以上仅针对 5.鉴于上面特别说明4,如果你是从MySQL 4.0.X/MySQL 3的老数据版本导入到MySQL 4.1/MySQL 5的高数据库版本,导入时请选择GBK编码.如果是UTF8编码的数据,如我的博客(http://www.zhouliang.name)采用WordPress程序,默认使用UTF8编码,则只能在MySQL 4.1/MySQL 5以上的数据库中导入导出,因为低版本的MySQL不支持UTF8. 6.以上说明仅针对本程序而言,在编码转换方面,不排除通过其他手段实现的可能性. 程序使用中出现任何问题(编码转换方面),欢迎与我联络: 我的E-Mail: php@zhouliang.name 本程序讨论主页:http://www.zhouliang.name/archives/198.htm 我的博客:http://www.zhouliang.name 此程序只是针对"乱码"问题做了改进,faisunSQL 4.0其他方面的故有功能效率与本增强版无关,如有问题请联系原作者.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值