天天看點

MySQL的MyISAM存儲引擎修複及修改最大檔案大小

 前兩天生産庫上出現了一個不大不小的故障,關于MySQL 的存儲引擎問題。

這個故障所涉及到的是MySQL 4.1.20的版本MyISAM存儲引擎,一張1千多萬的表。

故障現象:

在做簡單的SELECT查詢的時候沒有問題,但是做連接配接查詢或者其他複雜查詢的時候就報錯了:具體的錯誤代碼由于時間的問題被遺忘了。在系統日志中記錄的錯誤如下圖:

<a target="_blank" href="http://blog.51cto.com/attachment/201205/001019499.jpg"></a>

從錯誤資訊中可以猜到了大概:存儲引擎出了問題。

進到相應的資料庫目錄下,檢視一下資料檔案大小,有4G大小,這就不奇怪了.

MySQL 4版本的資料庫建立的表預設最大檔案大小就是4G 也就是說那個表滿了,無法在插入資料了。其實版本4是支援超過4G資料檔案大小的,需要在建立表的時候加上這麼一句話: MAX_ROWS=1000000000 AVG_ROW_LENGTH=15000 。

執行myisamchk -dvv    表名字顯示屬性資訊: 

<a target="_blank" href="http://blog.51cto.com/attachment/201205/100210349.jpg"></a>

然後更改表的最大檔案大小

alter table  table_name  MAX_ROWS=1000000000 AVG_ROW_LENGTH=15000;

執行這個修改時間比較長,大約在幾個小時。

檢查修改結果:

<a target="_blank" href="http://blog.51cto.com/attachment/201205/102311759.jpg"></a>

其中:Datafile length   4095052564  =4G

  Max datafile length  281474976710654  就遠遠超過G這個機關了。

MySQL 版本5預設已經支援 Max datafile length  281474976710654  就不用在建立表的時候添加MAX_ROWS=1000000000 AVG_ROW_LENGTH=15000 參數了。

     本文轉自andylhz 51CTO部落格,原文連結:http://blog.51cto.com/andylhz2009/870640,如需轉載請自行聯系原作者