先给一个简单的测试Demo
------------------------------------------------------------------------------------------------------------------------------------
#!/bin/sh
bak_path=/data/xtrabackup
date_now=`date +%Y%m%d`
date_dep=`date -d "-1 week " +%Y%m%d`
cd $bak_path
pwd
echo "================Backup database=====================">>log
if [ -d $date_dep ]; then
echo "`data +%F%H%M%S` Remove depricated folder $date_dep.">>log
rm -rf $date_dep
fi
if [ ! -d $date_now ] ; then
mkdir $date_now
fi
cd $date_now
echo "`date +%F%H%M%S ` Begin to back db">>../log
/usr/local/mysql/bin/mysqldump -ucjr -pcjr -h39.108.108.46 -P3306 --single-transaction --master-data=2 test1 t1|gzip >test1.t1.sql.gz
echo "`date +%F%H%M%S ` Finish to backup db">>../log
------------------------------------------------------------------------------------------------------------------------------------
一、 简介
本文档介绍在linux如何使用crontab+shell+scp的方式,部署mysql数据库数据7天定期备份,包括本机备份和远程服务器备份,保证数据安全性。
二、 本机备份数据库
1、 编写shell脚本
# vi db_bak.sh
2、 输入内容如下
#!/bin/sh
bak_path=/usr/local/dbbak # 数据库数据文件备份目录
date_now=`date +%Y%m%d` # 当前日期
date_dep=`date -d "-1 week" +%Y%m%d` # 7天前日期
cd $bak_path
echo "================Backup database================" >> log
if [ -d $date_dep ]; then
echo "`date '+%F %H:%M:%S'` Remove deprecated folder $date_dep." >> log
rm -rf $date_dep # 删除7天前备份数据
fi
if [ ! -d $date_now ]; then
mkdir $date_now # 创建当前日期备份数据文件夹
fi
cd $date_now
echo "`date '+%F %H:%M:%S'` Begin to backup testdb1." >> ../log
mysqldump -utest -ptest --opt --default-character-set=utf8 testdb1|gzip > testdb1.sql.gz # 使用mysqldump备份testdb1数据库实例并压缩成gzip格式,test为数据库登录用户名和密码
echo "`date '+%F %H:%M:%S'` Finish to backup testdb1." >> ../log
echo "`date '+%F %H:%M:%S'` Begin to backup testdb2." >> ../log
mysqldump -utest -ptest --opt --default-character-set=utf8 testdb2|gzip > testdb2.sql.gz # 使用mysqldump备份testdb2数据库实例并压缩成gzip格式,test为数据库登录用户名和密码
echo "`date '+%F %H:%M:%S'` Finish to backup testdb2." >> ../log
echo "" >> ../log
3、 输入“:wq”保存退出
4、 为db_bak.sh文件增加执行权限
# chmod 777 db_bak.sh
5、 使用root用户在crontab中增加定时任务
# vi etc/crontab
6、 在crontab最后面增加如下task
01 3 * * * root ./usr/local/dbbak/db_bak.sh # 每天早上的3点01分执行此任务
7、 重启crontab
# /etc/init.d/crond restart
8、 检验
等第二天或者把执行时间改到当前时间后1分钟,看是否执行
三、 远程拷贝数据库备份文件
1、 先配置好两台服务器scp不需要密码,具体如何配置可以百度下,此处不再赘述
2、 创建shell脚本,并拷贝内容如下
#!/bin/sh
bak_path=/usr/local/dbbak # 数据库数据文件备份目录
date_now=`date +%Y%m%d` # 当前日期
date_dep=`date -d "-1 week" +%Y%m%d` # 7天前日期
server=192.168.0.150 # 数据库备份文件所在服务器
port=22 # scp端口
user=test # scp用户
cd $bak_path
echo "========================Backup database========================" >> log
if [ -d $date_dep ]; then
echo "`date '+%F %H:%M:%S'` Remove deprecated folder $date_dep." >> log
rm -rf $date_dep # 删除7天前备份数据
fi
if [ ! -d $date_now ]; then
mkdir $date_now # 创建当前日期备份数据文件夹
fi
cd $date_now
echo "`date '+%F %H:%M:%S'` Begin to copy db backup files from server $server." >> ../log
scp -P $port $user@$server:/$bak_path/$date_now/*.gz .
echo "`date '+%F %H:%M:%S'` Finish to copy db backup files." >> ../log
echo "" >> ../log
3、 在crontab增加如下定时task,并重启crontab
# 01 5 * * * root ./usr/local/dbbak/rcp.sh # 注意执行时间应该比数据库服务器备份文件慢
4、 检验
等第二天或者把执行时间改到当前时间后1分钟,看是否执行