mysql定时备份(Linux)

需求: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值