萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> 解決Centos系統中mysql無法啟動問題

解決Centos系統中mysql無法啟動問題

mysql無法啟動問題我們可以用千萬種原因導致了,所以不同的原因可能解決 辦法也是不一樣了,下面來看一篇解決Centos系統中mysql無法啟動問題的方法,具體如下所示。

今天一來公司,開發人員就對我說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]

copyright © 萬盛學電腦網 all rights reserved