mysql数据库怎么定时清空指定表的所有数据

mysql数据库怎么定时清空指定表的所有数据,第1张

清空单表可以truncate

清空某个库下的所有表时,可以考虑导出这张表,以导出表结构的方式,把该库下所有的表结构导出来,再删库,导回去就好了

mysqldump

-d

参数是只导结构,不导数据的

MySQL 5.1以后版本中有 Event ,这是类似Oracle中的job 可以通过创建Event,然后在里面调用删除过期记录的存储过程即可实现 定时每天备份mysql并定时删除上月记录(脚本) ouwsh | September 3, 2009 10:41 | Linux/Unix相关 | 阅读(1536) | 评论(0) shell脚本:

备份的脚本比较简单:

#!/bin/bash

# 定义年 月 日

year=`date +%Y`

month=`date +%m`

day=`date +%d`

# 定义备份的目录

BACKDIR=/bak_1/mysql/$year/$month/$day

# MySQL的root密码

ROOTPASS=123456

# 建立目录

mkdir -p $BACKDIR

# 获取数据库列表

DBLIST=`ls -p /var/lib/mysql | grep / | tr -d /`

# 备份

for dbname in $DBLIST

do

mysqlhotcopy $dbname -u root -p $ROOTPASS $BACKDIR | logger -t mysqlhotcopy

done

复制代码上面的脚本将数据库按"年/月/日"目录结构备份,将脚本存为back.sh添加到cron里每天凌晨3点执行

crontab -e

00 03 * * * root /root/back.sh

下面的是每月3号删除上个月的备份,存为del_bak.sh,每月3号3点3分执行

03 03 03 * * root /root/del_bak.sh

注意脚本上传后,要chmod一下权限,比如

chmod 755 /root/back.sh

#!/bin/bash

# 定义年 月 日

year=`date +%Y`

month=`date +%m`

#day=`date +%d`

# 取上一个月

month=`expr $month - 1`

# 如果是1月,则上一月为12,并且年也减1

if [ $month -eq 0 ]then

month=12

day=31

year=`expr $year - 1`

fi

# 因为备份时小于10月的月份有前导零,所以这里判断如果小于10月,则加前导零

if [ $month -lt 10 ]then

pre=0

fi

#获取要删除的目录名

BACKDIR=/bak1/mysql/$year/$pre$month

#删除了

rm -rf $BACKDIR

重新启动crond

/etc/rc.d/init.d/crond restart

mysql定时任务

自 MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由 *** 作系统的计划任务来执行的工作。更值得 一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而 *** 作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精 确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。

如:每隔30秒将执行存储过程test,将当前时间更新到examinfo表中id=14的记录的endtime字段中去.

CREATE PROCEDURE test ()

BEGIN

update examinfo SET endtime = now() WHERE id = 14

END

create event if not exists e_test

on schedule every 30 second

on completion preserve

do call test()

2. windows、linux 的定时任务 这个就不举例了,通过脚本定时去调用mysql执行


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7334006.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存