一个乐于分享的博客
关注互联网折腾服务器分享码农的日常

一键脚本异地备份网站文件MySQL数据库

一键脚本异地备份网站文件MySQL数据库

做网站最害怕的就是数据丢失,无论再靠谱的空间,都不能保证100%的数据安全,所以只有定时异地备份才是靠谱之选。然而每天去执行备份操作是很枯燥的,并且难坚持。那么这种枯燥的工作能不能用一键脚本代替呢?既精准又可靠。

今天给大家介绍一键备份脚本,本脚本适合VPS或云服务器上执行,感谢原作者秋水逸冰提供源代码。

脚本特点

  1. 支持 MySQL/MariaDB/Percona 的数据库全量备份或选择备份;
  2. 支持指定目录或文件的备份;
  3. 支持加密备份文件(需安装 openssl 命令,可选);
  4. 支持上传至 Google Drive(需先安装 gdrive 并配置,可选);
  5. 支持在删除指定天数本地旧的备份文件的同时,也删除 Google Drive 上的同名文件(可选)。

获取代码

代码托管到了Github,获取脚本并授予执行权限

wget --no-check-certificate https://github.com/teddysun/across/raw/master/backup.sh
chmod +x backup.sh

配置脚本

基本参数

  • ENCRYPTFLG (加密FLG,true 为加密,false 为不加密,默认是加密)
  • BACKUPPASS (加密密码,重要,务必要修改)
  • LOCALDIR (备份目录,可自己指定)
  • TEMPDIR (备份目录的临时目录,可自己指定)
  • LOGFILE (脚本运行产生的日志文件路径)
  • MYSQL_ROOT_PASSWORD (MySQL/MariaDB/Percona 的 root 用户密码)
  • MYSQL_DATABASE_NAME (指定 MySQL/MariaDB/Percona 的数据库名,留空则是备份所有数据库)

备份目录和备份数据库均可用于指定多个例:

BACKUP[0]="/data/www/default/test.tgz"
BACKUP[1]="/data/www/default/test/"
BACKUP[2]="/data/www/default/test2/"

FTP参数

  • FTP_FLG (上传文件至 FTP 的 FLG,true 为上传,false 为不上传)
  • FTP_HOST (连接的 FTP 域名或 IP 地址)
  • FTP_USER (连接的 FTP 的用户名)
  • FTP_PASS (连接的 FTP 的用户的密码)
  • FTP_DIR (连接的 FTP 的远程目录,比如: public_html)

有FTP的小伙伴可以选择异地备份至远程FTP地址,依次配置FTP参数即可,注意启用FTP_FLG开关,开启才会执行上传操作。没有FTP的小伙们也可以用GoogleDrive更加安全可靠,当然国内主机是用不了的。

博主选择的是上传至GoogleDrive,脚本默认备份文件夹是/root/backups/,无特殊情况不必修改。所以我只配置了以下参数:

#不进行加密
ENCRYPTFLG=false

#MySQL的root密码以及要备份的数据库
MYSQL_ROOT_PASSWORD="mypassword"
MYSQL_DATABASE_NAME[0]="wpdb"

#要备份的文件夹,即网站www目录
BACKUP[0]="/data/sites/yantuz.cn/www"

备份至GoogleDrive

备份至GoogleDrive要安装gdrive进行上传操作项目地址: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

i386(32位)

wget -O /usr/bin/gdrive http://dl.lamp.sh/files/gdrive-linux-386
chmod +x /usr/bin/gdrive

然后,运行以下命令开始获取授权:

gdrive about

根据提示用浏览器打开 gdrive 给出的 URL,点击接受(Accept),然后将浏览器上显示出来的字符串粘贴回命令行里,完成授权。

一键脚本异地备份网站文件MySQL数据库

只要成功设置gdrive,脚本会自动识别并在备份完成时上传至GoogleDrive。

备份至FTP

这块博主没有FTP空间,所以无法测试,手头有的一个FTP端口号不是默认的21端口,而脚本似乎不支持备份到带端口号的FTP,所以没测试成功。

国内服务器或者没有google帐号的朋友,可以申请一个低价的网站空间,如最便宜的woothosting虚拟主机 年付1美元体验阿里云6元年付虚拟主机

运行脚本

直接执行脚本./backup.sh即可

测试正常后修改log()方法删掉输出部分,并添加脚本至任务计划

log() {
    echo "$(date "+%Y-%m-%d %H:%M:%S")" "$1" #删掉此行
    echo -e "$(date "+%Y-%m-%d %H:%M:%S")" "$1" >> ${LOGFILE}
}

添加脚本至任务计划

以CentOS为例,编辑 /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 脚本。

转载务必注明出处:岩兔站 » 一键脚本异地备份网站文件MySQL数据库
赞 (0) or 打赏

讨论区 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址