mysql> show variables like 'pid_file'\g;
*************************** 1. row ***************************
variable_name: pid_file
value: /usr/local/mysql/data/xen-server.pid
1 row in set (0.00 sec)
下面了解:
絕大多數的mysql在啟動的時候都要加載一個配置檔案,相信大多數的開發都碰到過類似問題,機器啟動時mysql預設都會啟動,預設使用mysql指令可以連上服務端,但是資料存儲在什麼地方,參數設定的是多少等等,這個就需要知道mysql使用的是哪個配置檔案,那麼mysql啟動是按照什麼順序來加載配置檔案的呢?
不同版本的機器加載的順序也不一樣,下面的列子是以5.1.10為例。
檔案名
作用
<code>/etc/my.cnf</code>
global options
<code>/etc/mysql/my.cnf</code>
global options (as of mysql 5.1.15)
<code><code>sysconfdir</code>/my.cnf</code>
<code>$mysql_home/my.cnf</code>
server-specific options
<code>defaults-extra-file</code>
the file specified with<code>--defaults-extra-file=<code>path </code></code>
<code>~/my.cnf</code>
user-specific options
在沒有添加任何啟動指令的時候,mysql會預設的依次從上到下檢查配置檔案是否存在,使用第一個發現的檔案作為啟動檔案。
是以在啟動mysqld的時候,一定要确定好上述的路徑下是否有對應的配置檔案,避免加載了錯誤的檔案,導緻一些奇怪的問題。
當然,如果不想使用預設加載順序中的配置檔案,可以在啟動指令上增加 --defaults-file='path/to/my.cnf'來指定要使用的配置檔案
通常可以用下面的指令找到答案
1
2
<code>server ~ # ps ax | grep</code><code>'[m]ysqld'</code>
<code>10801</code> <code>? ssl </code><code>0</code><code>:</code><code>27</code> <code>/usr/sbin/mysqld --defaults-file=/etc/mysql/my.cnf --basedir=/usr --datadir=/</code><code>var</code><code>/lib/mysql --pid-file=/</code><code>var</code><code>/run/mysqld/mysqld.pid --socket=/</code><code>var</code><code>/run/mysqld/mysqld.sock</code>
更進階一些,根據程序的檔案資訊來檢視
3
<code>server ~ # cat /proc/$(pidof mysqld)/cmdline | tr</code><code>'\0'</code> <code>'\n'</code>
<code>/usr/sbin/mysqld</code>
<code>--defaults-file=/etc/mysql/my.cnf</code>
使用mysqld自帶的 --verbose功能
<code>server ~ # /usr/sbin/mysqld --help --verbose --skip-networking --pid-file=$(tempfile)</code>
<code>2</code><code>> /dev/</code><code>null</code> <code>| grep -a1</code><code>'default options are read'</code>
<code>default options are read from the following files</code><code>in</code> <code>the given order:</code>
<code>/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf</code>