在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
# 记录时间
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
- #!/bin/sh
- #
- # By Justin
- #
- # Archive the carrierDB email_package table in every week.
- #
- #
- #Setting
- RT_name="root"
- RT_pwd=""
- RT_sock="/data02/mysql/mysql.sock"
- ORI_table="email_package"
- ARC_table="email_package$(date +%Y%m%d)"
- # execute SQL
- /usr/local/mysql/bin/mysql -u${RT_name} -p${RT_pwd} -S${RT_sock} << EOF
- use carrierDB_0;
- create table if not exists carrierDB_0.${ARC_table} like carrierDB_0.${ORI_table};
- 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);
- delete from carrierDB_0.${ORI_table} where task_status_id = 3 and create_time < date_sub(now(), interval 7 day);
- quit
- EOF
这个性能不好,对了,除了用CRON外,也可以使用MYSQL EVENT