说下MySQL的slow log配置以及遇到的问题

9
0
0
2025-02-09 16:29

因为网站打开很慢,所以我就开启mysql的slow log,编辑/etc/my.cnf,加入几行并重启mysql:

#slow_query_log=1 #开启
#slow_query_log_file=/var/log/mysql/slow.log #log记录位置
#long_query_time=1 #多久算慢查询
#log_queries_not_using_indexes=1 #记录没有索引的查询

打开这个slow log后,结果发现mysql占用的内存上升20%左右,并且binlog会变得很大,几个小时就10个G,总共才40G,一晚上能给你干满,实在好夸张,如图:

然后只能关闭slow log,并清理掉现有的binlog,先登录mysq,执行:

SHOW BINARY LOGS;

按个执行purge命令

PURGE BINARY LOGS TO 'binlog.000001'
PURGE BINARY LOGS TO 'binlog.000002'
...

执行完,binlog清理完成。

为了节省磁盘空间,你也可以关闭binlog:

先连上到数据库,输入命令看下binlog的状态:

SHOW VARIABLES LIKE 'log_bin';

发现是开启状态,在/etc/my.cnf里加入

[mysqld]
disable-log-bin

重启mysql,systemctl restart mysqld,重新查询:

发现mysql binlog已关闭,然后我们手动删除现有的 binlog 文件以释放磁盘空间:

1. 删除 binlog 索引文件内容:打开 mysql-bin.index 文件,删除其中的所有内容。

2. 删除 binlog 文件:删除所有以 mysql-bin.00000xx 命名的文件。

注意:不要手动删除正在使用的 binlog 文件,以避免 binlog 索引文件与实际存在的 binlog 文件不匹配。

当然不想关闭的话,也可以设定binlog的过期时间,执行sql:

SHOW VARIABLES LIKE '%expire%';

binlog_expire_logs_seconds默认时间是30天,你可以改短点:

SET GLOBAL binlog_expire_logs_seconds = 604800; #一直生效直到mysql重启

或者加入/etc/my.cnf 配置中

最后执行:

FLUSH LOGS;

基本就设置完成。

博主信息
博客数
181
昵称
性别
年龄
40
居住城市
上海市