技术&日志

mysql配置-日志大小限制和自动删除

线上的项目磁盘消耗问题, 发现和MySQL日志有关系.

需要处理的问题

  • 如何限制大小 不让日志无限膨胀?
  • 配置日志不留?
  • 删除的方式和直接删除会对服务有什么影响?

解决方式

限制大小, 保留最近一段时间日志.

  1. set global expire_logs_days=7; # 命令行进入MySQL中, 临时设置保留最近7天日志文件.
  2. expire_logs_days = 7 # 打开 my.cnf 配置文件写入配置, 上面是临时设置的 重启后需要这个文件也要配置下.
  3. 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 配置文件在哪个位置?

发表评论