VPS 主机一键备份脚本 backup.sh 其实在 Linux VPS 主机自动备份网站和数据库脚本通用版就已经介绍过了,不过作者最近对脚本进行了更新,将 Rclone 整合到了 backup.sh 当中,这样我们就可以利用 backup.sh 自动定时备份网站目录、数据库到各大网盘当中了。
其实,如果你用的是 Oneinstack、LNMP 一键包或者宝塔面板,都已经自带了备份脚本或者备份功能了,backup.sh 这个脚本有一个好处就是:通用。它是一个独立的脚本,无论你的网站运行的是什么面板,backup.sh 都可以帮助你备份指定的目录和数据库。
backup.sh 支持的网盘和存储有:阿里云 OSS、Amazon S3、Backblaze B2、Box、腾讯 COS、Dropbox、Google Drive、IBM COS S3、OneDrive、ownCloud、Nextcloud,另外 backup.sh 还支持 FTP、WebDAV、SFTP 等协议,可以说应用范围很广。
更多的网盘存储服务还有:
- 巧用又拍云 FTP 和坚果云 WebDAV - 打造个人文件备份和数据云存储
- Linux 共享文件夹目录三种方法 - NFS 远程挂载, GlusterFS 共享存储和 samba 共享目录
- 本地网络磁盘 RaiDrive 挂载 Dropbox,Google Drive,OneDrive 支持 WebDAV,FTP,SFTP
一、backup.sh 备份脚本安装
backup.sh 特点:
1、支持 MySQL/MariaDB/Percona 的数据库全量备份或选择备份;
2、支持指定目录或文件的备份;
3、支持加密备份文件(需安装 openssl 命令,可选);
4、支持上传至 Google Drive(需先安装 rclone 并配置,可选);
5、支持在删除指定天数本地旧的备份文件的同时,也删除 Google Drive 上的同名文件(可选)。
1.1 下载并赋予权限
执行以下命令:
wget --no-check-certificate https://github.com/teddysun/across/raw/master/backup.sh
chmod +x backup.sh
#备用
https://github.com/freehao123/across/blob/master/backup.shchmod +x backup.sh
1.2 修改并配置脚本
直接到 root 下面找到 backup.sh 用记事本打开编辑,修改配置参数。关于变量名的一些说明:
ENCRYPTFLG (加密FLG,true 为加密,false 为不加密,默认是加密)
BACKUPPASS (加密密码,重要,务必要修改)
LOCALDIR (备份目录,可自己指定)
TEMPDIR (备份目录的临时目录,可自己指定)
LOGFILE (脚本运行产生的日志文件路径)
MYSQL_ROOT_PASSWORD (MySQL/MariaDB/Percona 的 root 用户密码)
MYSQL_DATABASE_NAME (指定 MySQL/MariaDB/Percona 的数据库名,留空则是备份所有数据库)
※ MYSQL_DATABASE_NAME 是一个数组变量,可以指定多个。举例如下:
MYSQL_DATABASE_NAME[0]="phpmyadmin"
MYSQL_DATABASE_NAME[1]="test"BACKUP (需要备份的指定目录或文件列表,留空就是不备份目录或文件)
※ BACKUP 是一个数组变量,可以指定多个。举例如下:
BACKUP[0]="/data/www/default/test.tgz"
BACKUP[1]="/data/www/default/test/"
BACKUP[2]="/data/www/default/test2/"LOCALAGEDAILIES (指定多少天之后删除本地旧的备份文件,默认为 7 天)
DELETE_REMOTE_FILE_FLG (删除 Google Drive 或 FTP 上备份文件的 FLG,true 为删除,false 为不删除)
RCLONE_NAME (设置 rclone config 时设定的 remote 名称,务必要指定)
RCLONE_FOLDER (指定备份时设定的 remote 的目录名称,该目录名在 Google Drive 不存在时则会自行创建。默认为空,也就是根目录)
RCLONE_FLG (上传本地备份文件至 Google Drive 的 FLG,true 为上传,false 为不上传)
FTP_FLG (上传文件至 FTP 服务器的 FLG,true 为上传,false 为不上传)
FTP_HOST (连接的 FTP 域名或 IP 地址)
FTP_USER (连接的 FTP 的用户名)
FTP_PASS (连接的 FTP 的用户的密码)
FTP_DIR (连接的 FTP 的远程目录,比如: public_html)
几个关键的地方:是否开启加密、是否开启自动上传到网盘、设置 Mysql 的 Root 密码、指定你的备份目录
1.3 注意事项的说明
脚本需要用 root 用户来执行;脚本需要用到 openssl 来加密,请事先安装好;脚本默认备份所有的数据库(全量备份);备份文件的解密命令如下:
openssl enc -aes256 -in [ENCRYPTED BACKUP] -out decrypted_backup.tgz -pass pass:[BACKUPPASS] -d -md sha1
备份文件解密后,解压命令如下:
tar -zxPf [DECRYPTION BACKUP FILE]
解释一下参数 -P:
tar 压缩文件默认都是相对路径的。加个 -P 是为了 tar 能以绝对路径压缩文件。因此,解压的时候也要带个 -P 参数。
二、安装并配置 rclone 命令
rclone 是一个命令行工具,用于 Google Drive 的上传下载等操作。官网网站:https://rclone.org/
你可以用以下的命令来安装 rclone,以 RedHat 系举例,记得要先安装 unzip 命令。
yum -y install unzip && wget -qO- https://rclone.org/install.sh | bash
然后,运行以下命令开始配置:
rclone config
输入:n 和设置一个名称。
然后选择你要备份的网盘,这里以谷歌网盘为演示,id 和 Secret 都不用填写,直接回车。
然后输入:1,赋予 rclone 操作云盘可读可写的权限,folder_id 和 account_file 都直接回车,不用填写。
当设置到 Use auto config?
是否使用自动配置,选 n
不自动配置。然后根据提示用浏览器打开 rclone 给出的 URL,点击接受(Accept)
。
然后将浏览器上显示出来的字符串粘贴回命令行里,完成授权,然后退出即可。
完整的配置过程如下:
root@localhost:~# rclone config
2020/09/23 23:37:40 NOTICE: Config file "/root/.config/rclone/rclone.conf" not found - using defaults
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n #选择新配置
name> wzfoumi #设置一个名称
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
1 / 1Fichier
\ "fichier"
2 / Alias for an existing remote
\ "alias"
3 / Amazon Drive
\ "amazon cloud drive"
4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, Tencent COS, etc)
\ "s3"
5 / Backblaze B2
\ "b2"
6 / Box
\ "box"
7 / Cache a remote
\ "cache"
8 / Citrix Sharefile
\ "sharefile"
9 / Dropbox
\ "dropbox"
10 / Encrypt/Decrypt a remote
\ "crypt"
11 / FTP Connection
\ "ftp"
12 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
13 / Google Drive
\ "drive"
14 / Google Photos
\ "google photos"
15 / Hubic
\ "hubic"
16 / In memory object storage system.
\ "memory"
17 / Jottacloud
\ "jottacloud"
18 / Koofr
\ "koofr"
19 / Local Disk
\ "local"
20 / Mail.ru Cloud
\ "mailru"
21 / Mega
\ "mega"
22 / Microsoft Azure Blob Storage
\ "azureblob"
23 / Microsoft OneDrive
\ "onedrive"
24 / OpenDrive
\ "opendrive"
25 / OpenStack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ "swift"
26 / Pcloud
\ "pcloud"
27 / Put.io
\ "putio"
28 / QingCloud Object Storage
\ "qingstor"
29 / SSH/SFTP Connection
\ "sftp"
30 / Sugarsync
\ "sugarsync"
31 / Tardigrade Decentralized Cloud Storage
\ "tardigrade"
32 / Transparently chunk/split large files
\ "chunker"
33 / Union merges the contents of several upstream fs
\ "union"
34 / Webdav
\ "webdav"
35 / Yandex Disk
\ "yandex"
36 / http Connection
\ "http"
37 / premiumize.me
\ "premiumizeme"
38 / seafile
\ "seafile"
Storage> 13 #选择一个网盘
** See help for drive backend at: https://rclone.org/drive/ **
Google Application Client Id
Setting your own is recommended.
See https://rclone.org/drive/#making-your-own-client-id for how to create your own.
If you leave this blank, it will use an internal key which is low performance.
Enter a string value. Press Enter for the default ("").
client_id> #直接回车
OAuth Client Secret
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret> #直接回车
Scope that rclone should use when requesting access from drive.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
1 / Full access all files, excluding Application Data Folder.
\ "drive"
2 / Read-only access to file metadata and file contents.
\ "drive.readonly"
/ Access to files created by rclone only.
3 | These are visible in the drive website.
| File authorization is revoked when the user deauthorizes the app.
\ "drive.file"
/ Allows read and write access to the Application Data folder.
4 | This is not visible in the drive website.
\ "drive.appfolder"
/ Allows read-only access to file metadata but
5 | does not allow any access to read or download file content.
\ "drive.metadata.readonly"
scope> 1 #选择1,赋予读写权限
ID of the root folder
Leave blank normally.
Fill in to access "Computers" folders (see docs), or for rclone to use
a non root folder as its starting point.
Enter a string value. Press Enter for the default ("").
root_folder_id>
Service Account Credentials JSON file path
Leave blank normally.
Needed only if you want use SA instead of interactive login.
Leading `~` will be expanded in the file name as will environment variables such as `${RCLONE_CONFIG_DIR}`.
Enter a string value. Press Enter for the default ("").
service_account_file>
Edit advanced config? (y/n)
y) Yes
n) No (default)
y/n> n #不使用高级配置
Remote config
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine
y) Yes (default)
n) No
y/n> n #不使用自动配置
Please go to the following link: https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=wzfou.com
Log in and authorize rclone for access
Enter verification code> 4/4QENTDxxxwzfoucomc #输入授权码
Configure this as a team drive?
y) Yes
n) No (default)
y/n> n #是否配置为Team Drive
--------------------
[wzfoumi]
type = drive
scope = drive
token = {"access_token":"yaw.zfoucom2891+08:00"}
--------------------
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y #确认你的配置是否正确
Current remotes:
Name Type
==== ====
wzfoumi drive
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q #退出
三、backup.sh 脚本备份操作
3.1 手动备份
运行脚本开始备份
./backup.sh
脚本默认会显示备份进度,并在最后统计出所需时间。
如果你想将脚本加入到 cron 自动运行的话,就不需要前台显示备份进度,只写日志就可以了。这个时候你需要稍微改一下脚本中的 log 函数。
log() {
echo "$(date "+%Y-%m-%d %H:%M:%S")" "$1"
echo -e "$(date "+%Y-%m-%d %H:%M:%S")" "$1" >> ${LOGFILE}
}
改为:
log() {
echo -e "$(date "+%Y-%m-%d %H:%M:%S")" "$1" >> ${LOGFILE}
}
打开你的网盘就可以看到备份过来的文件了。
![]
3.2 自动定时备份
关于如何使用 cron 自动备份,可以参考:Linux Crontab 命令定时任务基本语法与操作教程,这里以 CentOS 6 来举例说明。 修改文件 /etc/crontab,内容如下:
SHELL=/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
MAILTO=root
HOME=/root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
30 1 * * * root bash /root/backup.sh
以上表示,每天凌晨 1 点 30 分,以 root 用户执行一次 backup.sh 脚本。
注意:一定要修改其中的 PATH 和 HOME
变量的值。尤其是 HOME 变量,rclone 命令能否正确执行,是要依赖于其配置文件的。用 root 用户配置的话,其配置文件夹应该是 /root/.config/rclone
,所以要更改 HOME
的值。
四、总结
VPS 主机一键备份脚本 backup.sh 安装和使用都比较简单,主要关键点在于修改自己的配置参数,并且在 rclone 配置中绑定好自己的网盘,或者添加好 WebDAV、FTP 等账号信息,至于加密不加密看个人需要,毕竟解密也是一个 “技术” 活。
Comments | NOTHING