欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

mysql表壞了怎么修復(fù),表格壞了怎么修復(fù)

mysql的表壞了怎么修復(fù)啊?

1. 表?yè)p壞的原因分析

創(chuàng)新互聯(lián)公司專注于襄州網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供襄州營(yíng)銷型網(wǎng)站建設(shè),襄州網(wǎng)站制作、襄州網(wǎng)頁(yè)設(shè)計(jì)、襄州網(wǎng)站官網(wǎng)定制、重慶小程序開(kāi)發(fā)服務(wù),打造襄州網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供襄州網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

以下原因是導(dǎo)致mysql 表毀壞的常見(jiàn)原因:

1、 服務(wù)器突然斷電導(dǎo)致數(shù)據(jù)文件損壞。

2、 強(qiáng)制關(guān)機(jī),沒(méi)有先關(guān)閉mysql 服務(wù)。

3、 mysqld 進(jìn)程在寫表時(shí)被殺掉。

4、 使用myisamchk 的同時(shí),mysqld 也在操作表。

5、 磁盤故障。

6、 服務(wù)器死機(jī)。

7、 mysql 本身的bug 。

2. 表?yè)p壞的癥狀

一個(gè)損壞的表的典型癥狀如下:

1 、當(dāng)在從表中選擇數(shù)據(jù)之時(shí),你得到如下錯(cuò)誤:

Incorrect key file for table: ’...’. Try to repair it

2 、查詢不能在表中找到行或返回不完全的數(shù)據(jù)。

3 、Error: Table ’p’ is marked as crashed and should be repaired 。

4 、打開(kāi)表失?。?Can’t open file: ‘×××.MYI’ (errno: 145) 。

5 、

3. 預(yù)防 MySQL 表?yè)p壞

可以采用以下手段預(yù)防m(xù)ysql 表?yè)p壞:

1 、定期使用myisamchk 檢查MyISAM 表(注意要關(guān)閉mysqld ),推薦使用check table 來(lái)檢查表(不用關(guān)閉mysqld )。

2 、在做過(guò)大量的更新或刪除操作后,推薦使用OPTIMIZE TABLE 來(lái)優(yōu)化表,這樣既減少了文件碎片,又減少了表?yè)p壞的概率。

3 、關(guān)閉服務(wù)器前,先關(guān)閉mysqld (正常關(guān)閉服務(wù),不要使用kill -9 來(lái)殺進(jìn)程)。

4 、使用ups 電源,避免出現(xiàn)突然斷電的情況。

5 、使用最新的穩(wěn)定發(fā)布版mysql ,減少mysql 本身的bug 導(dǎo)致表?yè)p壞。

6 、對(duì)于InnoDB 引擎,你可以使用innodb_tablespace_monitor 來(lái)檢查表空間文件內(nèi)文件空間管理的完整性。

7 、對(duì)磁盤做raid ,減少磁盤出錯(cuò)并提高性能。

8 、數(shù)據(jù)庫(kù)服務(wù)器最好只跑mysqld 和必要的其他服務(wù),不要跑其他業(yè)務(wù)服務(wù),這樣減少死機(jī)導(dǎo)致表?yè)p壞的可能。

9 、不怕萬(wàn)一,只怕意外,平時(shí)做好備份是預(yù)防表?yè)p壞的有效手段。

4. MySQL 表?yè)p壞的修復(fù)

MyISAM 表可以采用以下步驟進(jìn)行修復(fù) :

1、 使用 reapair table 或myisamchk 來(lái)修復(fù)。

2、 如果上面的方法修復(fù)無(wú)效,采用備份恢復(fù)表。

具體可以參考如下做法:

階段1 :檢查你的表

如果你有很多時(shí)間,運(yùn)行myisamchk *.MYI 或myisamchk -e *.MYI 。使用-s (沉默)選項(xiàng)禁止不必要的信息。

如果mysqld 服務(wù)器處于宕機(jī)狀態(tài),應(yīng)使用--update-state 選項(xiàng)來(lái)告訴myisamchk 將表標(biāo)記為’ 檢查過(guò)的’ 。

你必須只修復(fù)那些myisamchk 報(bào)告有錯(cuò)誤的表。對(duì)這樣的表,繼續(xù)到階段2 。

如果在檢查時(shí),你得到奇怪的錯(cuò)誤( 例如out of memory 錯(cuò)誤) ,或如果myisamchk 崩潰,到階段3 。

階段2 :簡(jiǎn)單安全的修復(fù)

注釋:如果想更快地進(jìn)行修復(fù),當(dāng)運(yùn)行myisamchk 時(shí),你應(yīng)將sort_buffer_size 和Key_buffer_size 變量的值設(shè)置為可用內(nèi)存的大約25% 。

首先,試試myisamchk -r -q tbl_name(-r -q 意味著“ 快速恢復(fù)模式”) 。這將試圖不接觸數(shù)據(jù)文件來(lái)修復(fù)索引文件。如果數(shù)據(jù)文件包含它應(yīng)有的一切內(nèi)容和指向數(shù)據(jù)文件內(nèi)正確地點(diǎn)的刪除連接,這應(yīng)該管用并且表可被修復(fù)。開(kāi)始修復(fù)下一張表。否則,執(zhí)行下列過(guò)程:

在繼續(xù)前對(duì)數(shù)據(jù)文件進(jìn)行備份。

使用myisamchk -r tbl_name(-r 意味著“ 恢復(fù)模式”) 。這將從數(shù)據(jù)文件中刪除不正確的記錄和已被刪除的記錄并重建索引文件。

如果前面的步驟失敗,使用myisamchk --safe-recover tbl_name 。安全恢復(fù)模式使用一個(gè)老的恢復(fù)方法,處理常規(guī)恢復(fù)模式不行的少數(shù)情況( 但是更慢) 。

如果在修復(fù)時(shí),你得到奇怪的錯(cuò)誤( 例如out of memory 錯(cuò)誤) ,或如果myisamchk 崩潰,到階段3 。

階段3 :困難的修復(fù)

只有在索引文件的第一個(gè)16K 塊被破壞,或包含不正確的信息,或如果索引文件丟失,你才應(yīng)該到這個(gè)階段。在這種情況下,需要?jiǎng)?chuàng)建一個(gè)新的索引文件。按如下步驟操做:

把數(shù)據(jù)文件移到安全的地方。

使用表描述文件創(chuàng)建新的( 空) 數(shù)據(jù)文件和索引文件:

shell mysql db_name

mysql SET AUTOCOMMIT=1;

mysql TRUNCATE TABLE tbl_name;

mysql quit

如果你的MySQL 版本沒(méi)有TRUNCATE TABLE ,則使用DELETE FROM tbl_name 。

將老的數(shù)據(jù)文件拷貝到新創(chuàng)建的數(shù)據(jù)文件之中。(不要只是將老文件移回新文件之中;你要保留一個(gè)副本以防某些東西出錯(cuò)。)

回到階段2 。現(xiàn)在myisamchk -r -q 應(yīng)該工作了。(這不應(yīng)該是一個(gè)無(wú)限循環(huán))。

你還可以使用REPAIR TABLE tbl_name USE_FRM ,將自動(dòng)執(zhí)行整個(gè)程序。

階段4 :非常困難的修復(fù)

只有.frm 描述文件也破壞了,你才應(yīng)該到達(dá)這個(gè)階段。這應(yīng)該從未發(fā)生過(guò),因?yàn)樵诒肀粍?chuàng)建以后,描述文件就不再改變了。

從一個(gè)備份恢復(fù)描述文件然后回到階段3 。你也可以恢復(fù)索引文件然后回到階段2 。對(duì)后者,你應(yīng)該用myisamchk -r 啟動(dòng)。

如果你沒(méi)有進(jìn)行備份但是確切地知道表是怎樣創(chuàng)建的,在另一個(gè)數(shù)據(jù)庫(kù)中創(chuàng)建表的一個(gè)拷貝。刪除新的數(shù)據(jù)文件,然后從其他數(shù)據(jù)庫(kù)將描述文件和索引文件移到破壞的數(shù)據(jù)庫(kù)中。這樣提供了新的描述和索引文件,但是讓.MYD 數(shù)據(jù)文件獨(dú)自留下來(lái)了?;氐诫A段2 并且嘗試重建索引文件。

InnoDB 表可以采用下面的方法修復(fù):

如果數(shù)據(jù)庫(kù)頁(yè)被破壞,你可能想要用SELECT INTO OUTFILE 從從數(shù)據(jù)庫(kù)轉(zhuǎn)儲(chǔ)你的表,通常以這種方法獲取的大多數(shù)數(shù)據(jù)是完好的。即使這樣,損壞可能導(dǎo)致SELECT * FROM tbl_name 或者InnoDB 后臺(tái)操作崩潰或斷言,或者甚至使得InnoDB 前滾恢復(fù)崩潰。 盡管如此,你可以用它來(lái)強(qiáng)制InnoDB 存儲(chǔ)引擎啟動(dòng)同時(shí)阻止后臺(tái)操作運(yùn)行,以便你能轉(zhuǎn)儲(chǔ)你的表。例如:你可以在重啟服務(wù)器之前,在選項(xiàng)文件的[mysqld] 節(jié)添加如下的行:

[mysqld]innodb_force_recovery = 4innodb_force_recovery 被允許的非零值如下。一個(gè)更大的數(shù)字包含所有更小數(shù)字的預(yù)防措施。如果你能夠用一個(gè)多數(shù)是4 的選項(xiàng)值來(lái)轉(zhuǎn)儲(chǔ)你的表,那么你是比較安全的,只有一些在損壞的單獨(dú)頁(yè)面上的數(shù)據(jù)會(huì)丟失。一個(gè)為6 的值更夸張,因?yàn)閿?shù)據(jù)庫(kù)頁(yè)被留在一個(gè)陳舊的狀態(tài),這個(gè)狀態(tài)反過(guò)來(lái)可以引發(fā)對(duì)B 樹和其它數(shù)據(jù)庫(kù)結(jié)構(gòu)的更多破壞。

1 (SRV_FORCE_IGNORE_CORRUPT)

即使服務(wù)器檢測(cè)到一個(gè)損壞的頁(yè),也讓服務(wù)器運(yùn)行著;試著讓SELECT * FROM tbl_name 跳過(guò)損壞的索引記錄和頁(yè),這樣有助于轉(zhuǎn)儲(chǔ)表。

2 (SRV_FORCE_NO_BACKGROUND)

阻止主線程運(yùn)行,如果崩潰可能在凈化操作過(guò)程中發(fā)生,這將阻止它。

3 (SRV_FORCE_NO_TRX_UNDO)

恢復(fù)后不運(yùn)行事務(wù)回滾。

4 (SRV_FORCE_NO_IBUF_MERGE)

也阻止插入緩沖合并操作。如果你可能會(huì)導(dǎo)致一個(gè)崩潰。最好不要做這些操作,不要計(jì)算表統(tǒng)計(jì)表。

5 (SRV_FORCE_NO_UNDO_LOG_SCAN)

啟動(dòng)數(shù)據(jù)庫(kù)之時(shí)不查看未完成日志:InnoDB 把未完成的事務(wù)視為已提交的。

6 (SRV_FORCE_NO_LOG_REDO)

不要在恢復(fù)連接中做日志前滾。

數(shù)據(jù)庫(kù)不能另外地帶著這些選項(xiàng)中被允許的選項(xiàng)來(lái)使用。作為一個(gè)安全措施,當(dāng)innodb_force_recovery 被設(shè)置為大于0 的值時(shí),InnoDB 阻止用戶執(zhí)行INSERT, UPDATE 或DELETE 操作.

即使強(qiáng)制恢復(fù)被使用,你也可以DROP 或CREATE 表。如果你知道一個(gè)給定的表正在導(dǎo)致回滾崩潰,你可以移除它。你也可以用這個(gè)來(lái)停止由失敗的大宗導(dǎo)入或失敗的ALTER TABLE 導(dǎo)致的失控回滾。你可以殺掉mysqld 進(jìn)程,然后設(shè)置innodb_force_recovery 為3 ,使得數(shù)據(jù)庫(kù)被掛起而不需要回滾,然后舍棄導(dǎo)致失控回滾的表。

網(wǎng)上找的

怎么查看mysql數(shù)據(jù)庫(kù)中的表是否損壞

可以使用語(yǔ)句檢查表。如果結(jié)果的msg_text部分是好的,那么你的表是健康的。反之,則表明mysql數(shù)據(jù)庫(kù)中的表有損壞。另外有些厲害的高手一額可以通過(guò)運(yùn)行腳本來(lái)檢測(cè)。

MyISAM?表可以采用以下方法進(jìn)行修復(fù)?:使用?reapair table?或myisamchk?來(lái)修復(fù)。如果修復(fù)無(wú)效,采用備份恢復(fù)表。

階段1?:檢查你的表

如果你有很多時(shí)間,運(yùn)行myisamchk *.MYI?或myisamchk -e *.MYI?。使用-s?(沉默)選項(xiàng)禁止不必要的信息。如果mysqld?服務(wù)器處于宕機(jī)狀態(tài),應(yīng)使用--update-state?選項(xiàng)來(lái)告訴myisamchk?將表標(biāo)記為'?檢查過(guò)的'?。

你必須只修復(fù)那些myisamchk?報(bào)告有錯(cuò)誤的表。對(duì)這樣的表,繼續(xù)到階段2?。如果在檢查時(shí),你得到奇怪的錯(cuò)誤(?例如out of memory?錯(cuò)誤)?,或如果myisamchk?崩潰,到階段3?。

階段2?:簡(jiǎn)單安全的修復(fù)

注釋:如果想更快地進(jìn)行修復(fù),當(dāng)運(yùn)行myisamchk?時(shí),你應(yīng)將sort_buffer_size?和Key_buffer_size?變量的值設(shè)置為可用內(nèi)存的大約25%?。

首先,試試myisamchk -r -q tbl_name(-r -q?意味著“?快速恢復(fù)模式”)?。這將試圖不接觸數(shù)據(jù)文件來(lái)修復(fù)索引文件。如果數(shù)據(jù)文件包含它應(yīng)有的一切內(nèi)容和指向數(shù)據(jù)文件內(nèi)正確地點(diǎn)的刪除連接,這應(yīng)該管用并且表可被修復(fù)。開(kāi)始修復(fù)下一張表。否則,執(zhí)行下列過(guò)程:

在繼續(xù)前對(duì)數(shù)據(jù)文件進(jìn)行備份。使用myisamchk -r tbl_name(-r?意味著“?恢復(fù)模式”)?。這將從數(shù)據(jù)文件中刪除不正確的記錄和已被刪除的記錄并重建索引文件。

如果前面的步驟失敗,使用myisamchk --safe-recover tbl_name?。安全恢復(fù)模式使用一個(gè)老的恢復(fù)方法,處理常規(guī)恢復(fù)模式不行的少數(shù)情況(?但是更慢)?。如果在修復(fù)時(shí),你得到奇怪的錯(cuò)誤(?例如out of memory?錯(cuò)誤)?,或如果myisamchk?崩潰,到階段3?。

階段3?:困難的修復(fù)

只有在索引文件的第一個(gè)16K?塊被破壞,或包含不正確的信息,或如果索引文件丟失,你才應(yīng)該到這個(gè)階段。在這種情況下,需要?jiǎng)?chuàng)建一個(gè)新的索引文件。按如下步驟操做:

把數(shù)據(jù)文件移到安全的地方。使用表描述文件創(chuàng)建新的(?空)?數(shù)據(jù)文件和索引文件:

shell mysql db_name

mysql SET AUTOCOMMIT=1;

mysql TRUNCATE TABLE tbl_name;

mysql quit

如果你的MySQL?版本沒(méi)有TRUNCATE TABLE?,則使用DELETE FROM tbl_name?。將老的數(shù)據(jù)文件拷貝到新創(chuàng)建的數(shù)據(jù)文件之中?;氐诫A段2??,F(xiàn)在myisamchk -r -q?應(yīng)該工作了。你還可以使用REPAIR TABLE tbl_name USE_FRM?,將自動(dòng)執(zhí)行整個(gè)程序。

階段4?:非常困難的修復(fù)

只有.frm?描述文件也破壞了,你才應(yīng)該到達(dá)這個(gè)階段。這應(yīng)該從未發(fā)生過(guò),因?yàn)樵诒肀粍?chuàng)建以后,描述文件就不再改變了。

從一個(gè)備份恢復(fù)描述文件然后回到階段3?。你也可以恢復(fù)索引文件然后回到階段2?。對(duì)后者,你應(yīng)該用myisamchk -r?啟動(dòng)。

如果你沒(méi)有進(jìn)行備份但是確切地知道表是怎樣創(chuàng)建的,在另一個(gè)數(shù)據(jù)庫(kù)中創(chuàng)建表的一個(gè)拷貝。刪除新的數(shù)據(jù)文件,然后從其他數(shù)據(jù)庫(kù)將描述文件和索引文件移到破壞的數(shù)據(jù)庫(kù)中。這樣提供了新的描述和索引文件,但是讓.MYD?數(shù)據(jù)文件獨(dú)自留下來(lái)了?;氐诫A段2并且嘗試重建索引文件。

如何處理mysql中表?yè)p壞問(wèn)題

5.9.4. 表維護(hù)和崩潰恢復(fù)

后面幾節(jié)討論如何使用myisamchk來(lái)檢查或維護(hù)MyISAM表(對(duì)應(yīng).MYI和.MYD文件的表)。

你可以使用myisamchk實(shí)用程序來(lái)獲得有關(guān)你的數(shù)據(jù)庫(kù)表的信息或檢查、修復(fù)、優(yōu)化他們。下列小節(jié)描述如何調(diào)用myisamchk(包括它的選項(xiàng)的描述),如何建立表的維護(hù)計(jì)劃,以及如何使用myisamchk執(zhí)行各種功能。

盡管用myisamchk修復(fù)表很安全,在修復(fù)(或任何可以大量更改表的維護(hù)操作)之前先進(jìn)行備份也是很好的習(xí)慣

影響索引的myisamchk操作會(huì)使ULLTEXT索引用full-text參數(shù)重建,不再與MySQL服務(wù)器使用的值兼容。要想避免,請(qǐng)閱讀5.9.5.1節(jié),“用于myisamchk的一般選項(xiàng)”的說(shuō)明。

在許多情況下,你會(huì)發(fā)現(xiàn)使用SQL語(yǔ)句實(shí)現(xiàn)MyISAM表的維護(hù)比執(zhí)行myisamchk操作要容易地多:

· 要想檢查或維護(hù)MyISAM表,使用CHECK TABLE或REPAIR TABLE。

· 要想優(yōu)化MyISAM表,使用OPTIMIZE TABLE。

· 要想分析MyISAM表,使用ANALYZE TABLE。

可以直接這些語(yǔ)句,或使用mysqlcheck客戶端程序,可以提供命令行接口。

這些語(yǔ)句比myisamchk有利的地方是服務(wù)器可以做任何工作。使用myisamchk,你必須確保服務(wù)器在同一時(shí)間不使用表。否則,myisamchk和服務(wù)器之間會(huì)出現(xiàn)不期望的相互干涉。

5.9.5. myisamchk:MyISAM表維護(hù)實(shí)用工具

5.9.5.1. 用于myisamchk的一般選項(xiàng)

5.9.5.2. 用于myisamchk的檢查選項(xiàng)

5.9.5.3. myisamchk的修復(fù)選項(xiàng)

5.9.5.4. 用于myisamchk的其它選項(xiàng)

5.9.5.5. myisamchk內(nèi)存使用

5.9.5.6. 將myisamchk用于崩潰恢復(fù)

5.9.5.7. 如何檢查MyISAM表的錯(cuò)誤

5.9.5.8. 如何修復(fù)表

5.9.5.9. 表優(yōu)化

可以使用myisamchk實(shí)用程序來(lái)獲得有關(guān)數(shù)據(jù)庫(kù)表的信息或檢查、修復(fù)、優(yōu)化他們。myisamchk適用MyISAM表(對(duì)應(yīng).MYI和.MYD文件的表)。

調(diào)用myisamchk的方法:

shell myisamchk [options] tbl_name ...

options指定你想讓myisamchk做什么。在后面描述它們。還可以通過(guò)調(diào)用myisamchk --help得到選項(xiàng)列表。

tbl_name是你想要檢查或修復(fù)的數(shù)據(jù)庫(kù)表。如果你不在數(shù)據(jù)庫(kù)目錄的某處運(yùn)行myisamchk,你必須指定數(shù)據(jù)庫(kù)目錄的路徑,因?yàn)閙yisamchk不知道你的數(shù)據(jù)庫(kù)位于哪兒。實(shí)際上,myisamchk不在乎你正在操作的文件是否位于一個(gè)數(shù)據(jù)庫(kù)目錄;你可以將對(duì)應(yīng)于數(shù)據(jù)庫(kù)表的文件拷貝到別處并且在那里執(zhí)行恢復(fù)操作。

如果你愿意,可以用myisamchk命令行命名幾個(gè)表。還可以通過(guò)命名索引文件(用“ .MYI”后綴)來(lái)指定一個(gè)表。它允許你通過(guò)使用模式“*.MYI”指定在一個(gè)目錄所有的表。例如,如果你在數(shù)據(jù)庫(kù)目錄,可以這樣在目錄下檢查所有的MyISAM表:

shell myisamchk *.MYI

如果你不在數(shù)據(jù)庫(kù)目錄下,可通過(guò)指定到目錄的路徑檢查所有在那里的表:

shell myisamchk /path/to/database_dir/*.MYI

你甚至可以通過(guò)為MySQL數(shù)據(jù)目錄的路徑指定一個(gè)通配符來(lái)檢查所有的數(shù)據(jù)庫(kù)中的所有表:

shell myisamchk /path/to/datadir/*/*.MYI

推薦的快速檢查所有MyISAM表的方式是:

shell myisamchk --silent --fast /path/to/datadir/*/*.MYI

如果你想要檢查所有MyISAM表并修復(fù)任何破壞的表,可以使用下面的命令:

shell myisamchk --silent --force --fast --update-state \

-O key_buffer=64M -O sort_buffer=64M \

-O read_buffer=1M -O write_buffer=1M \

/path/to/datadir/*/*.MYI

該命令假定你有大于64MB的自由內(nèi)存。關(guān)于用myisamchk分配內(nèi)存的詳細(xì)信息,參見(jiàn)5.9.5.5節(jié),“myisamchk內(nèi)存使用”。

當(dāng)你運(yùn)行myisamchk時(shí),必須確保其它程序不使用表。否則,當(dāng)你運(yùn)行myisamchk時(shí),會(huì)顯示下面的錯(cuò)誤消息:

warning: clients are using or haven't closed the table properly

這說(shuō)明你正嘗試檢查正被另一個(gè)還沒(méi)有關(guān)閉文件或已經(jīng)終止而沒(méi)有正確地關(guān)閉文件的程序(例如mysqld服務(wù)器)更新的表。

如果mysqld正在運(yùn)行,你必須通過(guò)FLUSH TABLES強(qiáng)制清空仍然在內(nèi)存中的任何表修改。當(dāng)你運(yùn)行myisamchk時(shí),必須確保其它程序不使用表。避免該問(wèn)題的最容易的方法是使用CHECK TABLE而不用myisamchk來(lái)檢查表。

5.9.5.1. 用于myisamchk的一般選項(xiàng)

本節(jié)描述的選項(xiàng)可以用于用myisamchk執(zhí)行的任何類型的表維護(hù)操作。本節(jié)后面的章節(jié)中描述的選項(xiàng)只適合具體操作,例如檢查或修復(fù)表。

· --help,-?

顯示幫助消息并退出。

· --debug=debug_options, -# debug_options

輸出調(diào)試記錄文件。debug_options字符串經(jīng)常是'd:t:o,filename'。

· --silent,-s

沉默模式。僅當(dāng)發(fā)生錯(cuò)誤時(shí)寫輸出。你能使用-s兩次(-ss)使myisamchk沉默。

· --verbose,-v

冗長(zhǎng)模式。打印更多的信息。這能與-d和-e一起使用。為了更冗長(zhǎng),使用-v多次(-vv, -vvv)!

· --version, -V

顯示版本信息并退出。

· --wait, -w

如果表被鎖定,不是提示錯(cuò)誤終止,而是在繼續(xù)前等待到表被解鎖。請(qǐng)注意如果用--skip-external-locking選項(xiàng)運(yùn)行mysqld,只能用另一個(gè)myisamchk命令鎖定表。

還可以通過(guò)--var_name=value選項(xiàng)設(shè)置下面的變量:

變量

默認(rèn)值

decode_bits

9

ft_max_word_len

取決于版本

ft_min_word_len

4

ft_stopword_file

內(nèi)建列表

key_buffer_size

523264

myisam_block_size

1024

read_buffer_size

262136

sort_buffer_size

2097144

sort_key_blocks

16

stats_method

nulls_unequal

write_buffer_size

262136

可以用myisamchk --help檢查myisamchk變量及其 默認(rèn)值:

當(dāng)用排序鍵值修復(fù)鍵值時(shí)使用sort_buffer_size,使用--recover時(shí)這是很普通的情況。

當(dāng)用--extend-check檢查表或通過(guò)一行一行地將鍵值插入表中(如同普通插入)來(lái)修改鍵值時(shí)使用Key_buffer_size。在以下情況通過(guò)鍵值緩沖區(qū)進(jìn)行修復(fù):

· 使用--safe-recover。

· 當(dāng)直接創(chuàng)建鍵值文件時(shí),需要對(duì)鍵值排序的臨時(shí)文件有兩倍大。通常是當(dāng)CHAR、VARCHAR、或TEXT列的鍵值較大的情況,因?yàn)榕判虿僮髟谔幚磉^(guò)程中需要保存全部鍵值。如果你有大量臨時(shí)空間,可以通過(guò)排序強(qiáng)制使用myisamchk來(lái)修復(fù),可以使用--sort-recover選項(xiàng)。

通過(guò)鍵值緩沖區(qū)的修復(fù)占用的硬盤空間比使用排序么少,但是要慢。

如果想要快速修復(fù),將key_buffer_size和sort_buffer_size變量設(shè)置到大約可用內(nèi)存的25%。可以將兩個(gè)變量設(shè)置為較大的值,因?yàn)橐粋€(gè)時(shí)間只使用一個(gè)變量。

myisam_block_size是用于索引塊的內(nèi)存大小。

stats_method影響當(dāng)給定--analyze選項(xiàng)時(shí),如何為索引統(tǒng)計(jì)搜集處理NULL值。它如同myisam_stats_method系統(tǒng)變量。詳細(xì)信息參見(jiàn)5.3.3節(jié),“服務(wù)器系統(tǒng)變量”和7.4.7節(jié),“MyISAM索引統(tǒng)計(jì)集合”的myisam_stats_method的描述。

ft_min_word_len和ft_max_word_len表示FULLTEXT索引的最小和最大字長(zhǎng)。ft_stopword_file為停止字文件的文件名。需要在以下環(huán)境中對(duì)其進(jìn)行設(shè)置。

如果你使用myisamchk來(lái)修改表索引(例如修復(fù)或分析),使用最小和最大字長(zhǎng)和停止字文件的 默認(rèn)全文參數(shù)值(除非你另外指定)重建FULLTEXT索引。這樣會(huì)導(dǎo)致查詢失敗。

出現(xiàn)這些問(wèn)題是因?yàn)橹挥蟹?wù)器知道這些參數(shù)。它們沒(méi)有保存在MyISAM索引文件中。如果你修改了服務(wù)器中的最小或最大字長(zhǎng)或停止字文件,要避免該問(wèn)題,為用于mysqld的myisamchk指定相同的ft_min_word_len,ft_max_word_len和ft_stopword_file值。例如,如果你將最小字長(zhǎng)設(shè)置為3,可以這樣使用myisamchk來(lái)修復(fù)表:

shell myisamchk --recover --ft_min_word_len=3 tbl_name.MYI

要想確保myisamchk和服務(wù)器使用相同的全文

怎樣修復(fù)mysql表

您好:修復(fù)數(shù)據(jù)表 表 Mysql數(shù)據(jù)庫(kù) 一張損壞的表的癥狀通常是查詢意外中斷并且你能看到例如這些錯(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_name Mysql 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ù)表。

講解MySQL數(shù)據(jù)庫(kù)表如何修復(fù)

一張損壞的表的癥狀通常是查詢意外中斷并且你能看到例如這些錯(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_nameisamchk -r -q tbl_name ◆ 如果問(wèn)題仍舊存在,則忽略--quick選項(xiàng),允許修復(fù)程序修改數(shù)據(jù)文件,因?yàn)檫@可能存在問(wèn)題。下面的命令將從數(shù)據(jù)文件中刪除不正確的記錄和已被刪除的記錄并重建索引文件: myisamchk -r tbl_nameisamchk -r tbl_name ◆ 如果前面的步驟失敗,使用。安全恢復(fù)模式使用一個(gè)老的恢復(fù)方法,處理常規(guī)恢復(fù)模式不行的少數(shù)情況(但是更慢)。 myisamchk --safe-recover tbl_nameisamchk --safe-recover tbl_name困難的修理如果在索引文件的第一個(gè)16K塊被破壞,或包含不正確的信息,或如果索引文件丟失,你只應(yīng)該到這個(gè)階段 。在這種情況下,創(chuàng)建一個(gè)新的索引文件是必要的。按如下這樣的步驟做: ◆ 定位到包含崩潰表的數(shù)據(jù)庫(kù)目錄中 ◆ 把數(shù)據(jù)文件移更安全的地方。

新聞名稱:mysql表壞了怎么修復(fù),表格壞了怎么修復(fù)
分享路徑:http://chinadenli.net/article40/dsshgho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站移動(dòng)網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷推廣、電子商務(wù)、響應(yīng)式網(wǎng)站、域名注冊(cè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)