使用节点脚本定时备份 docker 中的 mysql 数据库
# 前言
本文主要介绍:
如何使用 Jpom 中的节点脚本实现定时备份 docker 容器中的 mysql 数据到物理机中
文中使用到的依赖环境版本仅供参考,实际使用中请根据业务情况来安装对应的版本
注意:本文默认已经认为您已经安装好 Jpom 服务端并且配置节点
# 需要准备的环境
环境准备请自行查阅 Jpom 安装相关文档准备奥
- Jpom 服务端、
- Jpom 插件端
- 插件端所在到服务器中安装 docker 并且运行了 mysql 容器
# 创建脚本
# 脚本内容
注意:您需要根据自己的情况修改如下信息
- sql 文件保存路径
- mysql 容器名称
- mysql 数据库密码
- 备份全部数据库还是指定数据库
#!/bin/bash
echo '开始备份数据'
now=$(date "+%Y%m%d_%H:%M:%S")
backup_dir="/data/back_up"
#获取容器id
mysqlid=`docker ps -aqf "name=xxx-mysql"`
#进入mysql容器
docker exec -i ${mysqlid} bash<<'EOF'
#mysqldump导出表结构和数据
if [ ! -d "/backup" ]; then
mkdir -p /backup
fi
if [ -f "/backup/db.sql" ]; then
rm -rf /backup/db.sql
fi
mysqldump --single-transaction -u root -h 127.0.0.1 --password=xxxxx --all-databases > /backup/db.sql
echo '成功制作备份sql'
if [ $? -ne 0 ]; then
echo 'mysqldump运行失败'
exit
EOF
fi
exit
EOF
#将容器内sql文件导出到服务器
if [ ! -d "${backup_dir}" ]; then
mkdir -p "${backup_dir}"
fi
docker cp ${mysqlid}:/backup/db.sql ${backup_dir}/db_${now}.sql
if [ $? -ne 0 ]; then
echo 'docker cp文件失败'
exit
fi
echo '完成备份数据,压缩'
# ls
filename="db_${now}.sql"
tarfilename="db_${now}.sql.tar.gz"
reulst=`tar --totals -czPf ${backup_dir}/${tarfilename} ${backup_dir}/${filename}`
echo "压缩完成:${reulst}"
rm -rf ${backup_dir}/${filename}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 脚本整体流程是
- 进入容器 bash 终端
- 使用 mysqldump 导出数据
- 将导出到 sql 文件进行压缩
- 删除备份出到 sql 文件,保留 tar.gz 文件
这里定时是一小时一次,具体可以跟进自己业务调整
# 查看执行记录
# 备份完成后想上传到其他地方?
在到处 sql 文件后可以继续执行你想要的操作,如:使用 scp 上传到其他服务器中
命令示例:
#!/bin/bash
echo '开始备份数据'
now=$(date "+%Y%m%d_%H:%M:%S")
backup_dir="/data/back_up"
#获取容器id
mysqlid=`docker ps -aqf "name=xxxx-mysql"`
#进入mysql容器
docker exec -i ${mysqlid} bash<<'EOF'
#mysqldump导出表结构和数据
if [ ! -d "/backup" ]; then
mkdir -p /backup
fi
if [ -f "/backup/db.sql" ]; then
rm -rf /backup/db.sql
fi
mysqldump --single-transaction -u root -h 127.0.0.1 --password=xxxxx --all-databases > /backup/db.sql
echo '成功制作备份sql'
if [ $? -ne 0 ]; then
echo 'mysqldump运行失败'
exit
EOF
fi
exit
EOF
#将容器内sql文件导出到服务器
if [ ! -d "${backup_dir}" ]; then
mkdir -p "${backup_dir}"
fi
docker cp ${mysqlid}:/backup/db.sql ${backup_dir}/db_${now}.sql
if [ $? -ne 0 ]; then
echo 'docker cp文件失败'
exit
fi
echo '完成备份数据,压缩+开始转移服务器'
# ls
filename="db_${now}.sql"
tarfilename="db_${now}.sql.tar.gz"
reulst=`tar --totals -czPf ${backup_dir}/${tarfilename} ${backup_dir}/${filename}`
echo "压缩完成:${reulst}"
echo 'scp to staring'
scp ${backup_dir}/${tarfilename} root@172.19.106.253:/data/mysql/${tarfilename}
echo 'scp to done'
rm -rf ${backup_dir}/${filename}
rm -rf ${backup_dir}/${tarfilename}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
注意:您需要根据自己的情况修改如下信息
- sql 文件保存路径
- mysql 容器名称
- mysql 数据库密码
- 备份全部数据库还是指定数据库
- scp 到到服务器 IP (需要提前配置 SSH 信任链接)
# 完美实现
节点脚本可以使用如下方式执行:
- 定时执行
- 手动执行
- webhook 触发器(钩子)外部调用
您可以根据您到业务需求来搭配不同方式执行
帮助我们改善此文档 (opens new window)
上次更新: 2022/08/08, 19:51:18