延续上一篇用户授权,本篇学习一下mysql的二进制日志bin-log日志。

1.开启bin-log

mysql配置文件默认存放在/etc目录下,打开my.cnf配置文件

bin文件能删除吗 mysql mysql bin文件在哪里_数据

由截图可以看到mysql的各文件的存放位置
数据存放在/var/lib/mysql目录下
普通日志存放在/var/log/mysqld.log中
当然还有很多的配置,这里暂时不展示,在调优的过程中慢慢的配置

bin文件能删除吗 mysql mysql bin文件在哪里_log日志_02

如果需要使用bin-log,需要在配置文件中添加bin-log的配置,添加
log-bin=mysql-bin

bin文件能删除吗 mysql mysql bin文件在哪里_数据_03

重启mysql服务

service mysqld restart

使用查看bin-log日志是否开启

show variables like “%bin%”;

结果显示log-bin配置为on开启。

bin文件能删除吗 mysql mysql bin文件在哪里_数据_04

再次进入到/var/lib/mysql目录下:
目录中生成了一个mysql-bin.000001文件,这个就是mysql的bin-log日志文件。

bin文件能删除吗 mysql mysql bin文件在哪里_mysql_05

mysql-bin.000001记录了从开始到截止到当前时间的所有日志,如果想要开启一个从当前时间开始日志文件。

2.刷新bin-log

使用flush logs刷新所有的日志

flush logs

bin文件能删除吗 mysql mysql bin文件在哪里_bin文件能删除吗 mysql_06

再次进入到/var/lib/mysql目录下,生成了几个mysql-bin文件。

bin文件能删除吗 mysql mysql bin文件在哪里_mysql_07

查询最新的日志文件,结果显示最新的bin-log日志为000004,position位置106。
每一次增删改,position位置就会移动到最后一次增删改操作的位置。

show master status;

bin文件能删除吗 mysql mysql bin文件在哪里_bin文件能删除吗 mysql_08

3.清除bin-log

使用reset master清除bin-log日志,最终最新的日志恢复到刚创建时候的位置。所以在真实操作的过程当中,不要轻易的删除日志。

reset master;

bin文件能删除吗 mysql mysql bin文件在哪里_bin文件能删除吗 mysql_09

bin文件能删除吗 mysql mysql bin文件在哪里_数据_10

4.查看bin-log

再次flush logs让最新的日志切换到mysql-bin.000002(这里刷新只是为以后演示更清晰,没有实际要求必须切换到哪个日志)。
对表hadoop1_test插入数据,查看日志的变化

bin文件能删除吗 mysql mysql bin文件在哪里_log日志_11

由图可以看到position位置移动到322
做一次删除操作,position位置移动到423

bin文件能删除吗 mysql mysql bin文件在哪里_log日志_12

mysql提供的有一个服务mysqlbinlog,可以查看到二进制文件。
操作到当前时间,最新的日志文件为mysql-bin.000002文件,因此本次查看该文件

bin文件能删除吗 mysql mysql bin文件在哪里_数据_13

日志清晰的记录了选用了哪个数据库(mysql),数据的插入和数据的删除。
同时记录了操作的position位置,跟上面查询的结果一一对应。

bin文件能删除吗 mysql mysql bin文件在哪里_数据_14

如果此时reset一把,那么所有的东西都回到解放前,position位置移动到106。这里不做演示了。

5.使用bin-log恢复数据

当前的bin-log日志为mysql-bin.000002,重新生成一个日志mysql-bin.000003,记录删除操作(如果不生成000003,那么删除操作也会记录到000002中,即使数据能够恢复,执行到最后还是删除操作,仍然会将数据全部删除,所以这里将最终的删除日志记录到单独的文件中)。

bin文件能删除吗 mysql mysql bin文件在哪里_数据_15

清除所有的数据,此时000002记录了截止到刷新之前的所有操作记录,000003记录了truncate删除操作。

bin文件能删除吗 mysql mysql bin文件在哪里_bin文件能删除吗 mysql_16

现在使用bin-log日志恢复truncate删除之前的所有数据。

mysqlbinlog mysql-bin.000002 | mysql -uroot mysql

将000002日志文件中的数据恢复到(root用户没有密码)mysql数据库中

bin文件能删除吗 mysql mysql bin文件在哪里_log日志_17

结果显示数据已经恢复。