Mysql数据定期自动备份和删除

时间:2022-09-13 23:40:39
现在的mysql太大了,已经严重影响查询速度了。现在想实现一个方案,就是:
每个月对超过两年的历史数据进行导出备份,然后从数据库中删除超过两年的数据,想请教大家有什么算法可以实现啊 
由于刚接触mysql,上面又催的急,能否贴个procedure出来,谢谢啊

9 个解决方案

#1


问题补充:是每个月定时执行一次,shell脚本该怎么写

#2


可以用linux的计划任务crontab 或者 mysql本身的event来实现

#3


引用 2 楼 josy 的回复:
可以用linux的计划任务crontab 或者 mysql本身的event来实现
谢谢啊,现在纠结的是脚本内容或者event内容不会啊,主要数据是三张大表,里面都有时间字段的

#4


建议每天删除点

#5


引用 3 楼 bfckop 的回复:
引用 2 楼 josy 的回复:

可以用linux的计划任务crontab 或者 mysql本身的event来实现
谢谢啊,现在纠结的是脚本内容或者event内容不会啊,主要数据是三张大表,里面都有时间字段的

用.sql文件来实现啊...
将脚本写在sql文件中,然后linux定期执行此sql文件
E:\test.sql
show databases;
CMD
D:\>mysql -u root -pabcdefg -hlocalhost < E:\test.sql
用同样的方法,在Linux上建立一个sql(假设创建在/home目录下的 backup.sql),之后
vi /etc/crontab
在最后一行添加
30 4 1 * * root cd /home && mysql -u root -pyourpswd -h localhost < backup.sql
保存退出
这样每月1号的4点半就会自动执行/home/backup.sql这个脚本了
至于sql脚本内容,你就把他当成是在mysql命令行下输入命令就可以了

#6


http://topic.csdn.net/u/20091020/22/c51bb709-6dbc-4fd1-b874-077714ed547e.html
另征集定时执行mysql数据库任务方案。

#7


引用 3 楼 bfckop 的回复:
引用 2 楼 josy 的回复:

可以用linux的计划任务crontab 或者 mysql本身的event来实现
谢谢啊,现在纠结的是脚本内容或者event内容不会啊,主要数据是三张大表,里面都有时间字段的

假如你描述的时间字段是datetime类型的,字段名称是t,你可以这样
mysqldump 若干参数 where="TO_DAYS(NOW())-TO_DAYS(t)>730"
然后delete
然后在import

优化:可以穿件一个timstamp列,保存datetime的unix_timestamp值,然后给这个建一个索引,整个过程会快很多。

#8


用MYSQL的EVENT,直接把数据插入到另外一个备份库,然后删除掉本身。

#9


1、用MYSQL自己的EVENT;
2、用语言编制程序,在系统的任务中调用 
MYSQLDUMP --add-drop-database -uroot -B -E -R -p123 ZZ>r:\temp\123.TXT

#1


问题补充:是每个月定时执行一次,shell脚本该怎么写

#2


可以用linux的计划任务crontab 或者 mysql本身的event来实现

#3


引用 2 楼 josy 的回复:
可以用linux的计划任务crontab 或者 mysql本身的event来实现
谢谢啊,现在纠结的是脚本内容或者event内容不会啊,主要数据是三张大表,里面都有时间字段的

#4


建议每天删除点

#5


引用 3 楼 bfckop 的回复:
引用 2 楼 josy 的回复:

可以用linux的计划任务crontab 或者 mysql本身的event来实现
谢谢啊,现在纠结的是脚本内容或者event内容不会啊,主要数据是三张大表,里面都有时间字段的

用.sql文件来实现啊...
将脚本写在sql文件中,然后linux定期执行此sql文件
E:\test.sql
show databases;
CMD
D:\>mysql -u root -pabcdefg -hlocalhost < E:\test.sql
用同样的方法,在Linux上建立一个sql(假设创建在/home目录下的 backup.sql),之后
vi /etc/crontab
在最后一行添加
30 4 1 * * root cd /home && mysql -u root -pyourpswd -h localhost < backup.sql
保存退出
这样每月1号的4点半就会自动执行/home/backup.sql这个脚本了
至于sql脚本内容,你就把他当成是在mysql命令行下输入命令就可以了

#6


http://topic.csdn.net/u/20091020/22/c51bb709-6dbc-4fd1-b874-077714ed547e.html
另征集定时执行mysql数据库任务方案。

#7


引用 3 楼 bfckop 的回复:
引用 2 楼 josy 的回复:

可以用linux的计划任务crontab 或者 mysql本身的event来实现
谢谢啊,现在纠结的是脚本内容或者event内容不会啊,主要数据是三张大表,里面都有时间字段的

假如你描述的时间字段是datetime类型的,字段名称是t,你可以这样
mysqldump 若干参数 where="TO_DAYS(NOW())-TO_DAYS(t)>730"
然后delete
然后在import

优化:可以穿件一个timstamp列,保存datetime的unix_timestamp值,然后给这个建一个索引,整个过程会快很多。

#8


用MYSQL的EVENT,直接把数据插入到另外一个备份库,然后删除掉本身。

#9


1、用MYSQL自己的EVENT;
2、用语言编制程序,在系统的任务中调用 
MYSQLDUMP --add-drop-database -uroot -B -E -R -p123 ZZ>r:\temp\123.TXT