久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何進行MySQL修復表的簡單分析

150次閱讀
沒有評論

共計 3327 個字符,預計需要花費 9 分鐘才能閱讀完成。

如何進行 MySQL 修復表的簡單分析,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

今天有個同事問我一個數據庫的問題,如果開始他就把環境細節全都告訴我,可能我就知難而退了。等我大體明白了問題之后,發現好像背景比我想的要復雜多了。這是一個遠程云主機環境,windows 系統,運行著 MySQL, 在查詢表時出現了問題,而且開發同事經過了 repair 也沒有修復,說會卡住沒有響應。

當然費了一點功夫,好容易連接到了這臺云主機,發現問題似乎比我想的還要復雜一些。當然這是一個內部某一個團隊使用的一個環境,可能是確實需要用到環境,大家才不得不想辦法修復。

  環境是 MySQL 5.5 版本,查看后臺日志發現從 8 月份就開始有錯誤了,錯誤信息如下:

161018 11:15:35 [ERROR] D:\websoft\mysql\bin\mysqld: Table .\utestdb\test_forum_post is marked as crashed and should be repaired
161018 11:15:36 [ERROR] D:\websoft\mysql\bin\mysqld: Table .\utestdb\test_forum_post is marked as crashed and should be repaired 而且看日志損壞的還不止一張表,我的注意力暫時先放在了出錯的表上。

如果使用 show create table  test_forum_post 或者 desc test_forum_post 都會拋出錯誤。

mysql show create table test_forum_post;
ERROR 145 (HY000): Table .\utestdb\test_forum_post is marked as crashed and should be repaired

更讓我有些膽戰心驚的是,我可以從后臺的日志看到開發同事也嘗試了多次重啟 MySQL 服務。但是問題始終存在。

show create table 得不到信息,而 show table status 得到的信息也很有限,因為此時的存儲引擎顯示為 NULL

他們用的是 MyISAM, 查看了其它所有的表的存儲引擎,發現清一色都是 MyISAM. 所以我就可以基本斷定這個出問題的表也是 MyISAM

對于 MyISAM 表修復,可以用 myisamchk 來做或者使用 repair 的方式都可以,當然發現又是碰到不少問題。

D:\websoft\mysql\bin myisamchk.exe -of ..\data\utestdb\test_forum_post.MYI
這個命令運行下去,竟然彈出了一個窗口顯示程序崩潰,反復嘗試都是如此。

使用 repair 命令來看,發現遲遲沒有返回,果斷停止。

肯定是哪里漏掉了,我重新翻過頭來梳理問題。

查看日志發現之前有下面的一些輸出,看起來是磁盤空間的問題。

161219 18:07:09 [Warning] Disk is full writing
.\distoon\pre_common_block.TMD (Errcode: 28). Waiting for someone to
free space… (Expect up to 60 secs delay for server to continue after
freeing disk space)
161219 18:07:09 [Warning] Retry in 60 secs. Message reprinted in 600 secs
161219 18:07:18 [ERROR] D:\websoft\mysql\bin\mysqld: Table .\utestdb\test_forum_post is marked as crashed and should be repaired

經過確認發現確實是磁盤空間導致,他們馬上清理預留出一些空間,然后讓我繼續幫忙修復,再次嘗試就沒有問題了。

先使用 -of 選項

D:\websoft\mysql\bin myisamchk.exe -of ..\data\utestdb\test_forum_post.MYI
– recovering (with keycache) MyISAM-table ..\data\utestdb\test_forum_post.MYI
Data records: 0
Data records: 55311

接著使用 - r 選項修復

D:\websoft\mysql\bin myisamchk.exe -r ..\data\utestdb\test_forum_post.MYI
– recovering (with sort) MyISAM-table ..\data\utestdb\test_forum_post.MYI
Data records: 55311
– Fixing index 1
– Fixing index 2
– Fixing index 3
– Fixing index 4
– Fixing index 5
– Fixing index 6
– Fixing index 7
– Fixing index 8

最后匯總檢查

D:\websoft\mysql\bin myisamchk.exe  ..\data\utestdb\test_forum_post.MYI
Checking MyISAM file: ..\data\utestdb\test_forum_post.MYI
Data records:  55311  Deleted blocks:  0
– check file-size
– check record delete-chain
– check key delete-chain
– check index reference
– check data record references index: 1
– check data record references index: 2
– check data record references index: 3
– check data record references index: 4
– check data record references index: 5
– check data record references index: 6
– check data record references index: 7
– check data record references index: 8
– check record links 再次查看問題就不存在了。

當然如果嘗試使用 repair 也是可行的, 比如修復表 pre_common_member,輸出如下:

mysql repair table pre_common_member;
+—————————-+——–+———-+———-+
| Table  | Op  | Msg_type | Msg_text |
+—————————-+——–+———-+———-+
| utestdb.pre_common_member | repair | status  | OK  |
+—————————-+——–+———-+———-+
1 row in set (1.64 sec)

為了把問題補充全面一些,我把問題略微改動下,即 使用 myisamchk 工具和 check/repair 命令有什么區別呢.

首先 myisamchk 和 repair 只能修復 MyISAM 表,相比來說,myisamchk 的輸出信息要更詳細一些,優化,分析表的信息都會輸出,repair 則比較直接,repair 無法修復 InnoDB 的表,否則會報出如下的錯誤。

The storage engine for the table doesn t support repair

check 則同時支持 MyISAM 表和 InnoDB 表

其次 myisamchk 操作 myisam 表時必須保證表不能被使用,check/repair 則可以在線操作。

看完上述內容,你們掌握如何進行 MySQL 修復表的簡單分析的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-19發表,共計3327字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 含山县| 天长市| 中西区| 通化市| 德昌县| 宁河县| 高碑店市| 维西| 浏阳市| 嘉荫县| 西城区| 栾城县| 兴义市| 涞水县| 利川市| 宁晋县| 青浦区| 得荣县| 巴里| 根河市| 铜鼓县| 昭觉县| 桐梓县| 高阳县| 环江| 宝山区| 伊川县| 县级市| 武宣县| 海南省| 光山县| 商丘市| 九江县| 霸州市| 灵武市| 阿坝县| 北票市| 霍城县| 天峨县| 原平市| 宁陕县|