萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> 數據庫綜合 >> MySQL定期自動刪除表的方法

MySQL定期自動刪除表的方法

我們為大家收集整理了關於MySQL定期自動刪除表,以方便大家參考。單位8億多條的日志表,經過自動分表之後,需要自動刪除30天前創建的日志表。

但是只是在Master下線這些日志表,而Slave還需要保持在線,以備查詢。

由於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(64);

declare isFinished int default false;

declare log_table_list cursor for (select table_name from information_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)

並且binlog中沒有記錄這個Drop的行為。

配合Linux crontab即可實現定期自動刪除表的功能。

一定不要把sql_log_bin設置為global級別,不能犯迷煳

希望大家可以學會MySQL定期自動刪除表.想了解更多精彩內容,請關注我們的網站!

相關推薦:

Mysql語句優化的方法 

想了解更多關於MySQL教程。請點擊精品學習網編程開發欄目!!

copyright © 萬盛學電腦網 all rights reserved