Linuxlinux安装数据库服务器mysql数据库7天备份方案和脚本
一、简介
本文档介绍在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 > # 使用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 > # 使用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分钟,看是否执行

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。