1.编写脚本
- 准备试验机器,安装mysql环境
- 执行脚本
- 进入容器内部(我的容器name就是mysql)
- 创建容器内目录(放备份的sql)
- 执行mysqldump命令,存储备份文件到容器内相应目录
- 整理数据
- 回到宿主机,继续创建目录,用来接收容器中备份的sql文件
- 从容器中拷贝备份文件到宿主机第七步创建的的目录
- 整理数据
- 宿主机与目标服务器设置免密,然后将备份文件分发到目标服务器
#!/bin/bash
docker exec -i mysql bash<<'EOF'
#docker exec -it mysql /bin/bash<<'EOF'
# 判断目录是不是已经存在,如果不存在则创建
if [ ! -d "/backups/mysql" ]; then
mkdir -p /backups/mysql
fi
# gimline 为数据库的名称
mysqldump -u nsc-dev --password=nsc_dev@intranet gimline > /backups/mysql/gimline_$(date +%Y%m%d).sql#添加多行即可
#删除超过10天的数据
rm -f /backups/mysql/gimline_$(date -d -10day +%Y%m%d).sql
exit
EOF
# 判断目录是不是已经存在,如果不存在则创建
if [ ! -d "/backups/mysql" ]; then
mkdir -p /backups/mysql
fi
# 将docker中的备份的数据拷贝到宿主机上。mysql是容器name
docker cp mysql:/backups/mysql/gimline_$(date +%Y%m%d).sql /backups/mysql
#删除超过10天的数据
rm -f /backups/mysql/gimline_$(date -d -10day +%Y%m%d).sql#分发数据到远程服务器
scp /backups/mysql/* root@10.83.43.78:/backups/mysql/
2.根据备份,恢复数据(要有对应的db,没有表也是可以恢复数据的,db是必须要存在的)
mysql -u nsc-dev -p'nsc_dev@intranet' gimline < /backups/mysql/gimline_20211216.sql
3.安装cronie
此处提供离线方式安装,下载好rpm,此处提供下载rpm包地址
rpm -ivh cronie-1.4.11-23.el7.x86_64.rpm --nodeps
rpm -ivh crontabs-1.11-6.20121102git.el7.noarch.rpm
rpm -ivh cronie-anacron-1.4.11-23.el7.x86_64.rpm
命令如下
service crond start
service crond stop
service crond restart
service crond reload
service crond status
4.编辑任务
crontab -e每天凌晨12点01分执行该路径下脚本
1 0 * * * sh /root/backup_docker_mysql.shcron示例,剩下自己研究
* * * * * command
分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天) 命令
5.脚本查看,添加了从宿主机到远程服务器命令(宿主机配置了免密登录远程服务器)
分发私钥参考如下
配置免密登录服务器
生成私钥
/root目录下执行如下命令,一路回车
ssh-keygen
分发私钥到目标的服务器(此处10.83.43.78就是目标服务器),也可以发给自己
ssh-copy-id root@10.83.43.78
测试连接
ssh root@IP/hostname调整后的脚本如下