今天一來公司,開發人員就對我說mysql無法啟動起來了,一問才知道他對測試伺服器上的服務都執行了重啟,當時心裡那個氣啊,想給他124,你說你要重啟服務也要問問我啊,現在整出問題來了,就知道來找我了.氣歸氣,問題還是要解決.先檢查了下伺服器的磁碟空間,發現沒有滿,再檢查了下mysql配置,也沒有問題,最後看了下mysql日誌,才終於找到問題,如圖
原來是有個表有問題,找到開發問了下,這個表是他才備份的,還不能刪,伺服器上的資料是今天最新的,還沒有備份,真是日個狗了,好吧,那隻能根據日誌裡的提示先修改innodb_force_recovery了.
ps:
innodb_force_recovery影響整個InnoDB儲存引擎的恢複狀況.預設為0,表示當需要恢複時執行所有的恢複操作.當不能進行有效恢複操作時,mysql有可能無法啟動,並記錄下錯誤記錄檔.innodb_force_recovery可以設定為1-6,大的數字包含前面所有數位影響.當設定參數值大於0後,可以對錶進行select,create,drop操作,但insert,update或者delete這類操作是不允許的.
1(SRV_FORCE_IGNORE_CORRUPT):忽略檢查到的corrupt頁.
2(SRV_FORCE_NO_BACKGROUND):阻止主線程的運行,如主線程需要執行full purge操作,會導致crash.
3(SRV_FORCE_NO_TRX_UNDO):不執行交易回復操作.
4(SRV_FORCE_NO_IBUF_MERGE):不執行插入緩衝的合併作業.
5(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日誌,InnoDB儲存引擎會將未提交的事務視為已提交.
6(SRV_FORCE_NO_LOG_REDO):不執行前滾的操作.
操作如下:
在my.cnf中添加了以下兩個參數:
innodb_force_recovery=6
innodb_purge_thread=0
然後重啟mysql
service mysqld restart
重啟好了之後,立即對資料庫做邏輯匯出,然後將innodb_force_recovery設定為0,innodb_purge_thread=1,重建資料庫.這樣mysql的問題就解決了,最後把mysql的定時備份也改成早上備一次和晚上備一次了.
問題二,CentOS上不能啟動MySQL的問題解決辦法
1. /etc/my.cnf的預設配置
設定檔的內容如下:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
由於項目需要需要修改datadir的值,如下
datadir=/usr/local/project/etc/data
在CentOS中啟動MySQL:
[wzhwho@local~]#service mysqld start
Starting mysqld daemon [FAILED]
2. 先看錯誤記錄檔
採用rpm安裝的MySQL記錄檔的預設路徑是/var/log/mysqld.log
mysqld started
InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name /usr/local/project/etc/data/ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.
mysqld ended
從日誌可以知道,mysql的資料檔案目錄沒有許可權,所以我需要按照/var/lib/mysql目錄的許可權給/usr/local/project/etc/data目錄設定許可權和屬主。
[wzhwho@local~]#ll /var/lib
drwxr-x-r-x 1 mysql mysql 4 Apr 11 2009 mysql
[wzhwho@local~]#ll /var/lib
[wzhwho@local~]chown -R mysql:mysql /usr/local/project/etc/data
[wzhwho@local~]chmod -R 755 /usr/local/project/etc/data
[wzhwho@local~]#ll /usr/local/project/etc
drwxr-x-r-x 1 mysql mysql 4 Apr 11 2009 data
接著我又啟動了MySQL,但是還是失敗,日誌資訊還是一樣。
3. 修改設定檔/etc/selinux/config
最後,我在外國友人的郵件來往中查到這樣的回複:
If you are using SE linux, set it to permissive mode by editing /etc/selinux/config
and changing
SELINUX=enforcing to SELINUX=permissive
This solved all of my problems with the
"Operating system error number 13 in a file operation" error
所以,最後確定為selinux的問題,輸入命令ls -Z,你會發現在檔案或檔案夾上面打的標籤。如果一個檔案是在selinux開啟的時候建立的,那麼即使你關閉selinux,它的許可權控制還是會起作用的。可以通過chcon來改變許可權。
4. MySQL成功啟動
[wzhwho@local~]#service mysqld start
Starting mysqld daemon [OK]