1.2.4 删除
对于比较繁忙的业务系统,每天生成的binlog数据巨大,如果长时间不清除,将会占用大量磁盘空间。可以通过以下几种方式清理日志:
指令 | 含义 |
---|---|
reset master |
删除全部 binlog 日志,删除之后,日志编号,将从 binlog.000001重新开始 |
purge master logs to 'binlog.*****' |
删除 ***** 编号之前的所有日志 |
purge master logs before 'yyyy-mm-dd hh24:mi:ss' |
删除日志为 “yyyy-mm-dd hh24:mi:ss” 时间点之前产生的所有日志 |
也可以在mysql的配置文件中配置二进制日志的过期时间,设置了之后,二进制日志过期会自动删除。
mysql -uroot -p1234
#查看系统变量,在mysql命令行中执行
#单位是秒,默认过期时间为30天,到期之后会自动删除
show variables like '%binlog\_expire\_logs\_seconds%';
测试:
客户端1:
mysql -uroot -p1234
#删除000002之前的日志文件,不包含000002
purge master logs to 'binlog.000002';
客户端2:
cd /var/lib/mysql
#可以看到二进制日志文件和索引文件
ll
1.3 查询日志
查询日志中记录了客户端的所有操作语句,而二进制日志不包含查询数据的SQL语句。默认情况下, 查询日志是未开启的。
mysql -uroot -p1234
#检查参数查看开关是否开启
#可以看到默认是关闭的以及日志文件所处位置和文件名
show variables like '%general%';
如果需要开启查询日志,可以修改MySQL的配置文件 /etc/my.cnf 文件,添加如下内容:
vim /etc/my.cnf
#该选项用来开启查询日志 , 可选值 : 0 或者 1 ; 0 代表关闭, 1 代表开启
general_log=1
#设置日志的文件名 , 如果没有指定, 默认的文件名为 host\_name.log
general_log_file=mysql_query.log
#重启mysql服务
systemctl restart mysqld.service
#查看这个目录下是否会生成此日志文件
cd /var/lib/mysql/
ll
开启了查询日志之后,在MySQL的数据存放目录,也就是 /var/lib/mysql/ 目录下就会出现mysql_query.log 文件。之后所有的客户端的增删改查操作都会记录在该日志文件之中,长时间运行后,该日志文件将会非常大。所以用不上此日志文件,我们可以把它关上。
测试:
客户端1:
mysql -uroot -p1234
use db01;
#执行查询操作(前提是已经登录)
select \* from stu;
#执行更新操作
update stu set age=100 where id=7;
客户端2:
cd /var/lib/mysql/
#前提是已经进入到了这个目录,并且目录下有这个文件(上面已经配置过了)
#实时刷新此日志文件尾部的内容(tail查看文件尾部,-f表示实时刷新)
tail -f mysql_query.log
可以看到所有的DDL和DML操作都会在日志表当中记录。