线上的项目磁盘消耗问题, 发现和MySQL日志有关系.
需要处理的问题
- 如何限制大小 不让日志无限膨胀?
- 配置日志不留?
- 删除的方式和直接删除会对服务有什么影响?
解决方式
限制大小, 保留最近一段时间日志.
- set global expire_logs_days=7; # 命令行进入MySQL中, 临时设置保留最近7天日志文件.
- expire_logs_days = 7 # 打开 my.cnf 配置文件写入配置, 上面是临时设置的 重启后需要这个文件也要配置下.
- max_binlog_size = 100M # 打开 my.cnf 配置文件写入配置, 配置二进制日志每一文件的大小限制为100M.
当修改配置并重启后, 二进制超出配置的部分会被删除, 如果需要之前的日志文件, 注意先备份出来.
上面配置置参考[资料1]
涉及其它的内容
删除的方式和直接删除会对服务有什么影响?
Tip: 删除之后可能导致数据库崩溃时无法进行恢复,所以若要删除二进制日志首先将其和数据库备份一份.
删除方式1-按文件名. PURGEBINARY LOGS TO 'mysql-bin.000007';
命令行进入mysql中, 将mysql-bin.000007之前的二进制日志文件删除.
删除方式2-按时间删除. PURGEBINARY LOGS BEFORE '13-10-19 10:26:36';
命令行进入mysql中, 将指定时间前二进制日志文件删除.
参考[资料2]
配置日志不留?
mysql> show global variables like "%log%";
sql_log_bin ={ON|OFF} #用于控制会话级别二进制日志功能的开启或关闭。默认为ON,表示启用记录功能。用户可以在会话级别修改此变量的值,但其必须具有SUPER权限。
Tip: 在my.cnf中没有找到sql_log_bin的配置值, 那么应该只是通过命令行设置就行. 还待查询确认.
参考[资料2]
如何知道配置文件的位置?
mysql --help | grep my.cnf
这个是默认mysql配置文件存放路径.
mysqld --verbose --help
#和上面相同 参考[资料3]
whereis my.cnf
通过文件直接查找, 但是有可能找到的配置文件不是当前mysql加载的.
如何自定义my.cnf存放路径?
待查找解决….
启动mysql后,我们查看mysql的进程,看看是否有设置使用指定目录的my.cnf文件,如果有则表示mysql启动时是加载了这个配置文件。
命令: ps aux|grep mysql|grep ‘my.cnf’
参考[资料4]
参考资料
资料1-mysql的binlog日志限制大小和期限设置
资料2-mysql日志详细解析
资料3-mysqld — The MySQL Server
资料4-mysql 查看当前使用的配置文件my.cnf的方法
资料5-怎样知道 mysql 正在使用的 my.cnf 配置文件在哪个位置?