教您修復(fù)mysql數(shù)據(jù)庫(kù)的方法
會(huì)mysql的朋友都知道m(xù)ysql在長(zhǎng)時(shí)間使用過(guò)后數(shù)據(jù)庫(kù)會(huì)出現(xiàn)一些問(wèn)題,這就需要快速修復(fù)損壞mysql數(shù)據(jù)庫(kù)以方便我們的工作和學(xué)習(xí)。下面小編為大家下面介紹兩種快速檢修 MySQL 數(shù)據(jù)庫(kù)的方法。
本人常用這樣的代碼,直接放到mysql數(shù)據(jù)庫(kù)目錄里面
cmd /k myisamchk -r jb51_tablename
jb51_tablename是jb51_tablename.MYD的名稱。運(yùn)行以下就可以了。
有的時(shí)候因?yàn)榈綦娀蛘咂渌驅(qū)е聰?shù)據(jù)庫(kù)損壞,我們可以使用mysql自帶的mysqlcheck命令來(lái)快速修復(fù)所有的數(shù)據(jù)庫(kù)或者特定的數(shù)據(jù)庫(kù);例如
檢查優(yōu)化并修復(fù)所有的數(shù)據(jù)庫(kù)用:
1.先在運(yùn)行中輸入CMD,啟動(dòng)命令行.
2.進(jìn)入Mysql的Bin目錄:E:\Program Files\MySQL\MySQL Server 5.0\bin,如果不知道如何進(jìn)入別的目錄,就要參考網(wǎng)上的資料補(bǔ)習(xí)基礎(chǔ)知識(shí)了.
常見(jiàn)方式:
運(yùn)行 E:
運(yùn)行 CD "E:\Program Files\MySQL\MySQL Server 5.0\bin"
3.運(yùn)行:mysqlcheck -A -o -r -uroot -p888888
注意,將888888改成你自己的root用戶密碼
mysql.columns_priv OK
mysql.db OK
mysql.func OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.host OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
......
......
......
注意!
在修復(fù)過(guò)程中,如果看到有error的提示,表明這個(gè)表是壞的,無(wú)法修復(fù)的,對(duì)于含有壞表的的數(shù)據(jù)庫(kù),您只能刪除它,或停止它,不然會(huì)影響整個(gè)Mysql的穩(wěn)定,造成mysql自動(dòng)停止.(提示"The storage engine for the table doesn't support repair"的表不需要處理)
如果修復(fù)太快看不到結(jié)果,可以運(yùn)行
mysqlcheck -A -o -r -uroot -p888888 >>C:\test.txt
運(yùn)行后打開(kāi)test.txt就可以看到了.
1、myisamchk
使用 myisamchk 必須暫時(shí)停止 MySQL 服務(wù)器。例如,我們要檢修 discuz 數(shù)據(jù)庫(kù)。執(zhí)行以下操作:
# service mysql stop (停止 MySQL );
# myisamchk -r /數(shù)據(jù)庫(kù)文件的絕對(duì)路徑/*MYI
# service mysql start
myisamchk 會(huì)自動(dòng)檢查并修復(fù)數(shù)據(jù)表中的索引錯(cuò)誤。
2、mysqlcheck
使用 mysqlcheck 無(wú)需停止 MySQL ,可以進(jìn)行熱修復(fù)。操作步驟如下:
># mysqlcheck -r discuz.*
小編提醒:無(wú)論是 myisamchk 還是 mysqlcheck ,一般情況下不要使用 -f 強(qiáng)制修復(fù),-f 參數(shù)會(huì)在遇到一般修復(fù)無(wú)法成功的時(shí)候刪除部分出錯(cuò)數(shù)據(jù)以嘗試修復(fù)。所以,不到萬(wàn)不得已不要使用 -f。
以下是補(bǔ)充:
一張損壞的表的癥狀通常是查詢意外中斷并且你能看到例如這些錯(cuò)誤:
◆ “tbl_name.frm”被鎖定不能改變。
◆ 不能找到文件“tbl_name.MYI”(Errcode :### )。
◆ 從表處理器的得到錯(cuò)誤###(此時(shí),錯(cuò)誤135是一個(gè)例外)。
◆ 意外的文件結(jié)束。
◆ 記錄文件被毀壞。
在這些情況下,你必須修復(fù)表。表的修復(fù)是一項(xiàng)非常困難的工作,很多情況下令人束手無(wú)策。然而,有一些常規(guī)的知道思想和過(guò)程,可以遵循它們來(lái)增加修正表的機(jī)會(huì)。通常,開(kāi)始是可以用最快的修復(fù)方法,看看能否袖珍故障。如果發(fā)現(xiàn)不成功,可以逐步升級(jí)到更徹底的但更慢的修復(fù)方法。如果仍舊難以修復(fù),就應(yīng)該從備份中恢復(fù)了。在上一章已經(jīng)詳細(xì)介紹了這一部分內(nèi)容。
簡(jiǎn)單安全的修復(fù)
為了修復(fù)一個(gè)表執(zhí)行下列步驟:
◆ 首先,用--recover,-r選項(xiàng)修正表,并且用--quick,-q選項(xiàng),來(lái)只根據(jù)索引文件的內(nèi)容進(jìn)行恢復(fù)。這樣不接觸數(shù)據(jù)文件來(lái)修復(fù)索引文件。(-r意味著“恢復(fù)模式”)
myisamchk -r -q tbl_name
isamchk -r -q tbl_name
◆ 如果問(wèn)題仍舊存在,則忽略--quick選項(xiàng),允許修復(fù)程序修改數(shù)據(jù)文件,因?yàn)檫@可能存在問(wèn)題。下面的命令將從數(shù)據(jù)文件中刪除不正確的記錄和已被刪除的記錄并重建索引文件:
myisamchk -r tbl_name
isamchk -r tbl_name
◆ 如果前面的步驟失敗,使用。安全恢復(fù)模式使用一個(gè)老的恢復(fù)方法,處理常規(guī)恢復(fù)模式不行的少數(shù)情況(但是更慢)。
myisamchk --safe-recover tbl_name
isamchk --safe-recover tbl_name
困難的修理
如果在索引文件的第一個(gè)16K塊被破壞,或包含不正確的信息,或如果索引文件丟失,你只應(yīng)該到這個(gè)階段 。在這種情況下,創(chuàng)建一個(gè)新的索引文件是必要的。按如下這樣的步驟做:
◆ 定位到包含崩潰表的數(shù)據(jù)庫(kù)目錄中
◆ 把數(shù)據(jù)文件移更安全的地方。
◆ 使用表描述文件創(chuàng)建新的(空)數(shù)據(jù)和索引文件:
shell> mysql db_namemysql> DELETE FROM tbl_name;mysql> quit
上述語(yǔ)句將重新創(chuàng)建新的空表,并使用表的的描述文件tbl_name.frm重新生成新的數(shù)據(jù)和索引文件。
◆ 將老的數(shù)據(jù)文件拷貝到新創(chuàng)建的數(shù)據(jù)文件之中。(不要只是將老文件移回新文件之中;你要保留一個(gè)副本以防某些東西出錯(cuò)。)
◆ 在使用標(biāo)準(zhǔn)的修復(fù)方法?,F(xiàn)在myisamchk -r -q應(yīng)該工作了。(這不應(yīng)該是一個(gè)無(wú)限循環(huán))。
如果你擁有表的備份文件,那么一切過(guò)程就容易的多。從備份文件中可以恢復(fù)表的描述文件,然后在檢查表,有可能還要繼續(xù)使用標(biāo)準(zhǔn)的修復(fù)方法,應(yīng)該糾可以解決問(wèn)題了。
非常困難的修復(fù)
只有描述文件也破壞了,你才應(yīng)該到達(dá)這個(gè)階段。這應(yīng)該從未發(fā)生過(guò),因?yàn)樵诒肀粍?chuàng)建以后,描述文件就不再改變了。
從一個(gè)備份恢復(fù)描述文件并且回到階段2。你也可以恢復(fù)索引文件并且回到階段1。對(duì)于后者,你應(yīng)該用myisamchk -r啟動(dòng)。
如果因?yàn)槟撤N原因,數(shù)據(jù)的備份文件丟失或者沒(méi)有備份文件,但是你還記得建立表的CREATE TABLE語(yǔ)句,那么太好了,這樣還是可以恢復(fù)索引文件:
◆ 定位到包含崩潰表的數(shù)據(jù)庫(kù)目錄中
◆ 把數(shù)據(jù)文件移更安全的地方。再把數(shù)據(jù)庫(kù)目錄中的對(duì)應(yīng)的目錄刪去.。
◆ 調(diào)用mysql并發(fā)復(fù)CREATE TABLE語(yǔ)句建立該表。
◆ 退出mysql,將原始的數(shù)據(jù)文件和索引文件移回到數(shù)據(jù)庫(kù)的目錄中,替換剛才新建的文件。
◆ 然后回到階段2,修復(fù)表。也可以只移回?cái)?shù)據(jù)文件,這樣保留新的描述和索引文件,然后回到階段1,繼續(xù)用標(biāo)準(zhǔn)的方法修復(fù)表。
相關(guān)文章
MySQL delete刪除數(shù)據(jù)后釋放磁盤空間的操作方法
這篇文章主要介紹了MySQL delete刪除數(shù)據(jù)后,釋放磁盤空間,文中給大家介紹了優(yōu)化表空間的多種方法,每種方法給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05詳解一條update語(yǔ)句是怎樣執(zhí)行原理解析
這篇文章主要為大家介紹了詳解一條update語(yǔ)句是怎樣執(zhí)行原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12MySQL中浮點(diǎn)型轉(zhuǎn)字符型可能會(huì)遇的問(wèn)題詳解
類型轉(zhuǎn)換是我們?nèi)粘i_(kāi)發(fā)中經(jīng)常會(huì)遇到的一個(gè)需求,最近在將浮點(diǎn)型轉(zhuǎn)換成字符型的時(shí)候就遇到了一個(gè)問(wèn)題,所以總結(jié)分享出來(lái),下面這篇文章主要給大家介紹了MySQL中關(guān)于浮點(diǎn)型轉(zhuǎn)字符型可能遇到的問(wèn)題的相關(guān)資料,需要的朋友可以參考下。2017-09-09經(jīng)測(cè)試最好用的mysql密碼忘記的解決方法
經(jīng)測(cè)試最好用的mysql密碼忘記的解決方法...2007-06-06解決mysql:ERROR 1045 (28000): Access denied for user ''root''@
今天給大家分享一篇教程幫助大家解決mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)的問(wèn)題,非常不錯(cuò),特此分享到腳本之家平臺(tái)供大家學(xué)習(xí)2021-06-06Windows下mysql-5.7.28下載、安裝、配置教程圖文詳解
這篇文章主要介紹了Windows下mysql-5.7.28下載、安裝、配置教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12深入mysql "ON DUPLICATE KEY UPDATE" 語(yǔ)法的分析
本篇文章是對(duì)mysql "ON DUPLICATE KEY UPDATE"語(yǔ)法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06mysql中獲取一天、一周、一月時(shí)間數(shù)據(jù)的各種sql語(yǔ)句寫法
今天抽時(shí)間整理了一篇mysql中與天、周、月有關(guān)的時(shí)間數(shù)據(jù)的sql語(yǔ)句的各種寫法,部分是收集資料,全部手工整理,自己學(xué)習(xí)的同時(shí),分享給大家,并首先默認(rèn)創(chuàng)建一個(gè)表、插入2條數(shù)據(jù),便于部分?jǐn)?shù)據(jù)的測(cè)試,其中部分名詞或函數(shù)進(jìn)行了解釋說(shuō)明。直入主題2014-05-05