MySQL定期自動刪除表
阿新 • • 發佈:2019-02-01
單位8億多條的日誌表,經過自動分表之後,需要自動刪除30天前建立的日誌表。
但是隻是在Master下線這些日誌表,而Slave還需要保持線上,以備查詢。
http://blog.itpub.net/29254281/viewspace-1141985/
由於Master-Slave結構,在Drop表之前,設定@@session.sql_log_bin=0,那麼Drop的行為就沒有記錄到binlog,所以Slave的日誌表就會被保留。
模擬環境如下,
配合Linux crontab即可實現定期自動刪除表的功能。
一定不要把sql_log_bin設定為global級別,不能犯迷糊
但是隻是在Master下線這些日誌表,而Slave還需要保持線上,以備查詢。
http://blog.itpub.net/29254281/viewspace-1141985/
由於Master-Slave結構,在Drop表之前,設定@@session.sql_log_bin=0,那麼Drop的行為就沒有記錄到binlog,所以Slave的日誌表就會被保留。
模擬環境如下,
- mysql> show tables;
- +---------------------------------+
- | Tables_in_edmond |
- +-------
- | sod_song_log_2014_1_22_13_18_20 |
- | sod_song_log_2014_2_22_13_18_20 |
- | sod_song_log_2014_3_22_13_18_20 |
- | sod_song_log_2014_4_22_13_18_20 |
- +---------------------------------+
- 4 rows in set (0.00 sec)
- delimiter $$
- CREATE procedure drop_table()
- BEGIN
- declare t_name varchar
- declare isFinished int default false;
- declare log_table_list cursor for (select table_name frominformation_schema.tables where table_schema ='EDMOND' and table_name like'sod_song_log_%');
- declare continue handler for not found set isFinished=true;
- open log_table_list
- repeat
- fetch log_table_list into t_name;
- if isFinished = false then
- if datediff(now(),replace(t_name,'sod_song_log_',''))>30 then
- set @@session.sql_log_bin=0;
- set @sqltext=concat('drop table ',t_name,';');
- PREPARE c_tab_stat from @sqltext;
- execute c_tab_stat;
- set @@session.sql_log_bin=1;
- end if;
- end if;
- until isFinished
- end repeat;
- close log_table_list;
- END $$
- delimiter ;
- mysql> call drop_table();
- Query OK, 0 rows affected (0.28 sec)
- mysql> show tables;
- +---------------------------------+
- | Tables_in_edmond |
- +---------------------------------+
- | sod_song_log_2014_4_22_13_18_20 |
- +---------------------------------+
- 1 row in set (0.00 sec)
- mysql> select now() from dual;
- +---------------------+
- | now() |
- +---------------------+
- | 2014-04-22 17:58:24 |
- +---------------------+
- 1 row in set (0.00 sec)
配合Linux crontab即可實現定期自動刪除表的功能。
一定不要把sql_log_bin設定為global級別,不能犯迷糊