主机上运行了一些服务,虽然都不是很重要,但数据还是有备份的必要,文件类的可以直接复制备份,数据库也可以手动备份,有自动化脚本则减轻了负担。WebServerAutoBackup项目可以完成这个任务。

项目:ehaut/WebServerAutoBackup/

已实现功能:

  • 自动备份网站和数据库到本地
  • 自动记录日志到文件
  • 自动删除三天前的备份文件和日志
  • 备份脚本和配置文件分离(通过ini解析引擎解析外置config.ini)
  • 自动判断机器类型,下载相应的云上传工具
  • 自动将备份文件上传到云并和本地同步删除

    原理:

  • 通过ini解析引擎bash-ini-parser解析用户配置文件config.ini
  • 通过mysqldump导出数据库
  • zip压缩备份
  • 备份日志通过echo和tee同时显示屏幕和输出到文件

config.ini内容

###################################################################
####################  Your Server Info Config  ####################
####################    备份脚本的配置文件     ####################

#------------------------------------------------------------------
#配置文件填写说明
#Tip: You can edit it like this:
#[WWWROOT_CONFIG]
#WWWROOT=/home/wwwroot  //需要备份的目录
#If you have multiple wwwroot,you can set it like this:
#WWWROOT=/home/wwwroot1 /home/wwwroot2  //多个目录中间用空格隔开
#------------------------------------------------------------------
[WWWROOT_CONFIG]
WWWROOT_DIR=/www/wwwroot 

#------------------------------------------------------------------
#[MYSQL_CONFIG]
#MYSQL_BACKUP_ALL=yes/no //是否备份实例上所有数据库? yes:备份所有数据库; no:备份指定数据库
#MYSQL_DBS=dbname
#If you have multiple databases,you can set it like this:
#MYSQL_DBS=dbname1 dbname2  //数据库名字,多个数据库中间用空格隔开
#MYSQL_PASSWD=123456  //数据库密码
#MYSQL_USER=root  //数据库用户名
#MYSQL_SERVER=127.0.0.1  //数据库地址
#MYSQL_SERVER_PORT=3306  //数据库端口
#------------------------------------------------------------------
[MYSQL_CONFIG]
MYSQL_BACKUP_ALL=yes
MYSQL_DBS=
MYSQL_USER=
MYSQL_PASSWD=
MYSQL_SERVER=127.0.0.1
MYSQL_SERVER_PORT=3306

#------------------------------------------------------------------
#[SAVE_CONFIG]
#SAVE_DIR=/home/backup/save  //备份文件保存目录
#SAVE_LOG_DIR=/home/backup/log  //备份日志保存目录
#------------------------------------------------------------------
[SAVE_CONFIG]
SAVE_LOG_DIR=/root/backup/log
SAVE_DIR=/root/backup/save

#------------------------------------------------------------------
#[TEMP_CONFIG]
#TEMP_DIR=/tmp/backup  //备份工作目录(自动删除)
#------------------------------------------------------------------
[TEMP_CONFIG]
TEMP_DIR=/tmp/backup

#------------------------------------------------------------------
#[DAY_CONFIG]
#DAY=0 //不自动删除之前备份的文件和日志
#DAY=n //自动删除n天前备份和日志
#特别注意:备份的文件/日志不要动修改日期,否则无法删除!!
#Warning:Do not change your backup log or files!
#------------------------------------------------------------------
[DAY_CONFIG]
DAY=0

#------------------------------------------------------------------
#[QSHELL_CONFIG]
#AUTO_UPLOAD=NO //不自动上传七牛空间
#AUTO_UPLOAD=YES //自动上传到七牛空间
#如果要上传到七牛空间,请填写您的ACCESS_Key和SECRET_Key以及BUCKET
#AUTO_DELETE=no //自动和本地同步删除n天前的备份和日志
#BUCKET=backup //空间名,建议是私有空间
#ACCESS_Key= //您的ACCESS_Key
#SECRET_Key= //您的SECRET_Key
#key_prefix=backup //前缀名,用来方便区分和管理
#------------------------------------------------------------------

[QSHELL_CONFIG]
AUTO_UPLOAD=no
AUTO_DELETE=no
BUCKET=backup
ACCESS_Key=
SECRET_Key=
key_prefix=backup

#------------------------------------------------------------------
#[UPX_CONFIG]
#AUTO_UPLOAD=NO //不自动上传又拍云空间
#AUTO_UPLOAD=YES //自动上传到又拍云空间
#如果要上传到又拍云空间,请填写您的操作员账户密码,并进行相关权限的设置
#AUTO_DELETE=no //自动和本地同步删除n天前的备份和日志
#BUCKET=backup //空间名,建议是私有空间
#UPX_UESR= //您的操作员账户
#UPX_PASSWD= //您的账户密码
#UPX_DIR= //又拍云上传文件夹 请勿加路径/符号!
#------------------------------------------------------------------
[UPX_CONFIG]
AUTO_UPLOAD=no
AUTO_DELETE=no
BUCKET=
UPX_UESR=
UPX_PASSWD=
UPX_DIR=backup

#------------------------------------------------------------------
#[BPCS_UPLOADER_CONFIG]
#If you want to upload to BauDuYun,You must install php and init the bpcs_uploader
#AUTO_UPLOAD=yes or no //是否自动上传到百度网盘
#BDY_DIR=backup //百度云上存储备份的文件夹,前面请勿加 / 符号
#AUTO_DELETE=yes //是否自动和本地同步删除备份
#------------------------------------------------------------------
[BPCS_UPLOADER_CONFIG]
AUTO_UPLOAD=no
BDY_DIR=backup
AUTO_DELETE=no

#------------------------------------------------------------------
#[FTP_CONFIG]
#IF you want to upload to ftp,you must install command ftp.
#And you ftp server must allow through the firewall.
#警告:如果要上传到ftp,本机需要安装ftp命令
#      远程ftp服务器需要放行相关端口
#     ftp上传受网络影响较大
#AUTO_UPLOAD=NO //不自动上传ftp
#AUTO_DELETE=YES //自动上传到ftp
#AUTO_DELETE=no //自动和本地同步删除n天前的备份和日志
#FTP_DIR=backup //ftp上传文件夹 请勿加路径/符号!
#FTP_UESR=test //ftp用户名
#FTP_PASSWD=test //ftp密码
#FTP_ADDR=xxx.xxx.xxx.xxx //ftp地址
#FTP_PORT=21 //ftp端口
#------------------------------------------------------------------
[FTP_CONFIG]
AUTO_UPLOAD=no
AUTO_DELETE=no
FTP_DIR=backup
FTP_UESR=
FTP_PASSWD=
FTP_ADDR=
FTP_PORT=21

#------------------------------------------------------------------
#[COS_CONFIG]
#上传到腾讯云对象存储设置
#AUTO_UPLOAD=no/yes 是否自动上传到COS
#AUTO_DELETE=no/yes 是否自动和本地同步删除备份
#COS_UPLOAD_DIR=backup // COS上存储备份的文件夹,前面请勿加符号 /
#SECRET_ID=XXXXXXXXXXXXXXX    APPID 对应的密钥 ID,可从控制台获取,参考:https://cloud.tencent.com/doc/product/436/6225
#SECRET_KEY=YYYYYYYYYYYYYY    APPID 对应的密钥 Key,可从控制台获取,参考: https://cloud.tencent.com/doc/product/436/6225
#BUCKET=NAME-XXXXXXX    指定的存储桶名称,bucket的命名规则为{name}-{appid} ,参考:https://cloud.tencent.com/doc/product/436/6232
#REGION=XXXXXXXXX    存储桶所在地域。参考:https://cloud.tencent.com/doc/product/436/6224
#------------------------------------------------------------------
[COS_CONFIG]
AUTO_UPLOAD=no
AUTO_DELETE=no
COS_UPLOAD_DIR=backup
SECRET_ID=**********************************
SECRET_KEY=*********************************
BUCKET=**************
REGION=ap-beijing

#------------------------------------------------------------------
#[COMPRESS_CONFIG]
#备份压缩设置
#使用ZIP压缩,请确保安装zip命令
#COMPRESS_PASSWD=xxxxx 指定ZIP压缩包密码
#------------------------------------------------------------------
[COMPRESS_CONFIG]
COMPRESS_PASSWD=

#------------------------------------------------------------------
#[SFTP_CONFIG]
#使用SFTP上传到远程服务器(实验性功能!!)
#SFTP上传基于SSH远程连接,请本机安装SSH命令。远程服务器须有SSHD服务,并且打开远程登陆
#若使用请设置登陆密码,或者登陆密钥证书(推荐),你可以参考这里:http://www.runoob.com/w3cnote/set-ssh-login-key.html 
#若使用密钥,请下载到本地,并且指定路径地址(包括文件名)
#AUTO_UPLOAD=no/yes 是否通过SFTP自动上传到远程服务器
#AUTO_DELETE=no/yes 是否自动和本地同步删除备份
#AUTH_METHOD=password/certificate 认证方法:password密码/certificate证书
#!!请指定一种认证方法并且在远程服务器做相关设置!!
#REMOTE_IP=xxx.xxx.xxx.xxx //远程服务器IP地址
#REMOTE_PORT=22 //远程服务器登陆端口
#REMOTE_USER=root  //远程服务器用户名
#REMOTE_PASSWD=xxxxxx //远程服务器登陆密码(如果选择密码登陆并设置)
#REMOTE_CERT=/etc/cert/remote //远程服务器登陆密钥证书(如果选择密钥证书登陆并设置,设置包括文件名)
#REMOTE_DIR=/home/backup //远程服务器存储路径 (绝对路径)
#!!请注意远程服务器存储路径是绝对路径!!
#------------------------------------------------------------------
[SFTP_CONFIG]
AUTO_UPLOAD=no
AUTO_DELETE=no
AUTH_METHOD=
REMOTE_IP=
REMOTE_PORT=22 
REMOTE_USER=root  
REMOTE_PASSWD=
REMOTE_CERT=/etc/cert/remote 
REMOTE_DIR=/home/backup 
###################################################################

backup.sh内容

太长了,略。

使用方法

apt -y install wget zip  curl  #for Debian/Ubuntu
git clone https://github.com/CHN-STUDENT/WebServerAutoBackup.git 
cd WebServerAutoBackup
nano config.ini //修改配置文件内的网站、数据库等参数
chmod a+x backup.sh
./backup.sh //使用默认配置文件运行
./backup.sh config-customize.ini //使用指定配置文件运行

注意:勿将临时目录设置成根/等重要目录,不然可能会造成系统及重要数据丢失的情况!!!这些目录也尽量不要设置到移动硬盘上,防止移动断电等意外情况。

添加计划任务,每天凌晨两点自动备份

crontab -e 
0 2 * * * cd /data/backup/WebServerAutoBackup && ./backup.sh > /data/backup/log/backup-cron.log  2>&1 & 
自己的主机,没有各类云,备份到本地即可。这里备份了memos,trilium,sun-panel,typecho,php自动更换图片api。前三个都是sqlite数据库,备份数据库文件即可,涉及备份上传到云的部分原样不动。


备份的文件
backup.20250207104309.zip

备份日志
20250207.backup.log

标签: linux, web

添加新评论