1. 需求描述
1.1 需求
备份目标:数据库(mysql)
备份周期:每天一次
备份方式:全量备份
备份存放:异地存放
1.2 环境介绍
应用 | 应用名称 | 启动方式 | 所在服务器 | 应用数据目录 |
---|---|---|---|---|
主数据库 | Mysql_master | Docker | 172.16.0.57 | /data/containers/mysql |
备数据库 | Mysql_save | Docker | 172.16.0.208 | /data/containers/mysql |
1.3 备份存放环境
存放服务器:172.16.0.47
存放目录:/data/remove_backup/mysql_backup
备份策略:保留最近3次备份
1.4 配置远程免密登录(用作文件传输)
在172.16.0.29 服务器执行以下操作
# ssh-keygen
一直按回车,直到结束
# ssh-copy-id 172.16.0.47
输入172.16.0.208服务器root密码
测试能否免密登录服务器
# ssh 172.16.0.47
在172.16.0.208 服务器执行以上相同操作
备注:也可以使用明文密码scp
2. 备份操作
2.1 数据库备份(以下操作在mysql备服务器上执行)
数据库备份在备库每晚12点进行
2.1.1 在备数据库服务器创建备份目录
# mkdir -p /data/mysql_backup
2.1.2上传备份脚本.mysql_backup.sh到/data/mysql_backup
- 或 -
在/data/mysql_backup目录下创建脚本文件.mysql_backup.sh
# vim .mysql_backup.sh
# chmod +x .mysql_backup.sh
注意:不要漏了脚本前面的` . ` ;由于脚本中带有数据库账号密码,本着安全设置为隐藏文件。
------------------
#!/bin/bash
#数据库的定时备份
DATETIME=`date +%Y%m%d`
#定义本地备份的信息
BACKUP_DIR="/data/mysql_backup"
BACKUP_NAME="all_$DATETIME.sql"
if [ ! -d "$BACKUP_DIR" ];then
mkdir -p $BACKUP_DIR
fi
#执行mysql的备份数据库指令
docker exec mtwomysql mysqldump -uroot -p123456 --lock-tables=0 --default-character-set=utf8 --all-databases >$BACKUP_DIR/$BACKUP_NAME
#删除3天前的备份文件
find $BACKUP_DIR -mtime +3 -name "*.sql" -exec rm rf {} \;
echo "===========backup success======"
#定义远程备份
REMOVE_IP="172.16.0.47"
REMOVE_USER="root"
REMOVE_PORT=22
REMOVE_BACKUP_DIR="/data/remove_backup/mysql_backup"
scp $BACKUP_DIR/$BACKUP_NAME $REMOVE_USER@$REMOVE_IP:$REMOVE_BACKUP_DIR/
#远程文件清理
ssh -p $REMOVE_PORT $REMOVE_USER@$REMOVE_IP "find $REMOVE_BACKUP_DIR -mtime +3 -name \"*.sql\" -exec rm -rf {} \;"
echo "===========scp success========"
------------------
说明: BACKUP_DIR 本地存放备份文件地址
REMOVE_IP 远程存放服务器IP
REMOVE_USER 远程服务器登录用户
REMOTE_PORT 远程服务端口
REMOVE_BACKUP_DIR 远程存放服务器目录位置
2.1.3 创建定时任务
# crontab -e
输入小写 i 编辑文件,在文件结尾添加如下信息:
0 */48 * * * /data/mysql_backup/.mysql_backup.sh
输入 :wq 保存
3. 恢复操作
3.1 数据库mysql恢复
将备份的SQL文件拷贝到数据库服务器上
执行以下命令进行数据恢复:
# docker exec mysql_save sh -c “ mysqldump -u root -p123456 < all.sql”
或
使用root账号登录mysql数据库执行以下命令:
# source all.sql
注释: mysql_save数据库容器名称
123456 数据库密码
all.sql 备份的数据文件