系统环境:CentOS 7

我们使用mysqldump备份数据库,使用mysqldump命令导出数据库格式如下:

mysqldump -u username -p 数据库名称 > 导出文件名.sql

还原:

mysql -u username -p 数据库名称 < 导出文件名.sql

1.创建备份脚本

vi /test/database_backups/db_auto_backup.sh

内容如下:

# 配置mysql信息
mysql_user="USER"                        # mysql用户
mysql_password="PASSWORD"                # mysql用户密码
mysql_host="localhost"
mysql_port="3306"
backup_db_arr=("db1" "db2")              # 要备份的数据库名称,多个用空格分开隔开 如("db1" "db2" "db3")
backup_location=/test/database_backups   # 备份数据存放位置,末尾请不要带"/",此项可以保持默认,程序会自动创建文件夹

backup_time=`date +%Y%m%d%H%M`           # 定义备份详细时间
backup_Ymd=`date +%Y-%m-%d`              # 定义备份目录中的年月日时间
backup_dir=$backup_location/$backup_Ymd  # 备份文件夹全路径

for dbName in ${backup_db_arr[@]}
do
        echo "database ${dbName} backup start..."
        `mkdir -p $backup_dir`
        `mysqldump -h$mysql_host -P${mysql_port} -u${mysql_user} -p${mysql_password} $dbName | gzip > ${backup_dir}/$dbName-$backup_time.sql.gz`
        flag=`echo $?`
        if [ $flag == "0" ]; then
                echo "database $dbName backup successful."
        else
                echo "database $dbName backup fail."
        fi
done

修改shell脚本属性,赋予权限:

chmod 600 db_auto_backup.sh
chmod +x db_auto_backup.sh

运行测试是否成功:

./db_auto_backup.sh

若输入database db1 backup successful.则说明配置正确。

2.定时执行

我们使用crontab定时执行脚本,crontab命令用于设置周期性被执行的指令。

设置crontab定时执行:

vi /etc/crontab
# 在最后一行加入(脚本路径根据个人配置而修改):
00 5 * * * root /test/database_backups/db_auto_backup.sh
# 每日凌晨5点00分执行

crontab格式如下:

minute   hour   day   month   week   command
# 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  表示星期(0 或 7 表示星期天)
|  |  |  |  |  .------------------- username  以哪个用户来执行 
|  |  |  |  |  |            .------ command  要执行的命令,可以是系统命令,也可以是自己编写的脚本文件
|  |  |  |  |  |            |
*  *  *  *  * user-name  command to be executed
  • minute 表示分钟,可以是从0到59之间的任何整数
  • hour 表示小时,可以是从0到23之间的任何整数
  • day 表示日期,可以是从1到31之间的任何整数
  • month 表示月份,可以是从1到12之间的任何整数
  • week 表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日
  • command 要执行的命令,可以是系统命令,也可以是自己编写的脚本文件

在以上字段中,还可用特殊字符:

  • *“ 星号代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作
  • ,“ 可以使用逗号隔开的值指定一个列表范围,例如”1,2,3,5,7”
  • -“ 可以用整数之间的中扛表示一个整数范围,例如”1-3”表示”1,2,3”
  • /“ 可以用正斜线指定时间的间隔频率,例如”0-23/2”表示每两小时执行一次;同时也可以和星号(*)一起使用,例如”*/10”,如果用在minute字段,则表示每10分钟执行一次

重启crontab

service crond restart
# 或
service cron restart

crontab定时执行的日志保存在/var/spool/mail/root中,可查看日志:

vi /var/spool/mail/root

日志详细如下:

From root@xxx.localdomain  Thu Mar 28 17:15:01 2019
Return-Path: <root@xxx.localdomain>
X-Original-To: root
Delivered-To: root@xxx.localdomain
Received: by xxx.localdomain (Postfix, from userid 0)
        id 55ECBE523B; Thu, 28 Mar 2019 17:15:01 +0800 (CST)
From: "(Cron Daemon)" <root@xxx.localdomain>
To: root@xxx.localdomain
Subject: Cron <root@xxx> /test/database_backups/db_auto_backup.sh
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
Precedence: bulk
X-Cron-Env: <XDG_SESSION_ID=4888>
X-Cron-Env: <XDG_RUNTIME_DIR=/run/user/0>
X-Cron-Env: <LANG=en_US.UTF-8>
X-Cron-Env: <SHELL=/bin/bash>
X-Cron-Env: <PATH=/sbin:/bin:/usr/sbin:/usr/bin>
X-Cron-Env: <MAILTO=root>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Message-Id: <20190328091501.55ECBE523B@xxx.localdomain>
Date: Thu, 28 Mar 2019 17:15:01 +0800 (CST)

database db1 backup start...
database db1 backup successful.
database db2 backup start...
database db2 backup successful.

参考:

https://www.jianshu.com/p/746db5ceec02

文章目录