Mysql数据恢复
上一篇讲了Mysql当前支持的备份方式,那么,有了备份文件,怎么将数据库进行恢复?
1.对当前的整个mysql实例进行备份,不备份的话,一切后果请自行负责哦
2.进入mysql,删除mysql,test2,world三个数据库
删库跑路喽,[坏笑]
3.不用怕,此时使用备份的all-database.sql进行恢复
发现删掉的数据库又回来了
扩展:
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数据恢复的九把瑞士军刀