Mysql数据恢复

上一篇讲了Mysql当前支持的备份方式,那么,有了备份文件,怎么将数据库进行恢复?

1.对当前的整个mysql实例进行备份,不备份的话,一切后果请自行负责哦

2.进入mysql,删除mysql,test2,world三个数据库

删库跑路喽,[坏笑]

3.不用怕,此时使用备份的all-database.sql进行恢复

发现删掉的数据库又回来了

扩展:

37977d80db7b0ffef77f0262880cb801.jpg

1.你也可以对某个数据库或者表进行类似操作,但是,在对库进行恢复操作时,需要先手动创建库,否则系统会报错。此处不再进行演示,请参考以下命令:

mysql -uroot -p 数据库名< C:/Users/backup/数据库名.sql

2.此外,你还可以使用Mysql自带命令进行数据恢复

语法结构(需要进入mysql):

source path/file_name.sql

3.mysqldump本身也支持导出文本文件的备份,使用mysqlimport进行导入文本备份文件,此处不再进行演示

请按照图示步骤理解

目前热点数据恢复支持的文件格式为.text,.csv,.xlsx,.xls。其他的暂不支持,切记你要导入的表一定预先存在数据库中的,其效率很高,要比insert语句快20倍以上

1,开启binlog,修改配置文件参数

log-bin=C:/Users/backup/mysql-bin #日志文件存放路径

max_binlog_size=100M 单个文件大小

binlog-format=row 日志生成格式

2.小编本机有个test库及一张user表,已知有4条数据

3.使用mysqldump对test进行全量备份

mysqldump -uroot -p test > c:/Users/backup/user.sql

生成的对应的sql文件:

4.此时插入两条新数据

生成新的binlog

truncate user表,用以模仿突发问题(数据库崩溃,或者误删等),user中数据没了

5.由于预先对test进行了全量备份,所以此时需要恢复user表中的数据

mysql -uroot -p test < c:/Users/backup/user.sql

再次查询,发现user表中恢复了部分数据,但刚刚插入的2条却找不到

6.使用binlog恢复5.6条数据

由于我之前flush一次log(非演示中),所以,我的最新一次的log应为:mysql-bin.000002

此时,我们只要使用这个文件进行恢复数据就OK了

此时查看user表中数据

数据恢复成功

7.同时mysqlbinlog支持对postion的恢复

例如,我再恢复一次第六条的数据,首先我得知道第6条数据在mysql-bin.000002的起始位置和结束位置.

1>你可以使用如下命令查看mysql-bin.000002的内容

查看binlog内容

最后一条插入的起始1736和结束位置1830

2>你也可以将binlog导出为.txt文件进行查看

查看.txt文件

起始位置1736,结束位置1830

3>利用binlog postion恢复第6条数据

利用position恢复数据

4>查看user表数据

由于之前就已经恢复了5.6条,再次执行,即插入一条新数据

扩展:

1.show master status; 可以产看当前binlog文件和字节码索引的位置

2.show binary logs; 查看所有binlog文件

3.show binlog events 查看mysql-bin.000001所有事件,也可以找到时间postion的起始和结束位置索引

4.show binlog events in 'mysql-bin.000002'; 查看mysql-bin.000002所有事件,也可以找到时间postion的起始和结束位置索引


下一篇:MySQL数据恢复的九把瑞士军刀