这篇文章主要讲一下如何把网站的重要数据和数据库自动定时备份到群晖上,白群和黑群都适用!如果你的NAS不是群晖,没有同步套件可用,你也可以通过在NAS上搭建FTP,以此也可以达到同样的效果。
一、安装同步服务
通过SSH登录网站所在服务器后复制如下命令并运行,即可自动安装同步服务。不同系统命令有所不同,对号入座。
CentOS系统:
sudo yum install rsync
Debian或者Ubuntu 系统:
sudo apt install rsync
如果无法执行上面的安装命令,那么建议更新下你服务器的系统环境,在终端下执行以下命令:
yum install epel-release #CentOS
apt install epel-release #Debian或Ubuntu
二、群晖套件安装设置
群晖套件安装
服务器上安装好高同步服务后,进入群晖后台,打开群晖套件中心,找到Active Backup for Business套件,点击安装即可。
文件服务器配置
- 安装好之后点击打开套件,点击左侧文件服务器 > 添加服务器,选择rsync服务器,然后下一步;
- 然后填写你的服务器登录信息,连接模式选择通过SSH连接至rsync shell模式,其他的根据你的服务器登录信息填写完成即可(端口号一般默认是22,如果你修改过端口就填写你修改之后的端口号)。
添加备份任务
文件服务器创建好之后,系统会自动弹出来是否要创建备份任务的提示!
如果你已经确定你的服务器备份目录了这里可以选择是,没有确定备份目录的话可以选择否。(后面可以通过文件服务器 > 任务列表 > 创建,创建新的备份任务)
- 进入文件服务器备份创建向导后,选择多版本;
- 备份源就是服务器上你存备份文件的目录(比如:/home/backup);
- 任务名称随便填,本地路径就是备份的文件存到NAS的路径,勾选启用计划,以实现定期的自动同步备份文件,高级设置里面根据自己的需求选择填写,一般默认就好了;
- 保留策略,这里建议设置为保留最新的N个版本,基本足够用了,如果你有其他特殊的需求也可以根据自身情况设置;
配置完成之后同样会弹出是否立即备份的通知,这里我们选择“否”;如果你的服务器上已经有备份好的文件了,点击“是”也可以。
三、服务器设置自动备份
如果你是自定义安装的服务器环境(非宝塔类面板),那么可以通过以下脚本进行打包备份网站和数据库:(把下面的代码另存为 backup.sh,已经做好中文注释了)
#!/usr/bin/env bash
# 备份文件存放路径
Backup_Home="/home/backup/"
# MySQL dump 命令路径
MySQL_Dump="/usr/local/mysql/bin/mysqldump"
# 待备份的目录
Backup_Dir=("/home/wwwroot/网站1" "/home/wwwroot/网站2") # 改成自己网站的路径
# 待备份的数据库名
Backup_Database=("数据库1" "数据库2")
# MySQL 用户名和密码
MYSQL_UserName='root'
MYSQL_PassWord='数据库密码'
# 是否启用FTP备份
Enable_FTP=1
# 0: 启用; 1: 禁用
# FTP信息设置
FTP_Host='1.2.3.4'
FTP_Username='dz9.net'
FTP_Password='yourftppassword'
FTP_Dir="backup"
# 以下为变量设置
# 当日网站文件备份文件名
TodayWWWBackup=www-*-$(date +"%Y%m%d").tar.gz
# 当日数据库备份文件名
TodayDBBackup=db-*-$(date +"%Y%m%d").sql
# 三天前的网站文件备份文件名
OldWWWBackup=www-*-$(date -d -3day +"%Y%m%d").tar.gz
# 三天前的数据库备份文件名
OldDBBackup=db-*-$(date -d -3day +"%Y%m%d").sql
# 备份目录函数
Backup_Dir()
{
Backup_Path=\$1
Dir_Name=`echo ${Backup_Path##*/}`
Pre_Dir=`echo ${Backup_Path}|sed 's/'${Dir_Name}'//g'`
tar zcf ${Backup_Home}www-${Dir_Name}-$(date +"%Y%m%d").tar.gz -C ${Pre_Dir} ${Dir_Name}
}
# 备份数据库函数
Backup_Sql()
{
${MySQL_Dump} -u$MYSQL_UserName -p$MYSQL_PassWord \$1 > ${Backup_Home}db-\$1-$(date +"%Y%m%d").sql
}
# 检查mysqldump命令是否存在
if [ ! -f ${MySQL_Dump} ]; then
echo "mysqldump command not found.please check your setting."
exit 1
fi
# 如果备份目录不存在,则创建
if [ ! -d ${Backup_Home} ]; then
mkdir -p ${Backup_Home}
fi
# 如果启用FTP备份,检查lftp命令是否存在
if [ ${Enable_FTP} = 0 ]; then
type lftp >/dev/null 2>&1 || { echo >&2 "lftp command not found. Install: centos:yum install lftp,debian/ubuntu:apt-get install lftp."; }
fi
echo "Backup website files..."
for dd in ${Backup_Dir[@]};do
Backup_Dir ${dd}
done
echo "Backup Databases..."
for db in ${Backup_Database[@]};do
Backup_Sql ${db}
done
echo "Delete old backup files..."
rm -f ${Backup_Home}${OldWWWBackup}
rm -f ${Backup_Home}${OldDBBackup}
# 如果启用FTP备份,上传备份文件到FTP服务器
if [ ${Enable_FTP} = 0 ]; then
echo "Uploading backup files to ftp..."
cd ${Backup_Home}
lftp ${FTP_Host} -u ${FTP_Username},${FTP_Password} << EOF
cd ${FTP_Dir}
mrm ${OldWWWBackup}
mrm ${OldDBBackup}
mput ${TodayWWWBackup}
mput ${TodayDBBackup}
bye
EOF
echo "complete."
fi
上面代码根据自己服务器的情况做修改,默认备份指定网站源码和数据库,如果需要FTP上传备份的可以把变量修改为0,并配置FTP服务器信息,其他不需要的功能也可以注释掉(注意:脚本编码格式注意UTF-8格式)。
修改好之后通过FTP把脚本上传到服务器上(我这里上传到/root目录下)。
最后添加定时执行上面的脚本,通过SSH连接网站服务器后执行下面的命令:
crontab -e
打开之后,在最后粘贴如下代码,以添加一个自动化任务:
0 3 */1 * * /root/backup.sh
代码解释:每隔1天(每天)凌晨3点执行存储在/root目录下的backup.sh脚本。
完成以上步骤就可以实现服务器定期自动打包备份数据,群晖自动同步备份文件的操作了。
四、宝塔面板备份同步
宝塔面板备份网站数据更简单,不需要手写备份脚本和定时任务,一切后台操作就可以了;只要确认群晖套件里面的备份源路径和宝塔的备份目录一致就可以了。