需求:1.每个小时全量备份一次数据库。
2.数据库服务器只保留一天的备份文件(保留24份备份.sql)
3.每天凌晨3点把最新备份文件上传到其他服务器。
上面的需求分二部走:
第一步:每小时备份一次并删除24小时前文件。
在linux h 输入:crontab -e
内容:1 * * * * /data/mysql_backup_script/mysql_backup.sh
mysql_backup.sh文件内容:
# File: /data/mysql_backup_script/mysql_backup.sh
# Database info
DB_NAME="mydb"
# Others vars
# whereis mysqldump
# IS ` but not '
BIN_DIR="/usr/local/mysql/bin"
BCK_DIR="/var/mysql_dump/data"
DATE=`date +%Y%m%d_%H`
# TODO
mkdir -p $BCK_DIR
rm -f $BCK_DIR/$DB_NAME.dump_$DATE.sql.gz
$BIN_DIR/mysqldump $DB_NAME | gzip > $BCK_DIR/$DB_NAME.dump_$DATE.sql.gz
#Delete the previous day
OLD_DATE=`date -d -24hour +%Y%m%d_%H`
rm -f $BCK_DIR/$DB_NAME.dump_$OLD_DATE.sql.gz
你可能会问题怎么不用输入mysql的用户名密码呢??
是这样的,mysql5.5以后为了提高安全性不能将密码输入到脚本文件中。否则执行脚本时会报错。所以我们可以设置mysql的配置文件。dump时指定用户名和密码:
my.cnf:
[mysqldump]
quick
user=root
password=root
第二部:每天凌晨3点将最新的备份文件上传到其他服务器:
在linux输入:
crontab -e
内容:
3 3 * * * /data/mysql_backup_script/scp_backup.sh
scp_backup.sh文件内容:
#!/bin/sh
DATE=`date +%Y%m%d_%H`
DB_NAME="mydb"
BCK_DIR="/var/mysql_dump/data"
BACK_SERVER="root@192.168.0.101"
BACK_SERVER_DIR="/var/mysql_dump/"
BACK_SERVER_PORT="22"
scp -P $BACK_SERVER_PORT $BCK_DIR/$DB_NAME.dump_$DATE.sql.gz $BACK_SERVER:$BACK_SERVER_DIR
采用的是Linux的scp命令来完成的。
细心的你可能又发现怎么没让输入远程服务器的密码就能把文件拷贝过去呢。
这里说明下:用的是ssh免密。关于ssh免密设置参考:
http://blog.csdn.net/wind520/article/details/38421359