Select Page

Linux 自动化备份backup.sh 脚本

Linux 自动化备份backup.sh 脚本
真正运营过网站的人都知道,数据对一个网站来说至关重要,因此,网站数据备份也是日常必做工作。因为误操作,网站被攻击等种种原因都会导致数据丢失,这时,你才会明白“有备无患”的道理。这个脚本是由秋水逸冰开发维护,我也一直在用。
backup.sh 特点
  1. 支持 MySQL/MariaDB/Percona 的数据库全量备份或选择备份;
  2. 支持指定目录或文件的备份;
  3. 支持加密备份文件(需安装 openssl 命令,可选);
  4. 支持上传至 Google Drive(需先安装 gdrive 并配置,可选);
  5. 支持在删除指定天数本地旧的备份文件的同时,也删除 Google Drive 上的同名文件(可选)。
安装配置脚本
下载该脚本并赋予执行权限
wget --no-check-certificate https://github.com/teddysun/across/raw/master/backup.sh
chmod +x backup.sh
配置脚本
vim backup.sh
变量说明

########## START OF CONFIG ##########

# Encrypt flag (true: encrypt, false: not encrypt)
ENCRYPTFLG=true

# WARNING: KEEP THE PASSWORD SAFE!!!
# The password used to encrypt the backup
# To decrypt backups made by this script, run the following command:
# openssl enc -aes256 -in [encrypted backup] -out decrypted_backup.tgz -pass pass:[backup password] -d -md sha1
BACKUPPASS="备份解密密码"

# Directory to store backups
LOCALDIR="储存压缩后的备份文件目录"

# Temporary directory used during backup creation
TEMPDIR="备份目录的临时目录"

# File to log the outcome of backups
LOGFILE="脚本运行产生的日志文件路径"

# OPTIONAL: If you want backup MySQL database, enter the MySQL root password below
MYSQL_ROOT_PASSWORD="MySQL的root密码"

# Below is a list of MySQL database name that will be backed up
# If you want backup ALL databases, leave it blank.
MYSQL_DATABASE_NAME[0]="要备份的MySQL数据库名称 留空则备份全部"

# Below is a list of files and directories that will be backed up in the tar backup
# For example:
# File: /data/www/default/test.tgz
# Directory: /data/www/default/test
BACKUP[0]="要备份的指定目录或文件列表,留空是不备份目录或文件"

※ MYSQL_DATABASE_NAME 是一个数组变量,可以指定多个。举例如下:
MYSQL_DATABASE_NAME[0]="phpmyadmin"
MYSQL_DATABASE_NAME[1]="test"

#※ BACKUP 是一个数组变量,可以指定多个。举例如下:
BACKUP[0]="/data/www/default/test.tgz"
BACKUP[1]="/data/www/default/test/"
BACKUP[2]="/data/www/default/test2/"

# Number of days to store daily local backups (default 7 days)
LOCALAGEDAILIES="指定多少天之后删除本地旧的备份文件,默认为 7 天"

# Delete Googole Drive's & FTP server's remote file flag (true: delete, false: not delete)
DELETE_REMOTE_FILE_FLG=true 删除 Google Drive 或 FTP 上的备份文件 FLG,true 为删除,false 为不删除

# Upload to FTP server flag (true: upload, false: not upload)
FTP_FLG=false 上传文件至 FTP 的 FLG,true 为上传,false 为不上传

# FTP server
# OPTIONAL: If you want upload to FTP server, enter the Hostname or IP address below
FTP_HOST="连接的 FTP 域名或 IP 地址"

# FTP username
# OPTIONAL: If you want upload to FTP server, enter the FTP username below
FTP_USER="连接的 FTP 的用户名"

# FTP password
# OPTIONAL: If you want upload to FTP server, enter the username's password below
FTP_PASS="连接的 FTP 的用户的密码"

# FTP server remote folder
# OPTIONAL: If you want upload to FTP server, enter the FTP remote folder below
# For example: public_html
FTP_DIR="连接的 FTP 的远程目录"

########## END OF CONFIG ##########

解密 解压备份文件
解密
openssl enc -aes256 -in [ENCRYPTED BACKUP] -out decrypted_backup.tgz -pass pass:[备份加密密码] -d -md sha1
解压

tar 压缩文件默认都是相对路径的。加个 -P 是为了 tar 能以绝对路径压缩文件。因此,解压的时候也要带个 -P 参数。

tar -zxPf [解压文件名]
配置 gdrive
gdrive 是一个命令行工具,用于 Google Drive 的上传下载等操作。

官网网站:https://github.com/prasmussen/gdrive

x86_64(64位):
wget -O /usr/bin/gdrive http://dl.lamp.sh/files/gdrive-linux-x64
chmod +x /usr/bin/gdrive
获取授权
gdrive about
根据提示用浏览器打开 gdrive 给的 URL,点接受(Accept),然后将浏览器上显示出来的字符串粘贴回命令行里,完成授权。
运行脚本
脚本默认会显示备份进度,并在最后统计出所需时间。
./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}
}
cronjob 自动化举例
vim /etc/crontab

查找自己的PATH地址并替换

echo $PATH

以下表示,每天凌晨 1 点 30 分,root 用户执行一次 backup.sh 脚本。
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

一定要修改其中的 PATH 和 HOME 变量的值。
尤其是 HOME 变量,gdrive 命令能否正确执行,是要依赖于其配置文件的。默认用 root 配置的话,其配置文件夹应该是 /root/.gdrive/ ,所以要更改 HOME 的值。
转载链接

About The Author

Jackie Sung

Jackie Sung, also known by his nick-name KK, always strives for the best and learn from the best. Influenced by the age of Internet, for the last few years, in his spare time, he's been working and living as a Freelance Web Engineer/ Web Developer & Designer/ Amateur Photographer/ Husky Lover. The work he provides is of highest quality, fully-customized responsive, and tested in a wide range of devices, which typically covers both front-end (HTML5/ CSS3/ JavaScript) and back-end (WordPress as the CMS) responsibilities.

1 Comment

  1. Kenny

    不明觉厉~爱你哦锯叔Mua~

    回复

Leave a reply

电子邮件地址不会被公开。 必填项已用*标注

3 × 1 =

关于本站

主要用于记录和分享我所折腾过的东西
因为业务关系,本站采用双语
我是菜鸡 各位大佬多包含 别DDCC我 谢谢
工作联系 hello#jackiesung.com 将#换成@

订阅本站

Pin It on Pinterest

Share This