WordPress程序文件和Mysql数据库整站备份方案

之前从来没想过认认真真建个站,现在费劲心血写了些文章,数据安全的问题也要提上日程了。

备份方案

搜索了一番,备份方案大概有这几种:

  1. 系统镜像
  2. Docker
  3. 备份数据库和程序文件

系统镜像可以在云服务器和vps的控制台上操作,整个系统都会被备份,使用起来比较方便,但是如果在一台机器上建有多个网站,就不是很合适了。

Docker需要在建网站的时候就用Docker镜像来做,备份出来的文件也会比较大,不适合我。

备份数据库和程序文件比较适合大多数人,我也选择了这种方案。

备份位置

备份应该做到异地,我正好有一台用于NAS的家庭服务器闲置,备份到它上面非常完美。

配置SSH免密登录远程主机

密码登录是不安全的,我们配置免密登录。可以参考这篇文章,如何配置Linux系统SSH免密码登录

创建mysql远程访问用户

我们需要把数据库导出来,为了安全考虑,单独创建一个只读的可远程访问数据库的用户。可以参考这篇文章,Mysql5.7创建和删除用户,并配置远程访问权限

备份脚本

这个脚本参考了这篇文章,wordpress备份方案和备份脚本

#!/bin/bash

# 请修改这些变量的值
# 网站服务器ip
IP=
# 网站程序目录,例如/data/wwwroot/tlanyan
WEBDIR=
# Mysql数据库用户名
DBUSER=
# Mysql数据库密码
DBPASS='xxxxxx'
# 数据库名字
DBNAME=
# 备份路径
BACKUPDIR=
# 备份保留天数
EXPIRE_DAYS=14

# 创建备份目录
mkdir -p ${BACKUPDIR}/db
mkdir -p ${BACKUPDIR}/tar
mkdir -p ${BACKUPDIR}/files
if [ ! -f ${BACKUPDIR}/db ]; then
    echo "无法创建备份目录"
    exit 1
fi

# 备份数据库
DBFILE=${DBNAME}-`date +\%Y\%m\%d\%H\%M\%S`.sql.gz
ssh root@${IP} "mysqldump --single-transaction -u${DBUSER} -p${DBPASS} ${DBNAME} | gzip > ~/${DBFILE}"
scp root@${IP}:~/${DBFILE} ${BACKUPDIR}/db/
ssh root@${IP} "rm -fr ~/${DBFILE}"

# 备份程序文件
rsync -avP --delete-after root@${IP}:${WEBDIR} ${BACKUPDIR}/files/

# 归档程序
day=`date +\%u`
tar -czPf ${BACKUPDIR}/tar/`date +\%Y\%m\%d`.tar.bz2 ${BACKUPDIR}/files

# 删除过期备份
find ${BACKUPDIR}/db -mtime +${EXPIRE_DAYS} -exec rm -rf {} \;
find ${BACKUPDIR}/tar -mtime +${EXPIRE_DAYS} -exec rm -rf {} \;

注意脚本中如果有特殊字符要转义,比如数据库密码包含&,%这样的要写成/&,/%

如果ssh的端口号不是默认的ssh,scp后面增加端口号参数,分别是-p xxx和-P xxx,rsync也要指定端口-e ‘ssh -p xxx’,其中xxx就是端口号。

把这个脚本命名为domain-back.sh,修改权限为可执行

chmod 755 domain-abck.sh

配置定时任务

编辑/etc/crontab 文件,写定时任务,我这里每天0点备份一次

0 0 * * *  root bash /root/domain-abck.sh

重启下定时任务服务,我这里用的是ubuntu系统,命令如下

service cron restart

 

欢迎转载,请注明出处:InfoLiquify » WordPress程序文件和Mysql数据库整站备份方案

赞 (1) 打赏

评论

4+3=

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏