作为运维人员来讲,定期的业务数据备份是必不可少的工作,以便在出现问题时快速恢复数据,保证业务的连续性。
而定期的手动备份效率低而且还容易忘记,所以就写了个Shell脚本进行数据备份。
一、脚本介绍
脚本分归档与传输两个部分
1、归档主要对tar命令数据进行打包;
2、数据库使用mysqldump备份到指定文件夹;
3、文件数据使用SCP进行数据的加密传输,为了安全起见数据只有客户端主动拉取。;
4、使用crontab定时执行脚本;
二、服务端归档脚本
#!/bin/bash #网站数据备份脚本备份脚本 echo "========================================================Backup Time:`echo $(date +%Y-%m-%d_%H:%M:%S)`" <<'COMMENT' 参数说明: 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)`" <<'COMMENT' 参数说明: 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 #检查服务是否开机自启动