Mysql 日誌表定時歸檔處理

2021-07-25 22:20:22 字數 905 閱讀 2575

資料庫有一張表資料量很大,真正web專案只用到乙個月內的資料,因此把乙個月前的舊資料定期歸檔。

1 - 建立乙個新錶,表結構和索引與舊表一模一樣

create table table_new like table_old;

2 - 新建儲存過程,查詢30天的資料並歸檔進新資料庫,然後把30天前的舊資料從舊表裡刪除

delimiter $

create procedure sp()

begin

insert into tb_new select * from table_old where rectime < now()  -  interval 30 day;

delete from db_smc.table_old where rectime < now() - interval 30 day;

end3 - 建立event,每天晚上凌晨00:00定時執行上面的儲存過程

create event if not exists event_temp 

on schedule every 1 day

on completion preserve

do call sp();

備註:第一次執行儲存過程的時候因為歷史資料過大, 可能發生意外讓該次執行沒有成功。重新執行時會遇到報錯error 1205 (hy000): lock wait timeout exceeded; try restarting transaction,應急解決方案如下:

1、執行show full processlist;檢視所有mysql執行緒

2、執行select * from information_schema.innodb_trx\g; 檢視是否有錯誤執行緒,執行緒id在show full processlist;的結果中狀態為sleep

3、kill 程序id 

mysql 歸檔日誌 頻繁產生歸檔日誌處理報告

頻繁產生歸檔日誌處理報告 2017年10月27日,客戶資料庫突然間頻繁產生大量歸檔日誌,導致資料庫hang住,影響現場生產!由於oracle歸檔日誌一般由dml語句產生,所以增加太快應該是dml太頻繁。首先查詢以下每小時連線日誌切換頻率的情況 select to char first time,yy...

mysql按月歸檔日誌表

由於日誌表越來越大,資料將近1億,查資料非常慢,因此使用事件每月28日呼叫儲存過程自動建立歸檔表,將上月資料按照create time欄位和id欄位插入歸檔表並刪除原表相應資料。delimiter create definer root localhost procedure clear log b...

mysql 歸檔日誌 Oracle歸檔日誌總結

1.開啟歸檔日誌 sqlplus as sysdba sql shutdown immediate sql startup mount 開啟控制檔案,不開啟資料檔案 sql alter database archivelog 將資料庫切換為歸檔模式 sql alter database open 將...