1. 程式人生 > >mysql中定時刪除N天前以時間命名的資料表

mysql中定時刪除N天前以時間命名的資料表

最近在做一個log管理。具體情形是這樣的,在mysql中每天產生一個log資料表,要求自動刪除N天前的資料表。之前對這方面沒什麼瞭解,查了很多資料,都是很抽象的從一個高度上講了講。在此,記錄一下實現過程,供有需要的童鞋參考。寫的可能有點笨拙,歡迎討論,共同提高~

實現過程中用到了mysql中的儲存過程(procedure)和定時器(event)。需要注意的是,mysql從5.1版本才開始支援定時器。

1、檢視mysql版本

mysql> select version();

2、檢視定時器開關

mysql> show variables like '%sche%';
+---------------------------------------------------+---------+
| Variable_name                                     | Value   |
+---------------------------------------------------+---------+
| event_scheduler                                   | ON      |
如果value值為OFF,可以這樣開啟:

set GLOBAL event_scheduler=1;

想關閉,只需設定為0即可。

3、建立測試用資料表

mysql> create table 2013_04_15
    -> (
    -> id int(11) not null auto_increment primary key,
    ->  time datetime not null
    -> );
我想刪除一年之前的資料表。

4、建立儲存過程

mysql> delimiter // mysql> drop procedure if exists del//

mysql> create procedure del()
    -> BEGIN 
    -> select date_format(DATE_SUB(now(),INTERVAL 1 YEAR),'%Y_%m_%d') into @tf;
    -> set @sql = concat('drop table if exists ',@tf);
    -> PREPARE stml FROM @sql;
    -> EXECUTE stml;
    -> END//
mysql> delimiter ; 註釋:
  1. 第一行delimiter //,設定mysql的定界符,預設是分號,即當以分號結束時,執行輸入的mysql命令。但有時不希望這樣,故需要重新定義界定符,本例中使用雙斜槓,注意再設定回來,上述最後一行sql語句即是。
  2. 第二行drop procedure if exists del//,判斷是否已經存在名為del的procedure。如果存在就刪除。
  3. 建立名為del的procedure。BEGIN起始,END結束。
  4. select date_format(DATE_SUB(now(),INTERVAL 1 YEAR),'%Y_%m_%d') into @tf;根據今天的日期,生成一年前的日期串,格式形如2013_04_15,存放在變數tf中。
  5. set @sql = concat('drop table if exists ',@tf);構造刪除表的sql語句。
  6. PREPARE stml FROM @sql;EXECUTE stml;執行sql語句。

5、建立定時器

mysql> drop event if exists del_event;
mysql> create event del_event
    -> on schedule every 3 minute(定時器執行的時間間隔,測試中,我使用的3分鐘)
    -> on completion preserve disable
    -> do call del();

6、上述定時器開啟與關閉

定時器的開啟 mysql> alter event del_event on completion preserve enable;
關閉定時器 mysql> alter event del_event on completion preserve disable;

相關推薦

mysql定時刪除N時間命名資料

最近在做一個log管理。具體情形是這樣的,在mysql中每天產生一個log資料表,要求自動刪除N天前的資料表。之前對這方面沒什麼瞭解,查了很多資料,都是很抽象的從一個高度上講了講。在此,記錄一下實現過程,供有需要的童鞋參考。寫的可能有點笨拙,歡迎討論,共同提高~ 實現過程中

[Linux] CentOS下面定時刪除N的檔案

伺服器上每天會定時備份資料庫和專案檔案包,時間久了備份檔案佔空間太大。寫一個shell指令碼每天定時刪除15天前的備份vi clear.py#!/bin/bashfind /mnt/sdb/backups -mtime +15 -name "*gz*" -exec rm -r

mysql定時備份資料庫和刪除N資料庫備份

前提,這裡使用 Ubuntu 16.04.4。 mysql定時備份數資料庫: 1.建立備份資料夾和指令碼檔案: mkdir -p /home/mysql_backup/ touch /home/mysql_backup/mysql_backup.sh 2.編輯指令碼檔案(m

【Windows】【MySQL】Windows下MySQL資料庫利用mysqldump定時備份並刪除N的備份資料

1.新建.bat檔案 內容如下: rem ******MySQL backup start******** @echo off set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%" if not exist "D:\backup\%Ymd%" m

linux系列之-—04 自動刪除n日誌

color nbsp 文件命令 ech 服務器硬盤 pat bin mtime 查找 linux是一個很能自動產生文件的系統,日誌、郵件、備份等。雖然現在硬盤廉價,我們可以有很多硬盤空間供這些文件浪費,讓系統定時清理一些不需要的文件很有一種爽快的事情。不用你去每天惦記著是否

Linux:自動刪除n日誌

1.刪除檔案命令: find 對應目錄 -mtime +天數 -name "檔名" -exec rm -rf {} \; 例項命令: find /opt/soft/log/&nb

python指令碼刪除n檔案可用於windows,linux並且支援跨平臺

指令碼如下: #!/usr/local/python/bin/python # -*-coding=utf8 -*- import time import os, sys # 設定刪除多少天前的檔案 N = 3 #要刪除路徑 path = r'/tmp/wry/abc' def deletefile(p

python刪除N檔案

python刪除N天前檔案 注: 檔案最近修改時間 :os.path.getmtime(file) 檔案建立時間:os.path.getctime(file) 檔案最近訪問時間:os.path.getatime(file) import os import sys imp

Linux shell 自動刪除n日誌

linux是一個很能自動產生檔案的系統,日誌、郵件、備份等。雖然現在硬碟廉價,我們可以有很多硬碟空間供這些檔案浪費,讓系統定時清理一些不需要的檔案很有一種爽快的事情。不用你去每天惦記著是否需要清理日誌,不用每天收到硬碟空間不足的報警簡訊,想好好休息的話,讓我們把這個事情交給機器定時去執行吧。  

linux系統定期刪除N的日誌

轉自:http://www.cnblogs.com/peida/archive/2013/03/25/2980121.html linux是一個很能自動產生檔案的系統,日誌、郵件、備份等。雖然現在硬碟廉價,我們可以有很多硬碟空間供這些檔案浪費,讓系統定時清理一些不需要的檔案很有一種爽快的

windows定時刪除15的檔案BAT

如果windows系統上有很多工在執行,會產生大量的資料檔案或者日誌檔案,而這些檔案很佔用磁碟空間,需要定時對其刪除, 1、Windows 下bat指令碼檔案:deleteFile.bat @echo off set srcDir="F:\zyc\test" set daysAgo=

用批處理檔案自動備份檔案及資料夾,並自動刪除n的檔案_DOS/BAT

下是備份的批處理,新增到”計劃任務”中,設定時間自動執行 程式碼如下: @echo off rem 格式化日期 rem date出來的日期是"2006-02-22 星期三",不能直接拿來使用,所以應該先格式化一下 rem 變成我們想要的。date

shell指令碼刪除N資料夾-----附linux和mac上date命令的不同

背景: 每日構建的東西,按日期放到不同的資料夾裡。如今天的構建放到2015-06-01裡,明天的就放到2015-06-02裡,依次類推。時間久了,需要一個指令碼刪除N天前的資料夾。(本例中N=7,即刪除一週前的構建)。 下面直

PowerShell匹配檔案刪除N或指定日期(前後)建立(或修改)的檔案

查詢 Get-ChildItem -Path D:\logstash-1.4.2\bin\*.mdmp -Recurse -ErrorAction:SilentlyContinue | ` Where-Object -FilterScript {(((get-date)

Linux應用總結:自動刪除n日誌

linux是一個很能自動產生檔案的系統,日誌、郵件、備份等。雖然現在硬碟廉價,我們可以有很多硬碟空間供這些檔案浪費,讓系統定時清理一些不需要的檔案很有一種爽快的事情。不用你去每天惦記著是否需要清理日誌,不用每天收到硬碟空間不足的報警簡訊,想好好休息的話,讓我們把這個事情交

Powershell: powershell刪除N的文件

write filename join pre admin -a 目錄 min -name 在C:\Users\Administrator\Desktop\temp1目錄下隨機建5個2019年前的文件並把他們刪除。:) $path="C:\Users\Administrat

linux定時備份MySQL數據庫並刪除的備份文件

/dev/ rdquo .sh 文件的 文件名 del l數據庫 blog 出錯 1、創建備份文件夾 #cd /bak#mkdir mysqldata 2、編寫運行腳本 #nano -w /usr/sbin/bakmysql.sh 註:如使用nano編輯此代碼需在每

Linuxfind命令配合rm刪除的檔案

語句寫法:find 對應目錄 -mtime +天數 -name "檔名" -exec rm -rf {} \; 例:將/var/log/目錄下所有180天前的檔案刪除   find /var/log/ -mtime +180 -exec rm -rf {} \; 例:將/var/lo

Mysql使用sql語句查詢一個一週、一月時間的方法

查詢一天:select * from 表名 where to_days(時間欄位名) = to_days(now());昨天SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 時間欄位名) <= 17天SELECT *

MYSQL Linux下自動備份並刪除7的舊備份 sh指令碼

# 資料庫使用者名稱 username=root # 資料庫密碼 password=******** # 需要備份的資料庫名 database=wbwy # 備份檔案到哪個路徑 path="/data"