问题:在使用mysql大量写入数据时,突然发现无法在继续写入了。登录上机器通过df -lh看到服务器磁盘使用100%.
连接上mysql, 统计一下每个数据库占用的数据大小。发现占用的数据也不过十来G.
select round(sum(DATA_LENGTH/1024/1024),2) as d_size, table_schema
from TABLES
group by table_schema
但是到mysql数据目录一统计,实际占用的差不多400G磁盘空间, 最显眼的是一大堆 mysql-bin.\d+文件,每个都超过1G,这些文件到底是什么鬼? 随之搜一下,原来是mysql binlog日志在搞怪。
这下就明白了,mysql默认将所有更新操作记录放入了binlog中,所以在大量写入数据后会产生大量的日志占满磁盘。
解决办法:
1、关闭binlog日志(测试环境,线上不要这么干,否则如果遇到故障,日志也丢了就很难恢复数据了)
配置my.cnf 修改注释掉log-bin、binlog_format配置项即可,然后重启mysqld服务.
# binary logging - not required for slaves, but recommended
#log-bin=mysql-bin
#
# binary logging format - mixed recommended
#binlog_format=mixed
2、手动清理
连上mysql,然后执行
reset master;
其他关于binlog操作:
- 可以设置自动清理:
#自动删除binlog
#通过binlog参数(expire_logs_days )来实现mysql自动删除binlog
mysql> show binary logs;
mysql> show variables like 'expire_logs_days';
mysql> set global expire_logs_days=3;
- 查看binlog内容 :
tail -f mysql-bin.000001 | mysqlbinlog -
mysqlbinlog mysql-bin.000001 | more
参考: