前兩天生産庫上出現了一個不大不小的故障,關于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,如需轉載請自行聯系原作者