回覆列表
  • 1 # 細心阿拉爾5C

    有的時候因為掉電或者其他原因導致資料庫損壞,我們可以使用mysql自帶的mysqlcheck命令來快速修復所有的資料庫或者特定的資料庫;例如檢查最佳化並修復所有的資料庫用:#mysqlcheck-A-o-r-pEnterpassword:database1OKdatabase2OK----------修復指定的資料庫用#mysqlcheck-A-o-rDatabase_NAME-p即可另外如果只是對某個表進行修復可以用:myisamchk或isamchk其中myisamchk適用於MYISAM型別的資料表,而isamchk適用於ISAM型別的資料表。這兩條命令的主要引數相同,一般新的系統都使用MYISAM作為預設的資料表型別,這裡以myisamchk為例子進行說明。當發現某個資料表出現問題時可以使用:myisamchktablename.MYI進行檢測,如果需要修復的話,可以使用:myisamchk-oftablename.MYI關於myisamchk的詳細引數說明,可以參見它的使用幫助。需要注意的時在進行修改時必須確保MySQL伺服器沒有訪問這個資料表,保險的情況下是最好在進行檢測時把MySQL伺服器Shutdown掉。另外可以把下面的命令放在你的rc.local裡面啟動MySQL伺服器前:[-x/tmp/mysql.sock]&&/pathtochk/myisamchk-of/DATA_DIR/*/*.MYI其中的/tmp/mysql.sock是MySQL監聽的Sock檔案位置,對於使用RPM安裝的使用者應該是/var/lib/mysql/mysql.sock,對於使用原始碼安裝則是/tmp/mysql.sock可以根據自己的實際情況進行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL資料庫存放的位置。1,簡單的修復模式myisamchk-r-qpath/資料庫/壞表.MYI注:-r----恢復模式-q----快速修復2,使用安全修復模式myisamchk--safe-recoverpath/資料庫/壞表.MYI3,困難的修復模式如果在索引檔案的第一個16K塊被破壞,或包含不正確的資訊,或如果索引檔案丟失,你只應該到這個階段。在這種情況下,建立一個新的索引檔案是必要的。按如下這樣做:把資料檔案移更安全的地方。使用表描述檔案建立新的(空)資料和索引檔案:shell>mysqldb_namemysql>DeleteFROMtbl_name;mysql>quit將老的資料檔案複製到新建立的資料檔案之中。(不要只是將老檔案移回新檔案之中;你要保留一個副本以防某些東西出錯。)回到階段2。現在myisamchk-r-q應該工作了。(這不應該是一個無限迴圈)。4,非常困難的修復模式只有描述檔案也破壞了,你才應該到達這個階段。這應該從未發生過,因為在表被建立以後,描述檔案就不再改變了。從一個備份恢復描述檔案並且回到階段3。你也可以恢復索引檔案並且回到階段2。對後者,你應該用myisamchk-r啟動。如果你沒有一個備份但是確切地知道表是怎樣被建立的,在另一個數據庫中建立表的一個複製。刪除新的資料檔案,然後從其他資料庫將描述和索引檔案移到破壞的資料庫中。這給了你新的描述和索引檔案,但是讓資料檔案獨自留下來了。回到階段2並且嘗試重建索引檔案。5,最佳化表結構myisamchk-r表也可以使用sql語句來最佳化OPTIMIZETABLE本方法參考自mouse部落格

  • 2 # 細心阿拉爾5C

    有的時候因為掉電或者其他原因導致資料庫損壞,我們可以使用mysql自帶的mysqlcheck命令來快速修復所有的資料庫或者特定的資料庫;例如檢查最佳化並修復所有的資料庫用:#mysqlcheck-A-o-r-pEnterpassword:database1OKdatabase2OK----------修復指定的資料庫用#mysqlcheck-A-o-rDatabase_NAME-p即可另外如果只是對某個表進行修復可以用:myisamchk或isamchk其中myisamchk適用於MYISAM型別的資料表,而isamchk適用於ISAM型別的資料表。這兩條命令的主要引數相同,一般新的系統都使用MYISAM作為預設的資料表型別,這裡以myisamchk為例子進行說明。當發現某個資料表出現問題時可以使用:myisamchktablename.MYI進行檢測,如果需要修復的話,可以使用:myisamchk-oftablename.MYI關於myisamchk的詳細引數說明,可以參見它的使用幫助。需要注意的時在進行修改時必須確保MySQL伺服器沒有訪問這個資料表,保險的情況下是最好在進行檢測時把MySQL伺服器Shutdown掉。另外可以把下面的命令放在你的rc.local裡面啟動MySQL伺服器前:[-x/tmp/mysql.sock]&&/pathtochk/myisamchk-of/DATA_DIR/*/*.MYI其中的/tmp/mysql.sock是MySQL監聽的Sock檔案位置,對於使用RPM安裝的使用者應該是/var/lib/mysql/mysql.sock,對於使用原始碼安裝則是/tmp/mysql.sock可以根據自己的實際情況進行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL資料庫存放的位置。1,簡單的修復模式myisamchk-r-qpath/資料庫/壞表.MYI注:-r----恢復模式-q----快速修復2,使用安全修復模式myisamchk--safe-recoverpath/資料庫/壞表.MYI3,困難的修復模式如果在索引檔案的第一個16K塊被破壞,或包含不正確的資訊,或如果索引檔案丟失,你只應該到這個階段。在這種情況下,建立一個新的索引檔案是必要的。按如下這樣做:把資料檔案移更安全的地方。使用表描述檔案建立新的(空)資料和索引檔案:shell>mysqldb_namemysql>DeleteFROMtbl_name;mysql>quit將老的資料檔案複製到新建立的資料檔案之中。(不要只是將老檔案移回新檔案之中;你要保留一個副本以防某些東西出錯。)回到階段2。現在myisamchk-r-q應該工作了。(這不應該是一個無限迴圈)。4,非常困難的修復模式只有描述檔案也破壞了,你才應該到達這個階段。這應該從未發生過,因為在表被建立以後,描述檔案就不再改變了。從一個備份恢復描述檔案並且回到階段3。你也可以恢復索引檔案並且回到階段2。對後者,你應該用myisamchk-r啟動。如果你沒有一個備份但是確切地知道表是怎樣被建立的,在另一個數據庫中建立表的一個複製。刪除新的資料檔案,然後從其他資料庫將描述和索引檔案移到破壞的資料庫中。這給了你新的描述和索引檔案,但是讓資料檔案獨自留下來了。回到階段2並且嘗試重建索引檔案。5,最佳化表結構myisamchk-r表也可以使用sql語句來最佳化OPTIMIZETABLE本方法參考自mouse部落格

  • 中秋節和大豐收的關聯?
  • 女子在公共泳池游泳後意外懷孕,到底咋回事?