Mysql
MySQL表反复崩潰
我有 xen 虛擬機(在 PV 模式下穩定的 Debian),我有 Joomla。一天中有好幾次我在我的網站首頁看到這條消息。
jtablesession::Store Failed DB function failed with error number 144 Table './database@002enet/hfd_session' is marked as crashed and last (automatic?) repair failed SQL=INSERT INTO `hfd_session` ( `session_id`,`time`,`username`,`gid`,`guest`,`client_id` ) VALUES ( 'iae9qhmfhst464v4d0a6ho6nt3','1330628728','','0','1','0' )
我找不到它崩潰的原因。
mysql.log 和 mysql.err 日誌一目了然。mysql慢日誌裡只有一些記錄,但是好像和這張表沒有關聯。只有這張桌子在崩潰。
我嘗試刪除此表並再次創建它,重新啟動系統並使用 fsck 檢查磁碟(沒有錯誤)。但是我還是遇到了這個崩潰,而且每次看到都需要手動修復。
有沒有辦法解決這個問題?
$ dpkg -l | grep mysql ii libdbd-mysql-perl 4.016-1 Perl5 database interface to the MySQL database ii libmysqlclient16 5.1.49-3 MySQL database client library ii mysql-client-5.1 5.1.49-3 MySQL database client binaries ii mysql-common 5.1.49-3 MySQL database common files, e.g. /etc/mysql/my.cnf ii mysql-server 5.1.49-3 MySQL database server (metapackage depending on the latest version) ii mysql-server-5.1 5.1.49-3 MySQL database server binaries and system database setup ii mysql-server-core-5.1 5.1.49-3 MySQL database server binaries ii php5-mysql 5.3.3-7+squeeze3 MySQL module for php5
我們處理崩潰的mysql表相當多,所以很少有關於嘗試的建議。
首先,嘗試刪除表,重新啟動 mysql,然後重新添加表。這將讓它完全重新創建表並修復任何潛在的結構錯誤。或者,修復表後跟 flush_tables 可以工作,但我們發現它沒有那麼高的成功率。
如果這不起作用,請嘗試將表移動到完全在記憶體中的表。從 InnoDB 或 MyISM 切換到 MEMORY,看看它是否仍然崩潰。請注意,此表不會在重新啟動後維護結果,但由於它是一個會話表,因此不會影響您。這樣做的原因是,當系統/數據庫檢查點發生時,較慢的磁碟會像損壞表一樣進行大型查詢。我還沒有看到這方面的完全相關性,但在每種情況下,更快的伺服器不會在接近我們慢速伺服器的次數的任何地方出錯。鑑於這是一個虛擬機,磁碟速度慢有時可能是一個問題。
最後一件事是啟用完整的 mysql 查詢日誌。這會影響性能,所以要小心。這裡的想法是跟踪哪個查詢最後成功,哪個查詢失敗。如果你捕捉到足夠多的失敗,你就會看到一個模式。如果您可以可靠地重現崩潰,那麼您就遇到了 MySQL 錯誤。希望你沒有達到這一點:)