#!/bin/bash
#author: zking
#MySQL定义备份并发送邮件
#定义变量
DATE=$(date +%F"_"%H:%M:%S)
HOST=127.0.0.1
DB=db1
USERNAME=root
PASSWORD=un1xR00t
MAIL=donkee@vip.qq.com
BACKUP_DIR=/data/db_backup
SQL_FILE=${DB}_sql_$DATE.sql
#判断备份目录是否存在
if [ ! -d $BACKUP_DIR ];then
mkdir -p $BACKUP_DIR
fi
echo $BACKUP_DIR/$SQL_FILE
#执行备份命令
if mysqldump -h$HOST -u$USERNAME -p$PASSWORD --single-transaction $DB > $BACKUP_DIR/$SQL_FILE ;then
echo "备份成功,文件位置:$BACKUP_DIR/$SQL_FILE" | mail -s "MySQL数据备份" $MAIL
else
echo "备份失败" | mail -s "MySQL数据备份" $MAIL
fi
--single-transaction
该参数通过在一个事务中导出所有表从而创建一个一致性的快照
当前版本的MySQL只可以对innodb 引擎保证一致性,导出过程中不会锁表其他引擎,如MyISAM 在导出期间会锁表为保证有效的dump文件,即正确的表内容和二进制日志位置在导出的过程中不能有如下操作
ALTER TABLE
DROP TABLE
RENAME TABLE
TRUNCATE TABLE
如指定了 --lock-tables参数则会自动将其关闭
推荐在mysqldump中使用该参数
mysql逻辑备份&恢复
- mysqldump备份
- mysql、source恢复
这里使用的是mailutils
工具包,请提前下载,输入命令:apt install -y mailutils
。发送测试邮件:
echo "备份数据,$(date +%F' '%H:%M:%S)" | mail -s "MySQL数据备份" 你的邮件地址
发送成功之后,可以直接到邮件中查看发送结果。
如何实现定时发送呢?
Ubuntu
默认自带了Crontab
计划任务,它的工作方式与 Windows
中的任务调度程序相同。使用 cron
守护程序,可以指定应执行某个进程(例如维护或备份作业)的时间。这样,就可以自动执行这些任务,以便稍后运行,而无需手动干预。
查看Cron
服务相关命令:
# 查看服务状态
sudo service cron status
# 开启服务
sudo service cron start
# 停止服务
sudo service cron stop
# 重启服务
sudo service cron restart
设置定时任务:
输入命令 crontab -e
并按 Enter 键打开 crontab
文件。该命令如下所示:
# 编写定时任务
crontab -e
# 查看定时任务
crontab -l
初次使用会让你选择文本编辑器,默认是 nano
,但是我只会用 vim
,所以选择 3,如图:
然后在最后插入以下内容就可以了:
# 每2分钟执行一次root目录下的mysqltest.sh脚本
*/2 * * * * /root/mysqltest.sh
Crontab
定时任务命令格式
# 格式如下
# minute hour day-of-month month-of-year day-of-week commands
# 00-59 00-23 01-31 01-12 0-6 (0 is sunday)
# 每天0点0分,执行指定脚本
0 0 * * * /root/mysqltest.sh
# 星期1到星期5,11点30分,执行指定脚本
30 11 * * 1,2,3,4,5 /root/mysqltest.sh
...
首先 crontab 任务配置基本格
* * * * * command
- 第1列表示分钟0~59 每分钟用*或者 */1表示
- 第2列表示小时0~23(0表示0点)
- 第3列表示日期1~31
- 第4列表示月份1~12
- 第5列标识号星期0~6(0,7都可表示星期天)
- 第6列要运行的命令