国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Myisam引擎數(shù)據(jù)恢復(fù)策略

2019-12-22 10:40:43
網(wǎng)絡(luò)安全和信息化 2019年1期
關(guān)鍵詞:命令行數(shù)據(jù)表命令

恢復(fù)表結(jié)構(gòu),順利讀取數(shù)據(jù)

在網(wǎng)站運行過程中,有時會連接數(shù)據(jù)庫失敗的情況,筆者經(jīng)過檢測,發(fā)現(xiàn)是后臺數(shù)據(jù)庫中某些表的結(jié)構(gòu)損壞造成的。這是因為對于“.FRM”文件來,因為其存儲著表的結(jié)構(gòu)信息,一旦其損壞,將造成無法讀取表中數(shù)據(jù)的情況。其修復(fù)策略是先將存儲數(shù)據(jù)的“.MYI”和“.MYD”文件復(fù)制到其他目錄中存儲起來,之后在數(shù)據(jù)庫中重建同名的表,助于表結(jié)構(gòu)要相同。將“.MYI”和“.MYD”文件復(fù)制回來,登錄數(shù)據(jù)庫執(zhí)行“repair table”命令,執(zhí)行修復(fù)操作,最后查看修復(fù)結(jié)果。這里使用相關(guān)的例子,來說明解決的方法。

例如,在MySQL中存在名為“shujku1”的庫,在該庫中存在名為“sampletb”的 表。 進 入“/var/lib/mysql/shujuku1”目 錄,執(zhí)行“l(fā)s”命令,卻沒有發(fā)現(xiàn)“sampletb.frm”文件。當(dāng)執(zhí)行“mysql -p”命令登錄進來。執(zhí)行“use shujuku1;”命令進入該數(shù)據(jù)庫,執(zhí)行“show tables;”命 令,會發(fā)現(xiàn)“sampletb”表并不存在。當(dāng)執(zhí)行“select * from sampletb;”之類的命令,MySQL會顯示“ERROR 1146(42S02)”之類的錯誤信息。

為此,可按照上面的方法,將“sampletb.myi” 和“sampletb.myd” 移 動 到別處,在“shujuku1”數(shù)據(jù)庫中使用“create table sampletb”命令創(chuàng)建同名的表,結(jié)構(gòu)必須相同,相當(dāng)于重建“sampletb.frm”文件。將上述文件復(fù)制回來,替換掉新創(chuàng)建的文件,登錄到數(shù)據(jù)庫,執(zhí)行“repair table sampletb;”命令,會重建“sampletb.frm”和上述文件之間的關(guān)系。

恢復(fù)因索引損壞丟失的數(shù)據(jù)

某次因為服務(wù)器異常掉電,當(dāng)電力恢復(fù)后,重啟服務(wù)器,發(fā)現(xiàn)網(wǎng)站運行出錯。在進行檢測時,發(fā)現(xiàn)在讀取表數(shù)據(jù)時MySQL出現(xiàn)報錯信息。分析其原因,可能是當(dāng)服務(wù)器突然斷電時,數(shù)據(jù)庫正在向“.MYI”文件中刷新索引信息,造成索引文件結(jié)構(gòu)發(fā)生錯誤。實際上,當(dāng)“.MYI”的頭數(shù)據(jù)損壞(例如第一個16KB塊等),包含的信息不正確以及該文件丟失等,都會出現(xiàn)此類故障。因為手頭只有“.frm”文件,只有通過其來完整恢復(fù)表結(jié)構(gòu),讓表恢復(fù)到可用狀態(tài)。

具體方法是新將“.FRM”文件復(fù)制到數(shù)據(jù)庫目錄中,針對“.MYD”和“.MYI”文件,創(chuàng)建對應(yīng)的空文件。如果存在這些文件,先將其刪除。登錄數(shù)據(jù)庫,執(zhí)行“repair table xxx use_frm”命令,其中的“xxx”為表名,執(zhí)行修復(fù)動作,即讓MySQL以該“.frm”文件為基礎(chǔ),來修復(fù)表文件,來計算“.MYD”和“.MYI”文件應(yīng)該具有的內(nèi)容,最后查看恢復(fù)結(jié)果。還以上面的例子進行說明,假設(shè)只有“sampletb.frm”文件,另外的文件丟失了,當(dāng)執(zhí)行各種查詢命令時,MySQL會顯示“ERROR 1017(HY000)”的錯誤提示。按照上述方法將“sampletb.frm”復(fù)制回來,在Linux命令行下執(zhí)行“touch sampletb.MYD”和“touch sampletb.MYI”命令。來創(chuàng)建對應(yīng)的數(shù)據(jù)和索引文件。為了讓MySQL有權(quán)限對其進行處理,執(zhí)行“chown mysql. Sampletb.*”命令,即可實現(xiàn)該要求。在MySQL命令行中執(zhí)行“repair table sampletb use_frm;”命令,完成后就可以正常操作該表了。

使用Myisamchk恢復(fù)數(shù)據(jù)表

實際上,可以使用Myisamchk這一專用的工具,對Myisam表進行修復(fù),該命令可以獲取有關(guān)數(shù)據(jù)庫表的統(tǒng)計信息,并對其進行檢查,修復(fù)和優(yōu)化。和之前的“repair table”命令不同,該命令可以通過合理的調(diào)整參數(shù),可以實現(xiàn)不同的修復(fù)手段和方式,完成細(xì)節(jié)化的調(diào)整。更重要的是,該命令的修復(fù)速度很快,特別是修復(fù)大體積的表時尤為明顯。

其命令格式為“myisamchk [參 數(shù)]tables[.MYI]”,其 中 的 用來執(zhí)行檢測功能的參數(shù)包括“-i”,可以打印所檢查表的統(tǒng)計信息?!?-F”參數(shù)只檢查有沒有正確關(guān)閉的表,“-f”參數(shù)用來執(zhí)行自動修復(fù)操作。“-m”參數(shù)可以快速執(zhí)行檢測操作等。例如,在Linux命令行下執(zhí)行“myisamchk -im /var/lib/mysql/shujuku1/sampletb”命 令,可 以 對“sampletb”表進行快速檢查。執(zhí)行“myisamchk -iFm /var/lib/mysql/shujuku1/*”命令,只檢查未正常關(guān)閉的表。執(zhí)行“myisamchk -eis /var/lib/mysql/shujuku1/sampletb”命令,僅顯示“sampletb”表中最重要信息。

默認(rèn)下,“Myisamchk”命令使用的內(nèi)存過小,如果要修復(fù)較大的表,速度自然會很慢,通過為其設(shè)置更大的內(nèi)存量,可以加速其修復(fù)速度。例如執(zhí)行“myisamchk-sort_buffer_size=32M-key_buffer_size=16M-read_buffer_size=2M-write_buffer_size=2M 具體的修復(fù)參數(shù)等”格式的命令,可以靈活的針對排序緩沖(用于計算和建立索引),讀寫緩沖等分配指定的內(nèi)存量。在具體進行數(shù)據(jù)恢復(fù)時,需要遵循一定的順序。首先應(yīng)該仔細(xì)查看MySQL顯示的錯誤碼信息,例如執(zhí)行“myisamchk -im --verbose表名”命令,來查看具體的錯誤碼。

簡單錯誤的快速修復(fù)

對于有些簡單的錯誤來說,實際上是無需進行復(fù)雜的修復(fù)操作的。例如對于Error 135和136錯誤來說,是因為記錄文件或索引文件的空間不夠了,可以在MySQL執(zhí)行“ALTER TABLE sampletb MAX_ROWS=xxx AVG_ROW_LENGTH=xxx”命令,來擴大行所能容納的數(shù)量以及擴大索引所能包含的信息,其中的“xxx”為具體的數(shù)字。在執(zhí)行修復(fù)操作時,必須保證“mysqld”服務(wù)沒有使用到該表,為了穩(wěn)妥起見最高暫時關(guān)閉該服務(wù)。

如果不關(guān)閉該服務(wù)器的話,要先執(zhí)行“flush tables表名 with read lock”命令將其鎖定,防止兩者同時對其訪問。否則可能因為該服務(wù)和“Myisamchk”命令同時訪問讀寫目標(biāo)表,造成其出現(xiàn)損壞的情況。準(zhǔn)備好以上條件后,就可以執(zhí)行具體的修復(fù)動作了。

例如,先執(zhí)行“myisamchl-rq sampletb” 命 令,對“sampletb”表進行快速修復(fù)。如果失敗可以執(zhí)行“myisamchl -Br sampletb”命令,來修復(fù)數(shù)據(jù)本身。如果還失敗,執(zhí)行“myisamchl-o sampletb”命令,進行徹底修復(fù)。

其中的“-r”參數(shù)可以修復(fù)幾乎所有的問題,“-B”參數(shù)可以將“.MYD”文件備份為指定的文件,備份文件名稱中包含具體的時間。“-o”參數(shù)表示使用一個老的恢復(fù)方法按照順序讀取所有行,并根據(jù)找到的行更新所有的索引樹,該參數(shù)的修復(fù)速度是最慢的,其相當(dāng)于對表進行了遍歷?!?q”參數(shù)不修改數(shù)據(jù)文件,僅執(zhí)行快速修復(fù)操作,當(dāng)出現(xiàn)復(fù)制鍵時,可以兩次指定該項以強制“Myisamchk”命令修改原數(shù)據(jù)文件。該參數(shù)可以幫助用戶簡單的檢查表中數(shù)據(jù)損壞情況(例如索引文件出現(xiàn)問題,和表結(jié)構(gòu)有關(guān)的小問題等),并實現(xiàn)快速修復(fù)操作,其并不會修改“.MYD”文件中存儲的數(shù)據(jù),是一種比較安全的修復(fù)方式,不會破壞數(shù)據(jù)完整性。

修復(fù)損壞的數(shù)據(jù)表

在維護網(wǎng)站時,筆者有時會遇到是某個數(shù)據(jù)表損壞,造成數(shù)據(jù)讀寫出錯的情況,針對這一情況,完全可以使用“Myisamchk”命令進行修復(fù)。還以“sampletb”表為例進行說明,在MySQL命令行中執(zhí)行“check tables sampletb”命令,系統(tǒng)提示該表數(shù)據(jù)受損。當(dāng)執(zhí)行“flush tables sampletb with read lock;”命令,試圖對其鎖定,但是系統(tǒng)提示“ERROR 145(HY000)Table is marked as crashed and should be repaired”信息,說明其根本無法讀取,自然不必手工鎖定。返回Linux命令行,執(zhí)行“myisamchk sampletb”命令,對該表進行檢測,根據(jù)返回信息,可以查看具體的錯誤信息。執(zhí)行“myisamchk-Br sampletb”命令,就可以將其修復(fù)了。但是,在MySQL中對其查詢時,可能會發(fā)現(xiàn)有些數(shù)據(jù)丟失了,這就說明在很多情況下,單純依靠修復(fù)操作是無法找回數(shù)據(jù)的。

此外,當(dāng)索引表丟失后,也可以使用“Myisamchk”命令進行有效修復(fù)。例如先將“sampletb.MYD”文件移動到別的位置。在Linux命令行下 執(zhí) 行“touch sampletb.MYD” 和“touch sampletb.MYI”命令。來創(chuàng)建對應(yīng)的數(shù)據(jù)和索引文件。為了讓MySQL有權(quán)限對其進行處理,執(zhí) 行“chown mysql.Sampletb.*”命令,即可實現(xiàn)該要求。在MySQL命令行中執(zhí) 行“repair table sampletb use_frm;”命令,修復(fù)索引結(jié)構(gòu)。將“sampletb.MYD”復(fù)制回來,執(zhí) 行“myisamchk -r sampletb” 命 令, 對“sampletb”表進行修復(fù)。

猜你喜歡
命令行數(shù)據(jù)表命令
只聽主人的命令
湖北省新冠肺炎疫情數(shù)據(jù)表
黨員生活(2020年2期)2020-04-17 09:56:30
Windows 10新版CMD更新
基于列控工程數(shù)據(jù)表建立線路拓?fù)潢P(guān)系的研究
移防命令下達后
Linux系統(tǒng)下GRIB2格式GFS資料轉(zhuǎn)為GRIB1格式的方法詳解
這是人民的命令
圖表
基于VSL的動態(tài)數(shù)據(jù)表應(yīng)用研究
河南科技(2014年24期)2014-02-27 14:19:25
藍色命令
洪洞县| 濮阳县| 会宁县| 遂川县| 根河市| 荣昌县| 蒙阴县| 陵水| 苍山县| 阜平县| 广安市| 外汇| 潜江市| 梓潼县| 玛多县| 五大连池市| 苍溪县| 伊川县| 新郑市| 宁远县| 武陟县| 五原县| 班戈县| 仁寿县| 衡南县| 凌海市| 屏东市| 沙坪坝区| 安康市| 师宗县| 宜昌市| 扎兰屯市| 额敏县| 栾川县| 西畴县| 福海县| 晋中市| 涿州市| 乌兰浩特市| 丹阳市| 西藏|