MySQL定期自動刪除表
單位8億多條的日誌表,經過自動分表之後,需要自動刪除30天前建立的日誌表。
但是隻是在Master下線這些日誌表,而Slave還需要保持線上,以備查詢。
http://blog.itpub.net/29254281/viewspace-1141985/
由於Master-Slave結構,在Drop表之前,設定@@session.sql_log_bin=0,那麼Drop的行為就沒有記錄到binlog,所以Slave的日誌表就會被保留。
模擬環境如下,
過程如下:
執行過程,結果如下
並且binlog中沒有記錄這個Drop的行為。
配合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(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)
配合Linux crontab即可實現定期自動刪除表的功能。
一定不要把sql_log_bin設定為global級別,不能犯迷糊
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1147167/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何定期自動刪除歸檔日誌
- 指令碼定期自動刪除ASM下的歸檔檔案指令碼ASM
- MySQL自動備份指令碼30天自動刪除MySql指令碼
- Mysql--Linux Mysql定期自動備份MySqlLinux
- mysql 動態新建以及刪除分割槽表MySql
- MySQL刪除資料表MySql
- mysql binlog日誌自動清理及手動刪除MySql
- 利用find來定期刪除檔案
- [MYSQL][1]建立,修改,刪除表MySql
- MySQL批量刪除指定字首表MySql
- [轉] MySQL binlog 日誌自動清理及手動刪除MySql
- MySQL大表刪除解決方案MySql
- mySql刪除多個表 刪除多個欄位的SQLMySql
- 定期刪除歸檔檔案的指令碼指令碼
- DophinScheduler 如何定期刪除日誌例項?
- Windows定期自動關機Windows
- 【MySQL】批量刪除mysql中資料庫中的表MySql資料庫
- mysql 跨表查詢、更新、刪除示例MySql
- MySQL如何優雅的刪除大表MySql
- mysql表刪除重複記錄方法MySql
- MySQL超大表刪除資料過程MySql
- 遠端Linux伺服器MySQL資料庫定期備份和刪除Linux伺服器MySql資料庫
- SQL Server定期自動備份SQLServer
- mysql支援跨表delete刪除多表記錄MySqldelete
- MYSQL下如何安全的快速刪除大表MySql
- mysql 刪除表中重複的資料MySql
- vscode自動刪除行尾空格VSCode
- 簡單介紹mysql如何刪除資料表和關聯的資料表刪除詳情MySql
- pt-archiver實現MySQL定期分表HiveMySql
- MyBatis實現MySQL表欄位及結構的自動增刪MyBatisMySql
- MySQL資料庫表誤刪除恢復(一)MySql資料庫
- 利用PHP指令碼刪除MySQL上所有的表PHP指令碼MySql
- MySQL通過Binlog恢復刪除的表MySql
- 如何刪除資料庫下的所有表(mysql)資料庫MySql
- 做實驗驗證MongoDB刪除文件後索引是否會自動刪除MongoDB索引
- crontab不能自動刪除歸檔日誌
- oracle dataguard 自動刪除歸檔日誌Oracle
- 如何實現 Logstash/Elasticsearch 與MySQL自動同步 更新操作 和 刪除操作 ?ElasticsearchMySql