環境:阿里雲ECS服務器上,Ubuntu linux 12.04,64位版。MySQL 5.1.
首先查看/etc/rc.local,可以看到Ubuntu通過/etc/init.d/mysqld腳本啟動mysql服務:
/etc/mysqld start
這個腳本是安裝時從/alidata/server/mysql/目錄(mysql安裝目錄)拷貝過來的,沒問題。
但是在執行這個腳本時,會調用/alidata/server/mysql/bin/my_print_defaults,
將輸出內容交給腳本函數parse_serverarguments()解析,
得到$basedir, $bindir, $datadir這幾個啟動目錄。
問題就出在執行my_print_defaults上。
通過執行/alidata/server/mysql/bin/my_print_defaults --help,可以看到它從以下幾個目錄讀mysql配置:
- /etc/my.cnf
- /etc/mysql/my.cnf
- /alidata/server/mysql/etc/my.cnf
- ~/.my.cnf
后面兩個路徑不存在,所以只會讀取前兩個文件的內容。
/etc/my.cnf是安裝時從/alidata目錄拷過來的,沒有問題。
/etc/mysql/my.cnf卻是ubuntu缺省存在的,一讀,就把前面的覆蓋了。
所以刪除/etc/mysql目錄,執行/etc/init.d/mysqld restart,就OK了。
[后記]
晚上時候,同事報MySQL又啟動不了。錯誤日志:
/alidata/server/mysql/libexec/mysqld: File '/var/log/mysql/mysql-bin.index' not found (Errcode: 13)
網上搜到文章說”Errorcode:13“是目錄權限問題而這個文件是存在的!mysql用戶也有讀寫權限。
嘗試給/var/log/mysql目錄權限從0755改成0775,給mysql用戶組也加了寫權限,現在的權限是:
drwxrwxr-x 2 mysql mysql 4096 Oct 16 23:00 mysql/
繼續啟動MySQL,失敗,但錯誤日志已經從剛才的變成了這個(說明mysql組也需要寫權限,難道啟動mysql需要其他mysql組用戶?):
/alidata/server/mysql/libexec/mysqld: File './mysql-bin.000032' not found (Errcode: 2)
繼續搜,在這里找到了方法,編輯/var/log/mysql/mysql-bin.index,刪除其中的一行內容:
mysql-bin.000032
再次啟動MySQL,成功。