免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 若水
打印 上一主题 下一主题

Mysql数据每5分钟自动备份到新表并删除原有数据? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-06-22 21:17 |只看该作者
把表重命名,再新建个

论坛徽章:
0
12 [报告]
发表于 2010-06-22 23:05 |只看该作者
每5分钟备份一次log表?然后把log表清空吗???


#!/bin/bash
T=$(date +"%k:%M:%S"
/usr/local/my ...
小木虫子 发表于 2010-06-22 09:48



这样写会不会是个安全漏洞呢~?

论坛徽章:
0
13 [报告]
发表于 2010-06-23 10:32 |只看该作者
是一种实现方法,但肯定不是最好的实现方法。

论坛徽章:
0
14 [报告]
发表于 2010-06-23 11:33 |只看该作者
本帖最后由 justin033 于 2010-06-23 11:35 编辑

这种方法应该很多的,如下我的脚本:

  1. #!/bin/sh
  2. #
  3. # By Justin
  4. #
  5. # Archive the carrierDB email_package table in every week.
  6. #
  7. #
  8. #Setting
  9. RT_name="root"
  10. RT_pwd=""
  11. RT_sock="/data02/mysql/mysql.sock"

  12. ORI_table="email_package"
  13. ARC_table="email_package$(date +%Y%m%d)"

  14. # execute SQL
  15. /usr/local/mysql/bin/mysql -u${RT_name} -p${RT_pwd} -S${RT_sock} << EOF

  16. use carrierDB_0;

  17. create table if not exists carrierDB_0.${ARC_table} like carrierDB_0.${ORI_table};

  18. insert into carrierDB_0.${ARC_table} select * from carrierDB_0.${ORI_table} where task_status_id = 3 and create_time < date_sub(now(), interval 7 day);

  19. delete from carrierDB_0.${ORI_table} where task_status_id = 3 and create_time < date_sub(now(), interval 7 day);

  20. quit

  21. EOF
复制代码
然后在crontab定时就行了。。。用mysql event也行的

论坛徽章:
0
15 [报告]
发表于 2010-06-23 16:47 |只看该作者
这种方法应该很多的,如下我的脚本:然后在crontab定时就行了。。。用mysql event也行的
justin033 发表于 2010-06-23 11:33



    有性能问题,可以考虑异步的方式成。

推荐: cenalulu的方法
随后可以把原来的数据归档。

论坛徽章:
0
16 [报告]
发表于 2010-06-23 17:48 |只看该作者
主要LZ这环境的表DML太频繁了,5分钟一次很可怕

最优的方法在程序里实现的,在间隔时间后创建新的表,把新的数据往新的表插入。。。

论坛徽章:
0
17 [报告]
发表于 2010-06-25 08:49 |只看该作者
感谢各位大侠的回复。由于实验环境出了点问题,还没有做出实验。WEB网站程序是别的公司编写的,我没有办法去修改,现只能在已有的数据库里统计相关的信息。

论坛徽章:
0
18 [报告]
发表于 2010-06-28 11:11 |只看该作者
本帖最后由 若水 于 2010-06-28 11:20 编辑

实验做了。脚本如下:
操作系统平台是bsd
#!/bin/sh

T=$(date +"%k:%M:%S")
mysqldump -u root -p12345 flow record >log_$T.sql
mysql -u root -p12345 -e "use flow;truncate table record;"

运行后能满足要求。统计一下,在高峰时,每秒钟有1000多条记录。已经修改为20分分钟备份一次。谢谢各位大侠的帮助

论坛徽章:
0
19 [报告]
发表于 2010-06-28 12:07 |只看该作者
#!/bin/sh
T=$(date +"%k%M%S")
#mysqldump -u root -p12345 flow record >/usr/home/lyl/DBbak/log_$T.sql
mysql -u root -p12345 -e "use flow;create table record$T as select * from record
;truncate table record;"
这个脚本是复制到新表,并删除了原来的表。

论坛徽章:
0
20 [报告]
发表于 2010-07-19 16:15 |只看该作者
本帖最后由 有行动才会有收获 于 2010-07-19 16:16 编辑

6楼 cenalulu 的方法好
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP