ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 二进制日志常用命令 >[success]MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文>件,其主要作用有两个: >* 数据回复 >* 主从数据库。用于slave端执行增删改,保持与master同步。 ## 1. 开启binary log功能 需要修改mysql的配置文件`my.ini`,添加一句log_bin = mysql_bin即可 ~~~ [mysqld] ...... log_bin = mysql_bin ...... ~~~ 如图: ![](https://box.kancloud.cn/5529637e6c956b45d54551c0acbb2d48_733x226.png) >log_bin是生成的bin-log的文件名,后缀则是6位数字的编码,从000001开始,按照上面的配置,生成的文件则为: mysql_bin.000001 mysql_bin.000002 配置保存以后重启mysql的服务器。 ## 2. 查看bin-log是否开启, ~~~ msyql > show variables like '%bin%' ~~~ 如图: ![](https://box.kancloud.cn/e44e0246071170bd838ad69aa47484e7_668x377.png) ## 3. 查看bin日志文件 ~~~ # 查看当前日志文件 msyql > show master status; # 查看所有日志文件 msyql > show master logs; # 查看所有日志文件 msyql > show binary logs; ~~~ 如图: ![](https://box.kancloud.cn/b967202358a2151dd037b7452aaf0143_654x157.png) ## 4. 启用新的日志文件,一般备份完数据库后执行 ~~~ msyql > flush logs ~~~ ![](https://box.kancloud.cn/030884ac85c8ebcffd4bb292556f1f38_665x153.png) ## 5. 清空现有的所用bin-log ~~~ msyql > reset master ~~~ ![](https://box.kancloud.cn/afe8ea841d30280df188d84af1bb51e5_661x218.png) ## 6. 查看产生的binary log ~~~ msyql > show binlog events in 'mysql_bin.000001' # 为了排序美观,可以使用如下命令 msyql > show binlog events in 'mysql_bin.000001'\G ~~~ ![](https://box.kancloud.cn/a64c9b4b3e2231e9e2cda57956d8b0b0_1196x408.png) ![](https://box.kancloud.cn/03db1312617baaba1368748d2fe6c987_621x456.png) ## 7. 删除bin-log ~~~ ## 删除指定文件之前的日志文件 msyql > purge binary logs to 'mysql_bin.000001'; ~~~ ![](https://box.kancloud.cn/87858b9445799fa496ed3fd3a3a95c62_470x434.png) ## 8. mysqlbinlog 工具的使用 >[danger]该工具可以导出日志文件对应的sql脚本,也可以使用它来直接恢复数据。同时,也可以使用它他查看指定时间段或者位置的日志记录,便于分析日志。 常用命令: ~~~ /usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/var/mysql-bin.000012 --database=[数据库名] --start-datetime='2018-07-20 00:00:01' --stop-datetime='2018-07-24 23:59:59' > sql.sql ~~~ >[danger]该命令也可以不导出到文件,直接查看内容。一般用于筛选分的日志从而找出有用的数据。 ### 扩展-mysqlbinlog 更多用法 #### 1、直接进行恢复 ~~~ mysqlbinlog /usr/local/mysql/data/mysql_bin.000001 | mysql -u root -p ~~~ #### 2、按位置进行恢复 主要参数[–stop-position –start-position] ~~~ mysqlbinlog –stop-position=368312 –start-position=368315 /usr/local/mysql/data/mysql_bin.000001 | mysql -u root -p ~~~ 这里的位置可以通过读取binlog文件进行查看,不过这个也必须自己知道进行了那些操作。后面说如果看到的文件都是乱码或者看不到真正sql的问题 #### 3、按时间点进行恢复 主要参数 [–stop-datetime –start-datetime] ~~~ mysqlbinlog –stop-datetime=”2005-04-20 9:59:59” –start-datetime=”2005-04-20 10:01:00” /usr/local/mysql/data/mysql_bin.000001 | mysql -u root -p ~~~ 时间点恢复跟位置恢复道理一样,也必须知道具体操作的时间和要恢复到什么时间 #### 4、不同的方式进行恢复 1、如果是登录到了mysql并且binlog也是在一台服务器上,一般binlog的目录会在mysql安装目录下data文件下那么就可以直接进行恢复 这种情况可以直接在mysql下执行命令 2、如果是只拿到了binlog文件,并且是线下的服务器需要先尝试数据正确后再导入生产的 这种情况可以先把binlog文件输出到你制定的sql文件如: ~~~ mysqlbinlog /usr/local/mysql/data/mysql_bin.000001 > /tmp/mysql.sql ~~~ 这样的输出有可能是看不到任何有价值的sql如果想看到标准的sql可以使用 ~~~ mysqlbinlog –base64-output=DECODE-ROWS -v /usr/local/mysql/data/mysql_bin.000001 > /tmp/mysql.sql ~~~