需求:
general_log 并限制其大小,避免快速增长占用硬盘空间。解决:
general_log 日志的大小,实现对通用查询日志的“每日备份”或“每日清理”的功能。多说几句:
general_log ,但其文件大小增长速度太快,数据库有效数据都还没增长多少,硬盘空间可能就会被general_log 日志占用不少。而binog 至少还能通过binlog_expire_logs_seconds过期时间参数设置日志保存策略,避免占用空间。没有这样的参数限制general_log,必然要通过其它手段限制general_log空间。提供两种思路:
general_log内容清除。MySQL中开启general日志需要修改my.cnf文件,增加以下两行指定日志存储路径:
[mysqld]
general_log = 1
general_log_file = /mnt/general.log
参考脚本 bak_general_log.sh
#!/bin/bash
LOG_FILE="/mnt/general.log"
MAX_SIZE=100
if [ -f "$LOG_FILE" ]; then
CURRENT_SIZE=$(du -m "$LOG_FILE" | awk '{print $1}')
if [ "$CURRENT_SIZE" -gt "$MAX_SIZE" ]; then
mv "$LOG_FILE" "$LOG_FILE.$(date +%Y%m%d%H%M%S)"
touch "$LOG_FILE"
chmod 0640 "$LOG_FILE"
chown mysql:mysql "$LOG_FILE"
systemctl restart mysql
fi
fi
参考脚本 clear_general_log.sh
#!/bin/bash
LOG_FILE="/mnt/general.log"
MAX_SIZE=100
if [ -f "$LOG_FILE" ]; then
CURRENT_SIZE=$(du -m "$LOG_FILE" | awk '{print $1}')
if [ "$CURRENT_SIZE" -gt "$MAX_SIZE" ]; then
echo > "$LOG_FILE"
fi
fi
/mnt/general.log文件,可以执行以下命令:dd if=/dev/zero of=/mnt/general.log bs=1M count=101

给脚本配置可执行权限:
chmod +x bak_general_log.sh
chmod +x clear_general_log.sh
使用cron等工具将脚本定期执行,例如每天凌晨执行一次:
crontab -e
然后在编辑器中添加以下内容:
0 0 * * * /mnt/bak_general_log.sh
0 0 * * * /mnt/clear_general_log.sh
上述脚本二选一即可。
注意: