因为网站打开很慢,所以我就开启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;
基本就设置完成。