Debian MariaDB日志管理操作指南
MariaDB支持多種日志類型,用于監控數據庫運行狀態、排查問題及審計操作。在Debian系統中,日志默認存儲路徑如下:
/var/log/mysql/error.log(部分系統可能為/var/log/mariadb/mariadb.err)。/var/log/mysql/general.log。/var/log/mysql/slow-query.log。/var/log/mysql/mysql-bin.log。MariaDB的日志配置通過修改配置文件實現,Debian系統中配置文件通常位于/etc/mysql/mariadb.conf.d/50-server.cnf(或/etc/my.cnf)。以下是常見日志的配置示例:
log_error參數指定路徑:[mysqld]
log_error = /var/log/mysql/error.log
[mysqld]
general_log = 1
general_log_file = /var/log/mysql/general.log
long_query_time(單位:秒)的SQL語句,用于性能優化:[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2 # 設置慢查詢閾值(秒)
log_queries_not_using_indexes = 1 # 記錄未使用索引的查詢
server_id(唯一標識服務器):[mysqld]
log_bin = /var/log/mysql/mysql-bin.log
server_id = 1 # 必須設置為唯一整數
binlog_format = ROW # 推薦使用ROW格式(記錄行變更)
expire_logs_days = 10 # 自動刪除10天前的二進制日志
max_binlog_size = 100M # 單個二進制日志文件最大大小
修改配置文件后,需重啟MariaDB服務使配置生效:
sudo systemctl restart mariadb
tail命令實時跟蹤最新錯誤信息:sudo tail -f /var/log/mysql/error.log
sudo tail -f /var/log/mysql/general.log
journalctl查看MariaDB服務的系統日志(適用于systemd系統):sudo journalctl -u mariadb -f # 實時跟蹤
sudo journalctl -u mariadb --since "2025-09-01" # 按時間過濾
使用grep命令過濾日志中的關鍵字(如“error”“failed”):
sudo grep 'error' /var/log/mysql/error.log # 查找錯誤日志中的錯誤信息
sudo grep 'failed' /var/log/mysql/general.log # 查找查詢日志中的失敗操作
awk '/Sep 17/ {count++} END {print count}' /var/log/mysql/error.log
sudo less /var/log/mysql/error.log
日志輪轉用于自動分割、壓縮舊日志,避免日志文件過大占用磁盤空間。Debian系統使用logrotate工具,默認配置文件位于/etc/logrotate.d/mysql(或/etc/logrotate.conf)。
/var/log/mysql/*.log {
daily # 每天輪轉一次
missingok # 若日志文件不存在,不報錯
rotate 7 # 保留最近7天的日志
compress # 壓縮舊日志(使用gzip)
notifempty # 若日志為空,不輪轉
create 640 mysql adm # 創建新日志文件,權限為640,屬主為mysql,屬組為adm
sharedscripts # 所有日志輪轉完成后執行腳本
postrotate
if [ -f /var/run/mysqld/mysqld.pid ]; then
kill -USR1 $(cat /var/run/mysqld/mysqld.pid) # 通知MariaDB重新打開日志文件
fi
endscript
}
-v參數驗證配置是否正確:sudo logrotate -vf /etc/logrotate.d/mysql
-f參數:sudo logrotate -f /etc/logrotate.d/mysql
輪轉后,舊日志會被壓縮為.gz格式(如error.log.1.gz),可通過以下命令查看:
zcat /var/log/mysql/error.log.1.gz | grep 'error' # 查看壓縮后的錯誤日志
若需刪除超過30天的日志文件,可使用find命令:
sudo find /var/log/mysql/ -type f -name "*.log" -mtime +30 -exec rm {} \;
二進制日志記錄數據庫變更操作,可用于數據恢復和主從復制。以下是常用操作:
sudo mysqlbinlog /var/log/mysql/mysql-bin.000001
PURGE BINARY LOGS命令刪除指定時間前的日志:PURGE BINARY LOGS BEFORE '2025-09-01 00:00:00';
expire_logs_days參數:SET GLOBAL expire_logs_days = 10;
root或mysql用戶)。