在 /etc/my.cnf [mysqld] 區段設定 log-error=/new/path/mysql-error.log 重啟後,錯誤日誌仍寫入舊路徑 /var/log/mysqld.log。
檢查進程啟動參數:
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 在命令列直接傳遞,**優先級高於設定檔**。
查看啟動腳本發現:
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
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。
[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 覆蓋啟動參數,避免修改套件管理的腳本檔造成升級覆蓋遺失。