艾克斯记事

Linux下整站自动备份方案

  如果你的站点选择了一个小运营商的主机,那么一定要做好备份工作,否则你一定会肠子都悔青了的,小型运营商的运维能力、灾备都是不行的,一旦出问题数据根本无法找回,只能自认倒霉;

数据库自动导出脚本

  通过定时执行脚本文件,每天将数据库导出,具体执行时间请根据网站流量情况决定,选择一个用户访问最少的时候来进行,本方案不适合大型站点;您可以将下面的代码复制到一个sh文件中;

新建文件 dbbackup.sh , 将下面的代码贴入:

#!/bin/sh
# 请注意,本脚本仅适合 root 无密码的MySQL数据库,请根据自己的实际情况修改脚本后使用
BACKUPPATH="/home/backup/db"
DBUSER="root"
DBNAME="XDIANNAOCOM"
DAY=`date +%F`
/usr/bin/mysqldump --opt -u$DBUSER   $DBNAME > $BACKUPPATH/$DAY.sql

给文件添加执行权限:

chmod +x ./dbbackup.sh

设置定时执行:

例如:每天2:10执行,将下列代码新增至 /etc/crontab

10 2 * * * root bash /home/dbbackup.sh

重启 crond 服务,加载定时任务(不同Linux发型版本下面的命令可能不一致)

systemctl restart cron

网站文件及数据库文件备份至本地或备份服务器

  这里我使用的syncthing将文件实时的备份到本地,或其他服务器上,syncthing这款软件无论是安装还是使用的很简单,这里就不赘述了,这里建议将服务器设置为只发送不接收,以避免备份服务器以外更改导致实时据异常;

一般我会将下列数据进行同步备份:

  • 网站程序及附件
  • 数据库
  • NGINX 配置文件
  • HTTPS证书
  • 应用程序及其配置文件

稳定性:目前此方案在一个项目中已经稳定运行了2年,平均每天同步数据500GB左右(还是比较消耗内存的)