MYSQL Truncate 引發資料表損壞案例分析

來源:互聯網
上載者:User

標籤:Truncate   innodb_file_per_ta   資料表損壞   

最近發布到市場的版本頻繁出現資料庫表損壞的情況,具體的現象是select表提示表不存在,但是查看data檔案,對應表的ibd和frm檔案都在。

通過對多個故障的統計,找到幾個頻繁出現損壞的表,在分析過程中,發現這些資料表都使用了truncate清除資料,所以懷疑是truncate操作的問題。

設計如下過程來驗證這個分析結果:

1、 建立預存程序如下,對一張表類比頻繁調用TRUNCATE

DROP PROCEDURE IF EXISTS prcTest5;
CREATE PROCEDURE prcTest5(in ic int)
BEGIN
declare i int;
set i=0;
while(i<5) DO
truncate table alarmtest5;
insert into alarmtest5 select * from port limit ic;
set i=i+1;
END WHILE;

END;

2、 使用SOAP UI建立壓力測試用例

發起的線程為5
測試時間間隔0.5s

3、 使用bat指令碼周期taskkill mysqld進程並重新啟動

@echo off
:loop
echo kill
taskkill /f /im mysqld.exe
echo RegMysqlServer
call RegMysqlServer.bat
call:sleep 20000
::調用方法call:sleep [毫秒] (1秒=1000毫秒)

goto loop

:sleep
set tmp="%temp%\tmp.vbs"
echo wscript.sleep %1>%tmp%&%tmp%&del %tmp%
goto :eof

4、 啟動測試,持續5-10分鐘,關閉測試,開啟資料庫,探索資料表損壞。

select * from alarmtest5;

提示表不存在,實際到data目錄下看,frm和ibd檔案都在。

5、 懷疑是多線程導致問題,將線程數降為1,運行5-10分鐘後,依然出現資料庫表損壞現象。
6、 將預存程序修改為使用DELETE語句,測試線程數5,沒有出現資料庫表損壞的情況。

DROP PROCEDURE IF EXISTS prcTest4;
CREATE PROCEDURE prcTest4(in ic int)
BEGIN
declare i int;
set i=0;
while(i<5) DO
delete from alarmtest4;
insert into alarmtest4 select * from port limit ic;
set i=i+1;
END WHILE;

END;
7、查看MySQL官方文檔,When a table is truncated, it is dropped and re-created in a new .ibd file,結合自測的情況,懷疑是我們每張表使用一個ibd檔案,TRUNCATE表是重建ibd檔案過程中mysql進程中斷,導致ibd檔案損壞。

7、 重新建立一個資料庫,將innodb_file_per_table = 1參數去掉,所有表共用一個ibd檔案。
重複上面的測試,運行15分鐘沒有出現資料庫表損壞的情況。

分析結論

innodb_file_per_table = 1,使用TRUNCATE會重新建立ibd檔案,如果這個過程中mysqld進程意外中斷,有很大機率出現資料庫表損壞的現象。

MYSQL Truncate 引發資料表損壞案例分析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.