MySQL5.7限制general_log日志大小的實現
背景
需求:
- 在MySQL 5.7.41中開啟
general_log
并限制其大小,避免快速增長占用硬盤空間。
解決:
- 通過定時任務,執(zhí)行簡單的腳本,判斷
general_log
日志的大小,實現對通用查詢日志的“每日備份”或“每日清理”的功能。
多說幾句:
- 等保二級要求必須開啟MySQL數據庫的通用查詢日志
general_log
,但其文件大小增長速度太快,數據庫有效數據都還沒增長多少,硬盤空間可能就會被general_log
日志占用不少。而binog
至少還能通過binlog_expire_logs_seconds
過期時間參數設置日志保存策略,避免占用空間。沒有這樣的參數限制general_log
,必然要通過其它手段限制general_log
空間。
實際操作:備份腳本和清理腳本
提供兩種思路:
- 思路一:每日檢查日志大小,當其超過某個閾值時,將文件復制歸檔到某個專門存儲日志的目錄。
- 思路二:每日檢查日志大小,當超過某個閾值時,不執(zhí)行歸檔備份,直接將
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
快速驗證腳本的方法:dd創(chuàng)建日志文件
- 用dd命令快速生成指定大小的文件,比如生成101MB大小的
/mnt/general.log
文件,可以執(zhí)行以下命令:
dd if=/dev/zero of=/mnt/general.log bs=1M count=101
- 執(zhí)行之前準備的腳本文件,查看結果。
參考截圖
實際操作:配置corntab定時任務
給腳本配置可執(zhí)行權限:
chmod +x bak_general_log.sh chmod +x clear_general_log.sh
使用cron等工具將腳本定期執(zhí)行,例如每天凌晨執(zhí)行一次:
crontab -e
然后在編輯器中添加以下內容:
0 0 * * * /mnt/bak_general_log.sh 0 0 * * * /mnt/clear_general_log.sh
上述腳本二選一即可。
結束
注意:
- 備份腳本中沒有指定備份目錄。
- 備份腳本中涉及了MySQL應用重啟。
- 備份腳本的具體內容可根據實際情況修改。
到此這篇關于MySQL5.7限制general_log日志大小的文章就介紹到這了,更多相關MySQL5.7限制general_log日志內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MySQL9.0的兩種部署模式及各個版本發(fā)布的新功能
本文主要介紹了MySQL9.0的兩種部署模式及各個版本發(fā)布的新功能,文中通過圖文示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-08-08MySQL 配置文件 my.cnf / my.ini 區(qū)別解析
充分理解 MySQL 配置文件中各個變量的意義對我們有針對性的優(yōu)化 MySQL 數據庫性能有非常大的意義,這篇文章主要介紹了MySQL 配置文件 my.cnf / my.ini 區(qū)別,需要的朋友可以參考下2022-11-11關于TIMESTAMP with implicit DEFAULT value&
本文介紹了“TIMESTAMP with implicit DEFAULT value is deprecated”錯誤的原因及解決方法,解決方法包括顯式指定默認值、修改字段類型、更新數據庫版本或尋求幫助,感興趣的朋友一起看看吧2025-02-02