听闻友站的不幸遭遇,决定还是先处理备份问题。
事情的起因是这样的。在 TDEH 发布的我的服务器被黑客勒索被厂商清空一文中,他的服务器由于服务提供商保护不力,所有的数据都水灵灵的丢失了。而这不禁让我望向我这个超级便宜的 hosting,很担心那一天他带着我的数据一起破产。因此决定用手头的工具设置定期备份。
计划是这样的:

通过设置 SSH,使用服务器提供的 rsync 工具备份文件并用 mysqldump 备份数据库到本地 NAS(已经是老生常谈的解决方案了)。然后在本地 NAS 中,设置定时任务,并通过 Hyper Backup 备份资料到 Google Drive(异地+1)。这样应该就能大大减少风险,那么说干就干。
NAS 的准备阶段
本人所使用的是 Synology NAS,因此自带了一些工具可以方便的配置。下面将会演示以 CLI 界面(通过 SSH)操作,也为了之后访问服务器更加方便。
首先,进入 DSM > Control Panel > Terminal & SNMP 的 Terminal 选项卡中,将 Enable SSH service 勾选。同意安全提示后,就可以使用终端来连接 NAS 了。
ssh <nasusername>@<nasip>连接成功后,你可以使用现有的备份目录,或者创建新的目录用来存放备份。我这里的演示是在此用户的根目录中创建了两个文件夹。
mkdir -p ~/backup/cpanel_sites/files
mkdir -p ~/backup/cpanel_sites/db然后生成用于访问远程 hosting 的 SSH Key。
ssh-keygen -t ed25519生成后,我们需要查看公钥的部分。通过一下命令完成。
cat ~/.ssh/id_ed25519.pub为了安全起见并符合部分 hosting 的安全合规,需要先给 SSH key 设置访问权限。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub然后,在 cPanel 中(或者你的任意其他管理软件),依次进入 SSH Access > Manage SSH Keys > Import Key。将刚刚显示的公钥粘贴到对应的文本框中,导入后并 Authorize。接下来,你就可以在 NAS 中通过 ssh 连接到你的 hosting。
ssh <yourhostingusername>@<hostingiporhost>如果成功连接,那么我们退回 NAS 测试一下:
rsync -avz \
--delete \
--include='public_html/***' \
--exclude='*' \
<yourhostingusername>@<hostingiporhost>:~/ \
~/backup/cpanel_sites/files/如果文件出现在了指定的文件夹中,那么备份测试就完成了(视 hosting 中的文件数量和大小)。
接下来我们测试数据库的备份,使用 mysqldump 命令来将数据打包并传回。
ssh <yourhostingusername>@<hostingiporhost> \
"mysqldump -u <yourdbuserrname> -p'<yourdbpassword>' <yourdbname> | gzip -c" \
> ~/backup/cpanel_sites/db/db_$(date +%F).sql.gz如果你也看到了新备份的 db 文件,我们就可以进入第一阶段收尾工作——设置脚本和定时执行。自动备份脚本的示例如下:
#!/bin/bash
DATE=$(date +%F)
REMOTE_USER="<hostingusername>"
REMOTE_HOST="<hostingiporhost>"
LOCAL_BASE="$HOME/backup/cpanel_sites"
mkdir -p ${LOCAL_BASE}/files
mkdir -p ${LOCAL_BASE}/db
rsync -avz \
--delete \
--include='public_html/***' \
--exclude='*' \
${REMOTE_USER}@${REMOTE_HOST}:~/ \
${LOCAL_BASE}/files/
ssh ${REMOTE_USER}@${REMOTE_HOST} \
"mysqldump -u <dbusername> -p'<dbpassword>' <dbname> | gzip -c" \
> ${LOCAL_BASE}/db/db_${DATE}.sql.gz
find ${LOCAL_BASE}/db/ -name "*.sql.gz" -mtime +14 -delete然后给予执行权限。
chmod +x ~/backup_cpanel.sh如果需要的话,可以手动测试脚本:
~/backup_cpanel.sh最后,需要进入 Synology Task Scheduler > Create > Scheduled Task > User-defined script。设置名称和时间后,在 Task Settings 的选项卡中设置 User-defined script:
{/path/to/your/}backup_cpanel.sh >> {/path/for/your/}backup.log 2>&1保存后,你可以右键单击刚创建的项目,然后点击 Run 来测试是否正常。也可通过查看 log 文件来确定是否有问题。
把文件同步到 NAS 后,我们就可以设置第三方备份了。首先下载 Hyper Backup,在弹出的提示中选择你的存储方式(我选了 Google Drive),设置好路径后就大功告成啦。
Copyright declaration
This post was written by JokerM.