之前从来没想过认认真真建个站,现在费劲心血写了些文章,数据安全的问题也要提上日程了。
备份方案
搜索了一番,备份方案大概有这几种:
- 系统镜像
- Docker
- 备份数据库和程序文件
系统镜像可以在云服务器和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
欢迎转载,请注明出处:闪电树熊 » WordPress程序文件和Mysql数据库整站备份方案