首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 錯誤日誌路徑修改實戰:從 my.cnf 到啟動腳本的完整排查

     編輯:MySQL 資料庫相關知識

現象:修改 my.cnf 不生效

在 /etc/my.cnf [mysqld] 區段設定 log-error=/new/path/mysql-error.log 重啟後,錯誤日誌仍寫入舊路徑 /var/log/mysqld.log。

根因分析:systemd 啟動參數覆蓋設定檔

檢查進程啟動參數:

ps aux | grep mysqld
# 輸出顯示:
/usr/bin/mysqld_safe --log-error=/var/log/mysqld.log ...
/usr/libexec/mysqld --log-error=/var/log/mysqld.log ...

參數 --log-error 在命令列直接傳遞,**優先級高於設定檔**。

來源追蹤:/etc/init.d/mysqld 腳本

查看啟動腳本發現:

get_mysql_option mysqld_safe log-error "/var/log/mysqld.log"
errlogfile="$result"
# 後續直接帶入 mysqld_safe 命令列

腳本讀取 my.cnf 但預設值寫死在腳本變數初始化,若設定檔無對應項則用預設值覆蓋。

解決方案(三選一)

方案一:修改啟動腳本(最徹底)

vim /etc/init.d/mysqld
# 找到 get_mysql_option mysqld_safe log-error ... 行
# 修改預設路徑或註解讓純讀 my.cnf

方案二:建立 systemd 覆蓋檔(現代 Linux 推薦)

systemctl edit mysqld
# 在 [Service] 區段加入:
Environment="MYSQLD_OPTS=--log-error=/new/path/mysql-error.log"
# 或直接覆蓋 ExecStart
ExecStart=/usr/bin/mysqld_safe --log-error=/new/path/mysql-error.log $MYSQLD_OPTS

執行 systemctl daemon-reload && systemctl restart mysqld。

方案三:確保 my.cnf 區段正確且無語法錯誤

[mysqld]
log-error=/new/path/mysql-error.log
# 注意:區段名必須是 [mysqld] 而非 [mysql] 或 [mysqld_safe]

並確認目錄權限:chown mysql:mysql /new/path。

驗證

mysql> SHOW VARIABLES LIKE 'log_error';
+---------------+------------------------------+
| Variable_name | Value                        |
+---------------+------------------------------+
| log_error     | /new/path/mysql-error.log    |
+---------------+------------------------------+

總結

MySQL 錯誤日誌路徑由啟動命令列參數決定,systemd/啟動腳本常硬編碼預設值覆蓋 my.cnf。現代系統請優先使用 systemctl edit 覆蓋啟動參數,避免修改套件管理的腳本檔造成升級覆蓋遺失。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved