东莞常平医院网站建设,手机网站加百度商桥,网站建设需要什么能力,网络公司在哪里背景
需求#xff1a;
在MySQL 5.7.41中开启general_log 并限制其大小#xff0c;避免快速增长占用硬盘空间。
解决#xff1a;
通过定时任务#xff0c;执行简单的脚本#xff0c;判断general_log 日志的大小#xff0c;实现对通用查询日志的“每日备份”或“每日清…背景
需求
在MySQL 5.7.41中开启general_log 并限制其大小避免快速增长占用硬盘空间。
解决
通过定时任务执行简单的脚本判断general_log 日志的大小实现对通用查询日志的“每日备份”或“每日清理”的功能。
多说几句
等保二级要求必须开启MySQL数据库的通用查询日志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/bashLOG_FILE/mnt/general.log
MAX_SIZE100if [ -f $LOG_FILE ]; thenCURRENT_SIZE$(du -m $LOG_FILE | awk {print $1})if [ $CURRENT_SIZE -gt $MAX_SIZE ]; thenmv $LOG_FILE $LOG_FILE.$(date %Y%m%d%H%M%S)touch $LOG_FILEchmod 0640 $LOG_FILEchown mysql:mysql $LOG_FILEsystemctl restart mysqlfi
fi思路二每日清空日志
参考脚本 clear_general_log.sh
#!/bin/bashLOG_FILE/mnt/general.log
MAX_SIZE100if [ -f $LOG_FILE ]; thenCURRENT_SIZE$(du -m $LOG_FILE | awk {print $1})if [ $CURRENT_SIZE -gt $MAX_SIZE ]; thenecho $LOG_FILEfi
fi快速验证脚本的方法dd创建日志文件
用dd命令快速生成指定大小的文件比如生成101MB大小的/mnt/general.log文件可以执行以下命令
dd if/dev/zero of/mnt/general.log bs1M count101执行之前准备的脚本文件查看结果。
参考截图 实际操作配置corntab定时任务
给脚本配置可执行权限
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上述脚本二选一即可。
结束
注意
备份脚本中没有指定备份目录。备份脚本中涉及了MySQL应用重启。备份脚本的具体内容可根据实际情况修改。