搭建个人博客,数据才是最重要的。因此备份就成为了一件极其重要的操作。 可以使用云服务商提供的镜像/自动备份功能(收费) ,但是可以使用其他方式来完成此操作。
绝大部分的个人用户都会把博客建立在虚拟主机或者ECS
中,用户的所有数据都存放在由他们托管的服务器上,那就难免会出现不可抗力因素导致的硬件损坏,数据丢失及异常。
本文环境在未特殊声明时默认为 CentOS 7.5
备份服务器
安装 vsFTP 服务
安装 epel 源
# yum install epel-release -y
安装 vsftpd
# yum install vsftpd -y
配置开机自启动
# systemctl enable vsftpd
配置备份用户
# useradd backup
配置 FTP 服务器
修改程序配置文件为以下内容
# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
建立限制列表文件(此处用户名以backup
为例)
# cat /etc/vsftpd/chroot_list
backup
目标服务器
编写备份脚本
小贴士:因不同产品备份的目录及所需备份的内容不同,因此此部分内容仅供参考格式与方法,内容请酌情修改。
# vim /usr/scripts/backup.sh
推荐养成一个好习惯,将脚本与备份单独存放在固定目录,防止出现问题,也方便记忆。
例如本站的备份脚本,如下:
#!/usr/bin/env bash
# Auto Backup Script for Web Server Only Against RadHat / CentOS
# Content include NGINX WEBFILE PHP MySQL/MariaDB
# Author by Kane [kaneyou@qq.com]
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
# Global Variable
TIME=$(date +%y%m%d)
NODE=$(hostname -I | awk '{print $1}')
BAKPATH="/usr/backups"
LOGFILE="/var/log/backup.log"
TARFILE="${TIME}-DATA-${NODE}"
# DataBase Variable
DBNAME="name"
DBUSER="root"
DBPASS="Password"
DUMPPATH="/tmp"
# OpenSSL Variable
PASSWD="Password"
# Detect Path Available
if [ ! -d ${BAKPATH} ]; then
mkdir -p ${BAKPATH}
fi
# Log Function
log() {
echo -e "$(date "+%Y-%m-%d %H:%M:%S")" "$1" >> $LOGFILE
}
# Export DataBase To Local
mysqldump -u$DBUSER -p$DBPASS $DBNAME > $DUMPPATH/$DBNAME.sql
# Tar Backup File
tar cfjp ${BAKPATH}/${TARFILE}.bz2 \
/var/www/ \
/var/spool/cron/root \
/etc/nginx/nginx.conf \
/etc/nginx/conf.d/ \
/etc/nginx/ssl/ \
/etc/php.ini \
/etc/php-fpm.d/www.conf \
/usr/scripts/ \
$DUMPPATH/$DBNAME.sql \
>/dev/null 2>&1
if [ $? -eq 0 ]; then
rm -rf $DUMPPATH/$DBNAME.sql && rm -rf $DUMPPATH/$DBNAME.md5
log "File Page of Tar Success!"
else
log "File Page of Tar Failed!"
echo "$(date '+%b %d %T') $(hostname | awk -F "." '{print $1}') bash"["$PPID"]":(CRON) INFO (backup running error)" >> /var/log/cron
fi
# Encrypt Backup File
# Use Follow Command to Decrypt
# openssl enc -aes-256-cbc -in crypted.enc -out decrypted.tgz -pass pass:[backup password] -d -md sha1
openssl enc -aes-256-cbc -in "${BAKPATH}/${TARFILE}.bz2" -out "${BAKPATH}/${TARFILE}.enc" -pass pass:"$PASSWD" -md sha1
if [ $? -eq 0 ];then
find ${BAKPATH}/ -type f -name "*.bz2" -exec rm -rf {} \;
log "File Encrypt Success!"
else
log "File Encrypt Failed!"
exit 1
fi
脚本中的变量部分请自行修改。
变量 | 含义 |
---|---|
DBNAME | 要备份的数据库名 |
DBUSER | 数据库用户名 |
DBPASS | 数据库密码 |
PASSWD | 加密备份文件的密码 |
BAKPATH | 备份文件的存放路径 |
LOGFILE | 日志文件的存放路径 |
编写推送脚本
# vim /usr/scripts/transport.sh
推送脚本例子如下:
#!/usr/bin/env bash
# Auto Transport Script for Web Server
# Use sFTP Method
# Author by Kane [kaneyou@qq.com]
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
TIME=$(date +%y%m%d)
NODE=$(hostname -I | awk '{print $1}')
BAKPATH="/usr/backups"
FTPS="IP"
FTPU="username"
RSA="~/.ssh/id_rsa"
# Detect Path Available
if [ ! -d ${BAKPATH} ]; then
exit 1
fi
# Transport File
sftp -i $RSA $FTPU@$FTPS << EOF
cd recent/
put ${BAKPATH}/${TIME}-* .
quit
EOF
if [ $? -ne 0 ]; then
exit 2
fi
脚本中的变量部分请自行修改。
变量 | 含义 |
---|---|
FTPS | 备份服务器的IP或者域名 |
FTPU | 备份服务器的用户名 |
配置 RSA 密钥
建立 RSA 密钥
[root@domain ~]# ssh-keygen -t rsa -C diracsvip@gmail.com
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:hPQrLx+0di/WU5dfmQhTpZgnggsscXxoYrEXERkMcFY waveworkshop@outlook.com
The key's randomart image is:
+---[RSA 2048]----+
| ..**EB .. |
| oo=B.+. o.. |
| .oo+o.o. +.o |
| o .....oo |
| ..S o . +|
| + . ..+o|
| . = .. . .o|
| + oo.o .|
| .. ... |
+----[SHA256]-----+
注意:-C 指定密钥的说明,可以用于辨识,推荐使用邮箱。
[root@domain ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub backup@ip/domain
注意:backup
为备份账户用户名ip/domain
为备份机地址或域名
配置定时任务
crontab -e
写入定时任务
0 0 * * * /bin/bash /usr/scripts/backup.sh > /dev/null 2>&1
注意:务必在目标主机上先手动执行一次脚本进行测试,并触发 RSA
密钥信任,以防定时任务脚本执行失败。*
附录
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2018-09-01 18:41 PM