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等协议,可以说应用范围很广。
更多的网盘存储服务还有:
backup.sh 特点:
1、支持 MySQL/MariaDB/Percona 的数据库全量备份或选择备份;
2、支持指定目录或文件的备份;
3、支持加密备份文件(需安装 openssl 命令,可选);
4、支持上传至 Google Drive(需先安装 rclone 并配置,可选);
5、支持在删除指定天数本地旧的备份文件的同时,也删除 Google Drive 上的同名文件(可选)。
执行以下命令:
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
直接到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密码、指定你的备份目录
脚本需要用 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 是一个命令行工具,用于
然后输入: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
脚本默认会显示备份进度,并在最后统计出所需时间。
如果你想将脚本加入到 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} }
打开你的网盘就可以看到备份过来的文件了。
关于如何使用 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等账号信息,至于加密不加密看个人需要,毕竟解密也是一个“技术”活。
文章出自:挖站否 https://wzfou.com/vps-backup-sh/, 版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。
文章更新于: 2020年9月26日 下午9:57
查看评论
这个脚本自动定时任务总是不生效。
是不是你crontab姿势不对?
这个好,备份是个好习惯。
开不开起上传要怎么设置,只要指定一个RCLONE_NAME就好了嘛?我指定的od的name,秒上传成功,但是网盘中没有文件
需要修改backup.sh里面的参数,默认的是脚本作者的,不能用。
提供个github repo就更方便了,我懒,习惯fork
小白不会设置,好痛苦。
我也用rclone在备份,不过都是一个月手动备份一次。感谢网上大佬的教程,不然也不会搞。
我是备份到COS中。
我都是直接用快照的。
备份是必要的,数据是无价的。[赞]