mysql pid文件是什麼用途?

我看有腳本檢測這個文件,如果存在說明mysql啟動,沒有說明mysql關閉。


MySQL pid 文件記錄的是當前 mysqld 進程的 pid,pid 亦即 Process ID。

可以通過如下的例子查看:

$ /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
$ ll /data/mysql/centos.pid
-rw-rw---- 1 mysql mysql 5 Apr 8 09:16 /data/mysql/centos.pid
$ cat /data/mysql/centos.pid
1598
$ ps -ef | grep mysql | grep -v grep
root 1476 1 0 09:16 pts/0 00:00:00 /bin/sh
/usr/local/mysql/bin/mysqld_safe
--datadir=/data/mysql
--pid-file=/data/mysql/centos.pid
mysql 1598 1476 0 09:16 pts/0 00:00:00 /usr/local/mysql/bin/mysqld
--basedir=/usr/local/mysql
--datadir=/data/mysql --user=mysql
--log-error=/data/mysql/centos.err
--pid-file=/data/mysql/centos.pid
--socket=/tmp/mysql.sock
--port=3306

未指定 pid 文件時,pid 文件默認名為 主機名.pid,存放的路徑在默認 MySQL 的數據目錄。通過 mysqld_safe 啟動 MySQL 時,mysqld_safe 會檢查 pid 文件,如果 pid 文件不存在,不做處理;如果文件存在,且 pid 已佔用則報錯 "A mysqld process already exists",如果文件存在,但 pid 未佔用,則刪除 pid 文件。

查看 MySQL 的源碼可以知道,mysqld 啟動後會通過 create_pid_file 函數新建 pid 文件,通過 getpid() 獲取當前進程 pid 並將 pid 寫入 pid 文件。

因此,通過 mysqld_safe 啟動時, MySQL pid 文件的作用是:在數據文件是同一份,但埠不同的情況下,防止同一個資料庫被啟動多次。


mysql啟動不了了 ,總是提示Starting MySQL.. ERROR! The server quit without updating PID file (/alidata/server/mysql/data/iZ25azsm7qnZ.pid).


推薦閱讀:

Mysql佔用CPU過高如何優化?
為什麼 PostgreSQL 沒有 MySQL 流行呢?
mysql如何實現四大隔離級別的?
MySQL中inner join 和 cross join 的區別?
mysql如何解決評論遞歸查詢?

TAG:MySQL | 資料庫管理員DBA |