前兩天生產庫上出現了一個不大不小的故障,關於MySQL 的存儲引擎問題。數據庫
這個故障所涉及到的是MySQL 4.1.20的版本MyISAM存儲引擎,一張1千多萬的表。ide
故障現象:日誌
在作簡單的SELECT查詢的時候沒有問題,可是作鏈接查詢或者其餘複雜查詢的時候就報錯了:具體的錯誤代碼因爲時間的問題被遺忘了。在系統日誌中記錄的錯誤以下圖:blog
從錯誤信息中能夠猜到了大概:存儲引擎出了問題。get
進到相應的數據庫目錄下,查看一下數據文件大小,有4G大小,這就不奇怪了.it
MySQL 4版本的數據庫建立的表默認最大文件大小就是4G 也就是說那個表滿了,沒法在插入數據了。其實版本4是支持超過4G數據文件大小的,須要在建立表的時候加上這麼一句話: MAX_ROWS=1000000000 AVG_ROW_LENGTH=15000 。table
執行myisamchk -dvv 表名字顯示屬性信息: class
而後更改表的最大文件大小file
alter table table_name MAX_ROWS=1000000000 AVG_ROW_LENGTH=15000;im
執行這個修改時間比較長,大約在幾個小時。
檢查修改結果:
其中:Datafile length 4095052564 =4G
Max datafile length 281474976710654 就遠遠超過G這個單位了。
MySQL 版本5默認已經支持 Max datafile length 281474976710654 就不用在建立表的時候添加MAX_ROWS=1000000000 AVG_ROW_LENGTH=15000 參數了。