作为运维人员来讲,定期的业务数据备份是必不可少的工作,以便在出现问题时快速恢复数据,保证业务的连续性。
而定期的手动备份效率低而且还容易忘记,所以就写了个Shell脚本进行数据备份。
一、脚本介绍
脚本分归档与传输两个部分1、归档主要对tar命令数据进行打包;
2、数据库使用mysqldump备份到指定文件夹;
3、文件数据使用SCP进行数据的加密传输,为了安全起见数据只有客户端主动拉取。;
4、使用crontab定时执行脚本;
二、服务端归档脚本
#!/bin/bash
#网站数据备份脚本备份脚本
echo "========================================================Backup Time:`echo $(date +%Y-%m-%d_%H:%M:%S)`"
<
参数说明:
BAK_DIR 备份路径;
MYSQLDB 备份的数据库名称;
MYSQLUSR 数据库账号;
MYSQLPASS 数据库密码;
COMMENT
BAK_DIR=/opt/WEB_backup/`date +%Y%m%d`
MYSQLDB=wordpress
MYSQLUSR=root
MYSQLPASS=12345678
if [ $UID -ne 0 ];then
echo "Must to be user root for exec shell."
exit
fi
if [ ! -d $BAK_DIR ];then
mkdir -p $BAK_DIR
echo "$BAK_DIR Create successfully!"
else
echo "$BAK_DIR is exists..."
fi
#备份数据库
mysqldump -u$MYSQLUSR -p$MYSQLPASS $MYSQLDB > "$BAK_DIR"/"$MYSQLDB".sql
#备份网站文件
tar -czf `echo "$BAK_DIR/$MYSQLDB"`_WEB.tar.gz -C /home/wwwroot/ www.xxshell.com
#备份虚拟主机配置文件
cp /usr/local/nginx/www.xxshell.com.conf "$BAK_DIR"/www.xxshell.com.conf
#检测备份是否成功
[ -f "$BAK_DIR"/"$MYSQLDB".sql ] && echo "Backup Database OK!" ||echo "Backup Database failure!"
[ -f "$BAK_DIR"/"$MYSQLDB"_WEB.tar.gz ] && echo "Backup WEBFile OK!" ||echo "Backup WEBFile failure!"
[ -f "$BAK_DIR"/www.xxshell.com.conf ] && echo "Backup VhostFile OK!" ||echo "Backup VhostFile failure!"
#删除15天前的备份文件夹
find /opt/WEB_backup/* -type d -mtime +15 -exec rm -r {} \;
三、客户端备份脚本
#!/bin/bash
#网站备份下载脚本
echo "========================================================Backup Time:`echo $(date +%Y-%m-%d_%H:%M:%S)`"
<
参数说明:
HOSTNAME 要备份的主机(可以是IP地址);
SCP_PORT SSH端口或者传输数据端口;
HOSTUSR SSH用户名
Remote_DIR 要备份的远端路径
Local_DIR 备份的本地路径
注意!备份之前需要先配置与远端服务器免密,免密可以使用下面命令:
ssh-keygen -t rsa #生成公钥一直回车即可
ssh-copy-id -i .ssh/id_rsa.pub root@[主机名]
COMMENT
HOSTNAME=www.xxshell.com
SCP_PORT=22
HOSTUSR=root
Remote_DIR=/opt/WEB_backup
Local_DIR=/opt/
scp -r -P $SCP_PORT $HOSTUSRt@$HOSTNAME:$Remote_DIR/ $Local_DIR
#判断备份是否成功
[ $? -eq 0 ] && echo "Download success!" ||echo "Download failed!"
四、定时任务配置
#每周日2点执行归档脚本,并将结果追加到backup.log中
0 2 * * 0 /bin/bash /opt/WEB_backup/www.xxshell.com_wordpress_backup.sh >> /opt/WEB_backup/backup.log
#每周日3点执行备份脚本
0 3 * * 0 /bin/bash /opt/scp_download.sh >> /opt/WEB_backup/download.log
将crond服务启动并设置自启动
systemctl enable crond --now #启动并设置自启动给
systemctl is-active crond #检查服务是否启动
systemctl is-enabled crond #检查服务是否开机自启动
备份结果