Jpom Jpom
🔖首页
  • 一键安装教程
  • Docker 容器安装教程
  • 离线安装教程
  • v2.9.X迁移到v2.10.X指南
  • v2.8.X迁移到v2.9.X指南
  • 数据库迁移到 mysql
  • 实践案例目录
  • 名词解释
  • 什么是 DSL
  • 权限说明
💡DSL说明
  • 加入社区讨论
  • 如何贡献
  • 贡献者们
🤝用户
  • 下载中心
  • Gitee (opens new window)
  • Github (opens new window)
🔖首页
  • 一键安装教程
  • Docker 容器安装教程
  • 离线安装教程
  • v2.9.X迁移到v2.10.X指南
  • v2.8.X迁移到v2.9.X指南
  • 数据库迁移到 mysql
  • 实践案例目录
  • 名词解释
  • 什么是 DSL
  • 权限说明
💡DSL说明
  • 加入社区讨论
  • 如何贡献
  • 贡献者们
🤝用户
  • 下载中心
  • Gitee (opens new window)
  • Github (opens new window)
❤️成为赞助商
  • 解决方案

    • 如何使用 Jpom 的在线构建为 Jpom 发版
    • 万能的 DSL 项目模板(Java)
    • 基于 Jpom 搭建应用部署系统
    • 一键安装实践
    • Docker 容器安装实践
    • 离线安装实践
    • 自定义第三方通知
  • 在线构建

    • 本地构建 + SSH 发布 java 项目
    • 本地构建 + 项目发布 node 项目
    • 本地构建 + SSH 发布 node 项目
    • 本地构建 + 自定义管理 python 项目
    • 容器构建 + 项目发布 java 项目
    • Gitee 提交代码后自动执行构建
    • 使用 gradle 本地构建打包项目并发布到节点
    • GitLab 提交代码后自动执行构建
    • 通过私人令牌导入仓库
  • docker

    • 管理 docker
    • 在线构建 docker 镜像
    • 在线构建 docker 镜像并推送至远程仓库
    • docker 安装 redis 流程
  • 节点管理

    • 管理编译安装的 nginx
  • 项目管理

    • 自定义管理 java 项目
    • DSL项目接口探活
    • 在 Jpom 中如何使用 DSL 项目来管理 TOMCAT
    • 在 Jpom 中如何使用 DSL 项目来管理 elasticsearch
  • 项目监控

    • 监控项目 + 邮件报警通知
    • DSL 项目接口探活监控报警
  • 在线脚本

    • 使用节点脚本定时备份 docker 中的 mysql 数据库
      • 前言
      • 需要准备的环境
      • 创建脚本
        • 脚本内容
        • 脚本整体流程是
      • 查看执行记录
      • 备份完成后想上传到其他地方?
      • 完美实现
  • SSH管理

    • 在线管理 SSH 终端以及上传文件(SFTP)和执行命令历史
  • 日常管理

    • 如何开启 h2-console web 访问功能
  • 实践案例
  • 在线脚本
bwcx_jzy
2022-08-01
目录

使用节点脚本定时备份 docker 中的 mysql 数据库

# 前言

本文主要介绍:

如何使用 Jpom 中的节点脚本实现定时备份 docker 容器中的 mysql 数据到物理机中

文中使用到的依赖环境版本仅供参考,实际使用中请根据业务情况来安装对应的版本

注意:本文默认已经认为您已经安装好 Jpom 服务端并且配置节点

# 需要准备的环境

环境准备请自行查阅 Jpom 安装相关文档准备奥

  1. Jpom 服务端、
  2. Jpom 插件端
  3. 插件端所在到服务器中安装 docker 并且运行了 mysql 容器

# 创建脚本

img

img

# 脚本内容

注意:您需要根据自己的情况修改如下信息

  • 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

# 脚本整体流程是

  1. 进入容器 bash 终端
  2. 使用 mysqldump 导出数据
  3. 将导出到 sql 文件进行压缩
  4. 删除备份出到 sql 文件,保留 tar.gz 文件

这里定时是一小时一次,具体可以跟进自己业务调整

# 查看执行记录

img

img

# 备份完成后想上传到其他地方?

在到处 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

注意:您需要根据自己的情况修改如下信息

  • sql 文件保存路径
  • mysql 容器名称
  • mysql 数据库密码
  • 备份全部数据库还是指定数据库
  • scp 到到服务器 IP (需要提前配置 SSH 信任链接)

# 完美实现

节点脚本可以使用如下方式执行:

  1. 定时执行
  2. 手动执行
  3. webhook 触发器(钩子)外部调用

您可以根据您到业务需求来搭配不同方式执行

帮助我们改善此文档 (opens new window)
上次更新: 2022/08/08, 19:51:18
DSL 项目接口探活监控报警
在线管理 SSH 终端以及上传文件(SFTP)和执行命令历史

← DSL 项目接口探活监控报警 在线管理 SSH 终端以及上传文件(SFTP)和执行命令历史→

最近更新
01
带您了解能替代 Jenkins 的国产【项目运维】开源软件
03-20
02
成为赞助商
03-06
03
在 Jpom 中如何使用 DSL 项目来管理 elasticsearch
02-24
更多文章>
Theme by Vdoing | Copyright © 2017-2023 MIT License  京ICP备17044819号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×