系统环境: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.
参考: