mysql(2)-bin-log
延续上一篇用户授权,本篇学习一下mysql的二进制日志bin-log日志。
1.开启bin-log
mysql配置文件默认存放在/etc目录下,打开my.cnf配置文件
由截图可以看到mysql的各文件的存放位置
数据存放在/var/lib/mysql目录下
普通日志存放在/var/log/mysqld.log中
当然还有很多的配置,这里暂时不展示,在调优的过程中慢慢的配置
如果需要使用bin-log,需要在配置文件中添加bin-log的配置,添加
log-bin=mysql-bin
重启mysql服务
service mysqld restart
使用查看bin-log日志是否开启
show variables like “%bin%”;
结果显示log-bin配置为on开启。
再次进入到/var/lib/mysql目录下:
目录中生成了一个mysql-bin.000001文件,这个就是mysql的bin-log日志文件。
mysql-bin.000001记录了从开始到截止到当前时间的所有日志,如果想要开启一个从当前时间开始日志文件。
2.刷新bin-log
使用flush logs刷新所有的日志
flush logs
再次进入到/var/lib/mysql目录下,生成了几个mysql-bin文件。
查询最新的日志文件,结果显示最新的bin-log日志为000004,position位置106。
每一次增删改,position位置就会移动到最后一次增删改操作的位置。
show master status;
3.清除bin-log
使用reset master清除bin-log日志,最终最新的日志恢复到刚创建时候的位置。所以在真实操作的过程当中,不要轻易的删除日志。
reset master;
4.查看bin-log
再次flush logs让最新的日志切换到mysql-bin.000002(这里刷新只是为以后演示更清晰,没有实际要求必须切换到哪个日志)。
对表hadoop1_test插入数据,查看日志的变化
由图可以看到position位置移动到322
做一次删除操作,position位置移动到423
mysql提供的有一个服务mysqlbinlog,可以查看到二进制文件。
操作到当前时间,最新的日志文件为mysql-bin.000002文件,因此本次查看该文件
日志清晰的记录了选用了哪个数据库(mysql),数据的插入和数据的删除。
同时记录了操作的position位置,跟上面查询的结果一一对应。
如果此时reset一把,那么所有的东西都回到解放前,position位置移动到106。这里不做演示了。
5.使用bin-log恢复数据
当前的bin-log日志为mysql-bin.000002,重新生成一个日志mysql-bin.000003,记录删除操作(如果不生成000003,那么删除操作也会记录到000002中,即使数据能够恢复,执行到最后还是删除操作,仍然会将数据全部删除,所以这里将最终的删除日志记录到单独的文件中)。
清除所有的数据,此时000002记录了截止到刷新之前的所有操作记录,000003记录了truncate删除操作。
现在使用bin-log日志恢复truncate删除之前的所有数据。
mysqlbinlog mysql-bin.000002 | mysql -uroot mysql
将000002日志文件中的数据恢复到(root用户没有密码)mysql数据库中
结果显示数据已经恢复。