1. 程式人生 > >MYSQL服務無法啟動的處理辦法

MYSQL服務無法啟動的處理辦法

問題:

啟動mysql,報錯誤:無法啟動mysql服務,錯誤1067。

在日誌中可以檢視到類似以下的錯誤:

Plugin 'FEDERATED' is disabled.

Can't open the mysql.plugin table. Please run mysql_upgrade to create it.

Fatal error: mysql.user table is damaged or in unsupported 3.20 format.

解決方法:

1.如果資料不重要或已經有備份,只需要恢復mysql啟動 進入mysql目錄,一般是:/usr/local/var/mysql/  刪除ib_logfile*  刪除ibdata*  刪除所有資料庫物理目錄(例如資料庫為test_db,則執行rm -rf test_db)  重啟動mysql  重新建立資料庫或使用備份覆蓋 

2.如果資料很重要且沒有備份

可以使用innodb_force_recovery引數,使mysqld跳過恢復步驟,啟動mysqld,將資料匯出然後重建資料庫。

(1)、首先設定my.cnf中的引數,windows作業系統是my.ini檔案,有時這個檔案會在windows資料夾中也有一份,我是同時修改的。具體的修改內容為:

innodb_force_recovery = 6  innodb_purge_thread = 0

(2)、在終端使用命令帶引數啟動:

               我在windows上使用的命令是:mysqld --defaults-file=../my.ini --user=mysql --skip-grant-tables

              看到mysqld程序後,證明重啟mysql成功

這時只可以執行select,create,drop操作,但不能執行insert,update,delete操作 ,這時可以在終端或者用Navicat等對資料庫中的重要資訊進行備份匯出。  

(3)、執行匯出後,可以使用mysqlcheck進行檢查和修復,如果能修復成功,就不用重灌mysql了。如果修復不成功的話,就要重灌mysql了,再把備份的資料庫內容匯入即可。

總結:

    1、MySQL並沒有那麼脆弱,沒必要在損壞的時候就通過備份恢復的方式執行還原,費時費力;

    2、啟動過程中,可以通過設定--skip-grant-tables或者設定innodb_force_recovery(這個引數要修改cnf檔案)來讓MySQL跳過一些檢查,使例項成功啟動;

    3、啟動之後,可以執行資料備份或者匯出資料,並且嘗試對例項做修復;

備忘,引數的詳細內容:

1、innodb_force_recovery 可以設定為1-6,大的數字包含前面所有數字的影響

(SRV_FORCE_IGNORE_CORRUPT):忽略檢查到的corrupt頁。 (SRV_FORCE_NO_BACKGROUND):阻止主執行緒的執行,如主執行緒需要執行full purge操作,會導致crash。 (SRV_FORCE_NO_TRX_UNDO):不執行事務回滾操作。 (SRV_FORCE_NO_IBUF_MERGE):不執行插入緩衝的合併操作。 (SRV_FORCE_NO_UNDO_LOG_SCAN):不檢視重做日誌,InnoDB儲存引擎會將未提交的事務視為已提交。 (SRV_FORCE_NO_LOG_REDO):不執行前滾的操作。

------------------------

2、mysqlcheck 常用選項 A, –all-databases 表示所有庫 -a, –analyze 分析表 -o, –optimize 優化表 -r, –repair 修復表錯誤 -c, –check 檢查表是否出錯 –auto-repair 自動修復損壞的表 -B, –databases 選擇多個庫 -1, –all-in-1 Use one query per database with tables listed in a comma separated way -C, –check-only-changed 檢查表最後一次檢查之後的變動 -g, –check-upgrade Check for version dependent changes in the tables -F, –fast Check tables that are not closed properly –fix-db-names Fix DB names –fix-table-names Fix table names -f, –force Continue even when there is an error -e, –extended Perform extended check on a table. This will take a long time to execute. -m, –medium-check Faster than extended check option, but does most checks -q, –quick Faster than medium check option