MySQL备份 规格严格

在ChinaUnix找到一个不错的帖子,把其中的脚本整理一下:

#!/bin/bash
# 记录时间
T=$(date +"%k:%M:%S")
# 这种是备份表数据到文件中,同时删除原表数据
mysqldump -u root -p12345 flow record >log_$T.sql
# 但是这样是否中途有数据损失不好说
mysql -u root -p12345 -e "use flow;truncate table record;"
# 这种是备份到辅助表中
mysql -u root -p12345 -e "use flow;create table record$T as select * from record
;truncate table record;
" 
# 理论来说这种最好
mysql -u root -p12345 -e "use flow; create table log_temp like logs;
rename table logs to log_xxxx, log_temp to logs;
"
# 然后再把数据导出来
------------------------------------------------------
crontab -e 或者 vi /etc/crontab

*/5 * * * * bak.sh
  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

这个性能不好,对了,除了用CRON外,也可以使用MYSQL EVENT

原文地址:https://www.cnblogs.com/diyunpeng/p/2277056.html