english簡體中文繁體中文UTF8中文  設為主頁   收藏我們  幫助 
 
首頁 企業 服務 家政 二手 工作 商店 新聞 博覽 交友 車友 論壇 博客 相冊 軟件 健康 報價
   帳號: 密碼:   忘記密碼   注冊會員
推薦商品
十二月 2007
« 十一月   Jan »
 12
3456789
10111213141516
17181920212223
24252627282930
31  
BLOG最新評論

mysql數據庫受到破壞的修復

歸類︰ 電腦網絡阿Q | 2007年12月16日 @ 10:36 pm (閱讀: 1297)

修復數據表

多數情況下,數據庫被破壞只是指索引文件受到了破壞,真正的數據被破壞掉的情況非常少。大多數形式的數據庫破壞的的修復相當簡單。
和前面的校驗一樣,修復的方式也有三種。

下面講的方法只對MyISAM格式的表有效。其他類型的損壞需要從備份中恢復。

1。REPAIR TABLE SQL statement(mysql服務必須處于運行狀態)。
2。命令mysqlcheck(mysql服務可以處于運行狀態)。
3。命令myisamchk(必須停掉mysql服務,或者所操作的表處于不活動狀態)。

在修復表的時候,最好先作一下備份。所以你需要兩倍于原始表大小的硬盤空間。請確保在進行修復前你的硬盤空間還沒有用完。

1>用”repair table”方式修復
語法︰repair table 表名 [選項]
選項如下︰
QUICK 用在數據表還沒被修改的情況下,速度最快
EXTENDED 試圖去恢復每個數據行,會產生一些垃圾數據行,萬般無奈的情況下用
USE_FRM 用在.MYI文件丟失或者頭部受到破壞的情況下。利用.frm的定義來重建索引

多數情況下,簡單得用”repair table tablename”不加選項就可以搞定問題。但是當.MYI文件丟失或者頭部受到破壞時,這樣的方式不管用,例如︰
mysql> REPAIR TABLE fixtures;
+————————-+——–+———-+———————————————+
| Table | Op | Msg_type | Msg_text |
+————————-+——–+———-+———————————————+
| sports_results.fixtures | repair | error | Can’t find file: ‘fixtures.MYI’ (errno: 2) |
+————————-+——–+———-+———————————————+

修復失敗的原因時索引文件丟失或者其頭部遭到了破壞,為了利用相關定義文件來修復,需要用USE_FRM選項。例如︰
mysql> REPAIR TABLE fixtures USE_FRM;
+————————-+——–+———-+————————————+
| Table | Op | Msg_type | Msg_text |
+————————-+——–+———-+————————————+
| sports_results.fixtures | repair | warning | Number of rows changed from 0 to 2 |
| sports_results.fixtures | repair | status | OK |
+————————-+——–+———-+————————————+

我們可以看到Msg_test表項的輸出信息”ok”,表名已經成功修復受損表。

2>用mysql內建命令mysqlcheck來修復
當mysql服務在運行時,也可以用mysql內建命令mysqlcheck來修復。
語法︰mysqlcheck -r 數據庫名 表名 -uuser -ppass
%mysqlcheck -r sports_results fixtures -uuser -ppass
sports_results.fixtures OK

利用mysqlcheck可以一次性修復多個表。只要在數據庫名後列出相應表名即可(用空格隔開)。或者數據庫名後不加表名,將會修復數據庫中的所有表,例如︰

%mysqlcheck -r sports_results fixtures events -uuser -ppass
sports_results.fixtures OK
sports_results.events OK

%mysqlcheck -r sports_results -uuser -ppass
sports_results.fixtures OK
sports_results.events OK

3>用myisamchk修復
用這種方式時,mysql服務必須停掉,或者所操作的表處于不活動狀態(選項skip-external-locking沒被使用)。記著一定要在相關.MYI文件的路徑下或者自己定義其路徑。
語法︰myisamchk [選項] [表名]
下面是其選項和描述
–backup, -B 在進行修復前作相關表得備份
–correct-checksum 糾正校驗和
–data-file-length=#, -D # 重建表時,指定數據文件得最大長度
–extend-check, -e 試圖去恢復每個數據行,會產生一些垃圾數據行,萬般無奈的情況下用
–force, -f 當遇到文件名相同的.TMD文件時,將其覆蓋掉。
keys-used=#, -k # 指定所用的keys可加快處理速度,每個二進制位代表一個key.第一個key為0
–recover, -r 最常用的選項,大多數破壞都可以通過它來修復。如果你的內存足夠大,可以增大
參數sort_buffer_size的值來加快恢復的速度。但是遇到唯一鍵由于破壞而不唯一
的表時,這種方式不管用。
–safe-recover -o 最徹底的修復方式,但是比-r方式慢,一般在-r修復失敗後才使用。這種方式讀出 所有的行,並以行為基礎來重建索引。它的硬盤空間需求比-r方式稍微小一點,因 為它沒創建分類緩存。你可以增加key_buffer_size的值來加快修復的速度。
–sort-recover, -n mysql用它類分類索引,盡管結果是臨時文件會非常大
–character-sets-dir=… 包含字符集設置的目錄
–set-character-set=name 為索引定義一個新的字符集
–tmpdir=path, -t 如果你不想用環境變量TMPDIR的值的話,可以自定義臨時文件的存放位置
–quick, -q 最快的修復方式,當數據文件沒有被修改時用,當存在多鍵時,第二個-q將會修改 數據文件
–unpack, -u 解開被myisampack打包的文件

myisamchk應用的一個例子

% myisamchk -r fixtures
- recovering (with keycache) MyISAM-table ‘fixtures.MYI’
Data records: 0

標簽:

相關文章:

發表評論

抱歉,您必須登錄後才可以發表評論。


TAG標簽:

Google Linux MPX mysql Paypal SIGMA tar 安溪 安裝 貝寶 蔡氏古民居 狄恩.卡門 電腦網絡 俄羅斯方塊 發明 法學園地 公司企業 共享 孤單 官橋 海灘 喝麻 紅塔灣 後深溪 互聯網 惠女水庫 教育學習 經濟金融 鏡頭 開源運動 科學技術 老家 理財 路由器 旅游自然 碼表 密碼 女兒 女人 皮膚病 清源山 泉州小吃 日志 森林公園 山地車 少兒樂園 社會文化 社團 生活資訊 收款 手機 手術 數據 雙絞線 獺窟 體育競技 土耳其烤肉歌 外匯 維基 文學世界 我想我不夠愛你 無題 無線 西格瑪 廈門 新年 新聞出版 幸福 雪峰寺 醫藥健康 醫院 藝術之窗 隱私 硬盤 游泳 有情人終成眷屬 娛樂休閑 樟腳 祝福 賺錢

  版權說明| 隱私保護| 網站地圖| 天氣預報| 記事日歷| 友情鏈接| 關于我們| 聯系我們
 閩ICP備05016518號 Powered by qzsq © 2004-2008 泉州社區服務信息 WAP RSS