重慶分公司
重慶分公司
MySQL定期自動(dòng)刪除表
單位8億多條的日志表,經(jīng)過自動(dòng)分表之后,需要自動(dòng)刪除30天前創(chuàng)建的日志表。但是只是在Master下線這些日志表,而Slave還需要保持在線,以備查詢。http://blog.itpub.net/29254281/viewspace-1141985/由于Master-Slave結(jié)構(gòu),在Drop表之前,設(shè)置@@session.sql_log_bin=0,那么Drop的行為就沒有記錄到binlog,所以Slave的日志表就會(huì)被保留。模擬環(huán)境如下,
-
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 rowsin set (0.00 sec)
過程如下:
-
delimiter $$
-
CREATE procedure drop_table()
-
BEGIN
-
declare t_namevarchar(64);
-
declare isFinishedint default false;
-
declare log_table_list cursorfor (select table_namefrom information_schema.tableswhere table_schema='EDMOND' and table_namelike'sod_song_log_%');
-
declare continue handlerfor not foundset isFinished=true;
-
open log_table_list;
-
repeat
-
fetch log_table_listinto t_name;
-
if isFinished= falsethen
-
ifdatediff(now(),replace(t_name,'sod_song_log_',''))>30then
-
set @@session.sql_log_bin=0;
-
set @sqltext=concat('drop table ',t_name,';');
-
PREPARE c_tab_statfrom @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;
執(zhí)行過程,結(jié)果如下
-
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 rowin set (0.00 sec)
-
-
mysql> select now() from dual;
-
+---------------------+
-
| now() |
-
+---------------------+
-
| 2014-04-22 17:58:24|
-
+---------------------+
-
1 rowin set (0.00 sec)
并且binlog中沒有記錄這個(gè)Drop的行為。
配合Linux crontab即可實(shí)現(xiàn)定期自動(dòng)刪除表的功能。
一定不要把sql_log_bin設(shè)置為global級別,不能犯迷糊
分享名稱:MySQL定期自動(dòng)刪除表
網(wǎng)頁鏈接:
http://weahome.cn/article/jgcogj.html
-
在線咨詢
微信咨詢
電話咨詢
-
028-86922220(工作日)
18980820575(7×24)
-
提交需求
-
返回頂部