定时备份和恢复Docker中Mysql脚本

定时备份docker部署Mysql脚本

一、说明

     数据库中的数据作为软件系统最重要的部分,如何做好数据库备份特别重要,本文主要是介绍两个脚本:

  1. 定时备份Mysql脚本:
    定时备份Docker中Mysql的数据库并将sql传输到另一个服务器(这样可以保证及时一个服务器硬件出现问题,也可以保证数据最多丢失一天的数据);
  2. 定时恢复Mysq:
    定时恢复sql文件到Docker中的mysql数据库中。

二、备份sql脚本

#!/bin/bash

# 查询容器id  mysq_mysql为我的mysql数据容器名称前缀
CONTAINER_ID=`docker ps  -a | grep "mysql_mysql" | awk '{print $1}' | head -n 1`

# mysql 账号
MYSQL_USERNAME="username"
#mysql 密码
MYSQL_PASSWORD="password"

#备份sql目录
data_dir="/usr/local/fengpin-soft/mysql/deploy/backups/sql/"

#查询所有数据库包含prod的数据库
databases=`docker exec -i $CONTAINER_ID  mysql --user=$MYSQL_USERNAME -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)" | grep "prod"`

#回显所有查询出来数据库
echo "生产数据库有:$databases;"

#循环备份数据库
for db in $databases; do
echo "备份$db数据库"
docker exec -i $CONTAINER_ID mysqldump -u$MYSQL_USERNAME -p$MYSQL_PASSWORD --quick -C  --default-character-set=utf8 --databases $db > "$data_dir/$db`date +%Y%m%d`.sql"

#将当天备份的所有文件传输到其他服务器
echo ---------------------scp to otherserver start --------------------
# 利用expect将备份的sql发送到其他服务器 
expect -c "
    spawn scp $data_dir/$db`date +%Y%m%d`.sql  root@192.168.100.98:/usr/local/backups/99mysqlbackups/
    expect {
        \"*assword\" {set timeout 300; send \"另一个服务器密码\r\"; exp_continue;}
        \"yes/no\" {send \"yes\r\";}
    }
expect eof"
echo ---------------------scp to otherserver end --------------------
done

# 如果程序执行出错 发送邮件
if [ $? -ne 0 ];then
# 任务失败,发送邮件
echo -e "执行数据库任务失败" | mail -s '执行数据库任务失败' 719535422@qq.com
exit -1
fi

#删除所有日期超过15天的备份文件
find $data_dir -mtime +15 -name '*.sql' -exec rm -rf {} \;

三、添加定时任务

# 编辑定时任务,在命令行输入
crontab -e 

# 按 i  键进入编辑模式,添加定时任务,执行刚才的脚本,并将日志输出到mysql_dumps.log文件中
0 13 * * * sh /usr/local/fengpin-soft/mysql/deploy/backups/sh/mysql_dumps.sh > /usr/local/fengpin-soft/mysql/deploy/backups/sh/mysql_dumps.log 2>&1

# 按ESC   输入 :wq退出即可

四、 恢复脚本

#!/bin/bash

#查询mysql的容器id
CONTAINER_ID=`docker ps  -a | grep "mysql_mysql" | awk '{print $1}' | head -n 1`
# mysql 账号
MYSQL_USERNAME="username"
#mysql 密码
MYSQL_PASSWORD="password"

#要恢复的sql文件名称,根据备份脚本文件名称: 数据库名+日期.sql
FILENAME=gen_back_prod`date +%Y%m%d`.sql

echo "开始恢复sql到公司生产数据库"
echo "]备份数据库文件名为$FILENAME"
#备份sql目录
data_dir="/usr/local/fengpin-soft/mysql/deploy/backups/hncloudsql/"
# 恢复sql到mysql相应数据库中
docker exec -i $CONTAINER_ID  mysql -u$MYSQL_USERNAME -p$MYSQL_PASSWORD gen_back_prod < "$data_dir/$FILENAME" 
echo "结束恢复sql到公司生产数据库"

#如果执行出现异常则发送邮件
if [ $? -ne 0 ];then

# 任务失败,发送邮件
echo -e "执行数据库任务失败" | mail -s '执行数据库任务失败' 719535422@qq.com
exit -1
fi


#删除所有日期超过15天的备份文件
find $data_dir -mtime +15 -name '*.sql' -exec rm -rf {} \;

# 添加定时任务和备份相同操作
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值