今天给大家分享一个Windows下,MySql使用binlog恢复表和数据的方法(自己也是了解一下bin-log的作用,大体思路是参考别人的文章,只是将一些细节完善一下,帮助大家自己做实验更容易一些)
binlog主要两大作用
1、高可用
2、数据恢复。
首先要开启binlog日志的功能:
进到这个目录,"D:\MySQL\MySQL Server 5.5\my.ini"
在my.ini的[mysqld]下面添加一行 log-bin = mysql-bin ,然后重启mysql服务,就可以了。如下图:
[mysqld]
# log-bin
log-bin = mysql-bin
日志保存在路径:
一、新建一张测试表test
CREATE TABLE if not exists test (
id int UNSIGNED NOT NULL AUTO_INCREMENT ,
username VARCHAR(3) NOT NULL DEFAULT "老王" ,
PRIMARY KEY (`id`)
)
二、然后插入2条数据 ,查询看看
insert into test values(1,'老李');
insert into test values(2,'老孙');
三、然后我们把数据备份到d盘
打开windows的cmd窗口 进入到mysql的bin目录: cd D:\MySQL\MySQL Server 5.5\bin
然后执行只备份test这张表的命令:mysqldump --opt --host=127.0.0.1 --protocol=tcp --port=3306 --default-character-set=utf8 --single-transaction=TRUE -u root --password=root test test > "D:\test.sql"
四、这时模拟误操作(插入2条数据,然后删除数据库)
先插入
insert into test values(3,'老张');
insert into test values(4,'老谭');
再删除
truncate test;
drop table test;
五、这时,我们先用刚刚备份的test.sql文件来恢复下数据(肯定只能恢复前两条数据,因为我们是在后两条数据插入之前备份的)
1.用mysql -u root -p root先登录mysql
2.然后执行导入test.sql的命令:
source d://test.sql (注:如果有多个数据库,则使用”use 数据库名”选择数据库,再执行前面的语句)
3. 然后在查询下test表看下数据恢复过来没有
正常 数据恢复了,然后我们最后插入的那个老张,老谭没恢复成功。怎么办?只能用binlog了。
六、剩余的两条数据没有恢复过来,我们使用mysql的binlog日志来恢复
1.使用sql语句:show binlog events in 'mysql-bin.000001'; -- 查看binlog内容记录下开始位置和结束位置
2.然后进入到mysql的:C:\ProgramData\MySQL\MySQL Server 5.5\Data
cd C:\ProgramData\MySQL\MySQL Server 5.5\Data
3.用binlog命令利用刚才查询到的开始位置和结束位置备份到d盘
mysqlbinlog --start-position=750 --stop-position=1046 mysql-bin.000001 > d:\\test1.sql
4.然后登录到mysql 命令:mysql -uroot -proot
5.然后执行:source d://test1.sql (记住要先选择数据库!这里是用我们binlog备份的test1.sql去恢复数据的)
最后在查询下test表,发现数据已经恢复了
结束!