接手一台MySQL 5.6.40-log MySQL Community Server數據庫服務器 ,關閉MySQL服務時遇到下面錯誤,MySQL的錯誤日志中沒有出現這個信息,另外,重啟MySQL服務時沒有問題。只是在關閉MySQL服務時遇到這個錯誤信息,看着挺別扭的。當然這個是在非root用戶下啟動/關閉,如果在root用戶下啟動/關閉則沒有這個錯誤信息:
$ service mysqld stop
Shutting down MySQL.... SUCCESS!
rm: cannot remove '/var/lock/subsys/mysql': Permission denied
$ service mysqld start
Starting MySQL. SUCCESS!
找到MySQL服務的配置文件 /etc/rc.d/init.d/mysqld,分析定位到stop部分代碼,如下所示:
# Lock directory for RedHat / SuSE.
lockdir='/var/lock/subsys'
lock_file_path="$lockdir/mysql"
..................................
'stop')
# Stop daemon. We use a signal here to avoid having to know the
# root password.
if test -s "$mysqld_pid_file_path"
then
mysqld_pid=`cat "$mysqld_pid_file_path"`
if (kill -0 $mysqld_pid 2>/dev/null)
then
echo $echo_n "Shutting down MySQL"
kill $mysqld_pid
# mysqld should remove the pid file when it exits, so wait for it.
wait_for_pid removed "$mysqld_pid" "$mysqld_pid_file_path"; return_value=$?
else
log_failure_msg "MySQL server process #$mysqld_pid is not running!"
rm "$mysqld_pid_file_path"
fi
# Delete lock for RedHat / SuSE
if test -f "$lock_file_path"
then
rm -f "$lock_file_path"
fi
exit $return_value
else
log_failure_msg "MySQL server PID file could not be found!"
fi
;;
檢查驗證發現當前用戶(非root用戶),沒有刪除/var/lock/subsys/mysql文件的權限。
$ ls -lrt /var/lock
lrwxrwxrwx. 1 root root 11 Jun 5 2020 /var/lock -> ../run/lock
$ ls -lrt /var/lock/subsys/
total 0
-rw-r--r-- 1 root root 0 Oct 15 2020 network
-rw-r--r-- 1 root root 0 Oct 15 2020 local
-rw-r--r-- 1 root root 0 Oct 15 2020 mysql
$ rm /var/lock/subsys/mysql
rm: cannot remove ‘/var/lock/subsys/mysql’: Permission denied
解決辦法,修改/etc/rc.d/init.d/mysqld中lockdir變量的值,指定到用戶mysql有權限的目錄。問題解決。另外一種解決方式是通過授予用戶訪問文件的權限。但是感覺沒有第一種方式好。因為一些原因,現在DBA使用JumpServer登錄系統時,只允許非root賬號訪問。
lockdir='/data/mysqldata'
