关于MySQL的日志管理(binlog)

一、查看binlog的启用状态


 

最常用的mysql版本是5.7,默认不开启binlog,可以在登录mysql之后,利用以下命令查看当前的binlog启用状态:

mysql > show variables like "%log_bin%";

图中显示“ON”,表示已开启binlog,刚安装完mysql5.7之后,默认是“OFF”

 

二、开启binlog


 

修改my.cnf配置文件:

vim /etc/my.cnf

在mysqld节点中添加以下参数:

#设置唯一id
server-id=1
#开启bin-log,产生的bin-log文件名即为bin-log.*
log-bin=/mnt/logs/mysql/mysql-bin
#指定bin-log为row类别(5.7默认),其他两种是statement、mixed
binlog_format=row
#对指定的数据库开启bin-log,这里是对jw_base数据库开启bin-log服务
binlog-do-db=jw_base
#超过10天的日志文件会被清除
expire_logs_days=10
#默认大于100M时创建新的binlog文件,但出现大事务时可能会超过这个限制
max_binlog_size=100M

上面的参数中,将binlog的保存位置设置为:/mnt/logs/mysql

这个目录要提前创建好,并且对其进行授权:

chown -R mysql.mysql /mnt/logs/mysql

重启mysql服务,使得更改后的配置生效:

#重启服务
systemctl restart mysqld
#停止服务
systemctl stop mysqld
#启动服务
systemctl start mysqld
#查看服务状态
systemctl status mysqld

 

三、查看日志


 

MySQL重启后,不出意外的话,就会在指定的位置生成了第一份binlog日志文件:mysql-bin.000001

可通过以下命令查看该日志的内容:

mysqlbinlog --no-defaults  --base64-output=decode-rows -v  mysql-bin.000001

还可以使用时间范围进行过滤:

mysqlbinlog --no-defaults  --base64-output=decode-rows -v --start-datetime='2021-01-01 00:00:00' --stop-datetime='2021-02-01 00:00:00'  mysql-bin.000001 | more

如果日志内容太多,不便于查阅,还可以将结果导出到文件中:

mysqlbinlog --no-defaults  --base64-output=decode-rows -v --start-datetime='2021-01-01 00:00:00' --stop-datetime='2021-02-01 00:00:00'  mysql-bin.000001 > /tmp/binlog001.sql

 

四、临时关闭binlog


 

 

在开启binlog的情况下,当出现大更新量的操作时,日志文件会快速增长,有时会达到很恐怖的程度

因此在进行某些大量更新之前,可以临时关闭binlog:

mysql > set sql_log_bin=0;

待更新完成后,重新打开binlog:

mysql > set sql_log_bin=1;

 

posted @ 2021-02-01 19:53  网无忌  阅读(721)  评论(0编辑  收藏  举报