当前位置: 首页 > news >正文

解决在部署springboot项目的docker中执行备份与之相连接的mysql容器命令

文章目录

  • 问题描述
  • 解决思路
  • 问题解决
    • 容器构建mysql客户端安装
    • 容器与主机的交互
    • docker中执行 mysqldump 命令
    • 解决mysql8密码验证问题

问题描述

  • 由于,使用1panel可视化的面板来部署springboot项目,可以很方便地安装和使用mysql,redis等环境,另外部署的项目使用面板管理起来也很方便。所以,难免会遇到不同容器之间的交互。
  • springboot部署在一个容器中中,mysql部署在另一个容器中,在springboo项目中实现定时任务,备份mysql容器的数据库文件,如何实现?

解决思路

  • 首先,需要在容器环境中使用容器相关命令
    • 容器安装mysql客户端
    • 容器内的 Docker CLI 与主机上的 Docker 守护进程进行交互
    • 执行数据库备份命令

问题解决

容器构建mysql客户端安装

  • 修改软件源,安装mysql-client
# 基于官方的 openjdk:8-jdk-slim 镜像构建
FROM openjdk:8-jdk-slim
# 更新源列表
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \apt-get update# 安装必要的软件包
RUN apt-get install -y \curl \default-mysql-client \&& rm -rf /var/lib/apt/lists/*# 设置工作目录
WORKDIR /app# 将项目文件复制到容器中
COPY ./spring-0.0.1-SNAPSHOT.jar /app
# 添加执行权限
RUN chmod +x /xxx/docker_backup.sh
# 暴露应用程序端口
EXPOSE 8080# 启动应用程序
CMD ["java", "-jar", "spring-0.0.1-SNAPSHOT.jar"]

容器与主机的交互

root@d31e5e724869:/app# docker exec $mysql_docker_name mysqldump -u root -p$password -h localhost db_name> /home/backup.sql
bash: docker: command not found 
  • 错误消息 “bash: docker: command not found” 表示 Docker 命令在 Docker 容器内不可用。

  • 因为 Docker 通常安装在主机系统上,而不是容器内。容器在隔离的环境中运行,通常默认情况下无法直接访问主机上的 Docker 命令。

  • 如果需要在 Docker 容器内执行 Docker 命令,可以使用 Docker-in-Docker (DinD) 或 Docker outside of Docker (DooD) 方法。通常不建议在 Docker 容器内运行 Docker 命令。

  • 两种方法的简要解释:

  1. Docker-in-Docker (DinD): 涉及在 Docker 容器内运行 Docker 守护进程。它允许你从一个容器内构建和运行其他容器。但要正确设置它可能会有一定挑战,而且可能存在安全问题。

  2. Docker outside of Docker (DooD): 将主机上的 Docker 套接字挂载到容器中。容器内的 Docker CLI 与主机上的 Docker 守护进程进行交互,从容器内控制主机上的 Docker。比 DinD 更安全。

  3. 修改 Docker 运行命令: 更新你的 docker run 命令,将主机上的 Docker 套接字挂载到容器中。替换现有的 docker run 命令如下:

docker run -d --name xxx-p 8080:8080 \
-v /var/run/docker.sock:/var/run/docker.sock \  # 挂载 Docker 套接字
xxx
  • 通过添加 -v /var/run/docker.sock:/var/run/docker.sock,允许容器内的 Docker CLI 与主机上的 Docker 守护进程通信。

docker中执行 mysqldump 命令

  • 在挂载了主机上的 Docker 套接字的容器中执行 docker exec 命令,会遇到问题,因为 docker exec 是用于在其他 Docker 容器中运行命令的。
  • 要在同一容器中执行 mysqldump 命令,可以直接运行 mysqldump 而无需使用 docker exec。
    如:
mysqldump -u root -pxxx -h mysql_docker_name db_name > /home/backup.sql

  • 使用脚本备份

    • 在dockerfile中添加代码
    # 添加执行权限
    RUN chmod +x /usr/docker_backup.sh
    
  • 如果 MySQL 和 program容器在同一个 Docker 网络中,并且想从 program容器中连接到 MySQL 容器来执行备份命令,你可以通过容器名称进行连接。

  • 在 Docker 网络中,容器可以通过它们的名称进行通信。

2.在 program 容器中执行备份命令: 在 docker_backup.sh 脚本中,可以使用 MySQL 容器的名称来执行备份命令。

#!/bin/bash
# -h mysql_docker_name 意味着使用 xxx 作为主机名进行连接
mysqldump -u root -pxxx -h mysql_docker_name db_name > /home/backup/backup.sql

解决mysql8密码验证问题


mysqldump: Got error: 2002: "Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)" when trying to connect  mysql报错2023-10-18T09:53:48.190738Z 82 [Warning] [MY-013360] [Server] Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead' 
  • 错误表明 mysqldump 无法通过默认的本地套接字连接到 MySQL 服务器,并且还有一个关于密码插件的警告。这通常发生在容器化环境中,因为 MySQL 服务器和 mysqldump 命令运行在不同的容器中。

  1. 指定 MySQL 服务器的主机和端口: 由于 mysqldump 默认尝试通过本地套接字连接 MySQL 服务器,明确指定要使用的主机和端口。
    mysqldump -u root -p$your_password --default-character-set=utf8mb4 -h $mysql_host $db_name > /home/backup.sql
    
  • mysql_host 替换为你 MySQL 服务器容器的主机名或 IP 地址,将 your_password替换为 MySQL 服务器用户密码。

解决密码插件警告

  • 关于密码插件的警告通常是由于 MySQL 8 之后使用了默认的密码插件 caching_sha2_password 而不是 mysql_native_password。
    • 如果你正在创建用户,可以使用以下命令指定密码插件:
     CREATE USER 'your_user'@'%' IDENTIFIED WITH 'caching_sha2_password' BY 'your_password';
    
    • 如果用户已创建,请更改密码插件并重置密码:
     ALTER USER 'your_user'@'%' IDENTIFIED WITH 'caching_sha2_password' BY 'your_password';
    

相关文章:

解决在部署springboot项目的docker中执行备份与之相连接的mysql容器命令

文章目录 问题描述解决思路问题解决容器构建mysql客户端安装容器与主机的交互docker中执行 mysqldump 命令解决mysql8密码验证问题解决密码插件警告 问题描述 由于,使用1panel可视化的面板来部署springboot项目,可以很方便地安装和使用mysql&#xff0c…...

正文Delphi XE Android下让TMemo不自动弹出键盘

用TMemo来显示一段说明文字,可一点Memo,就弹出键盘,找了半天控制键盘的属性,没找到。最后将readOnly设置为True搞定。 如果需要一个form都不显示keyboard,那么可以利用全局变量 VKAutoShowMode来控制,这个全局变量可以有下面三个值…...

[1Panel]开源,现代化,新一代的 Linux 服务器运维管理面板

测评介绍 本期测评试用一下1Panel这款面板。1Panel是国内飞致云旗下开源产品。整个界面简洁清爽,后端使用GO开发,前端使用VUE的Element-Plus作为UI框架,整个面板的管理都是基于docker的,想法很先进。官方还提供了视频的使用教程&…...

PG集合查询

1.运算符 1.1 union并集 连接上下语句 union distinct连接并且去重 all不去重 1.2 intersect交集 上下交集 distinct连接并且去重 all不去重 1.3 except除外 上面除了下面 distinc去重 all不去重...

目标检测应用场景和发展趋势

参考: 目标检测的未来是什么? - 知乎 (zhihu.com)https://www.zhihu.com/question/394900756/answer/32489649815大应用场景 1 行人检测: 遮挡问题:行人之间的互动和遮挡是非常常见的,这给行人检测带来了挑战。非刚性…...

Confluence 自定义博文列表

1. 概述 Confluence 自有博文列表无法实现列表自定义功能,实现该需求可采用页面中引用博文宏标签控制的方式 2. 实现方式 功能入口: Confluence →指定空间→创建页面 功能说明: (1)页面引用博文宏 (…...

chrome历史版本下载

chrome历史版本下载 windows Google Chrome all versions on Windows linux版本 Google Chrome 64bit Linux版_chrome浏览器,chrome插件,谷歌浏览器下载,谈笑有鸿儒...

Messari发布Moonbeam简报,每日交易量稳步增长,首次公布利润数据

区块链数据公司Messari首次发布Moonbeam项目分析简报,从项目市值、链上数据表现、质押以及Moonbeam的技术优势XCM使用量等角度全面分析。这个再熊市初期上线的项目一直在默默开发,并在跨链互操作领域拥有了相当的实操成绩。我们翻译了Messari简报中的部分…...

数据库 锁、索引、在实际开发中怎么设置和优化

数据库锁和索引是数据库管理的两个重要方面,它们对于确保数据的一致性和提高查询性能具有重要作用。在实际开发中,正确地设置和优化锁和索引对于构建高效、稳定的系统至关重要。下面是一些关于如何在实际开发中设置和优化锁和索引的建议: 锁…...

超详细彻底卸载Anaconda详细教程

一、在开始处打开Anaconda Prompt 二、打开后,输入conda install tqdm -f命令并按回车键 conda install tqdm -f三、之后页面会出现一个WANNING,这个我们不用在意,然后会出现一个y/n提示框,在这里我们输入y或者Y y四、输入cond…...

Python--随机出拳(random)--if判断--综合案例练习:石头剪刀布

注:涉及相关链接: Python:if判断--综合案例练习:石头剪刀布-CSDN博客 Python语言非常的强大,强大之处就在于其拥有很多模块(module),这些模块中拥有很多别人已经开发好的代码&…...

微信小程序里配置less

介绍 在微信小程序里,样式文件的后缀名都是wxss,这导致一个问题,就是页面样式过多的时候,要写很多的类名来包裹,加大了工作量,还很有可能会写错样式。这时可以配置一个less,会大大提高代码编辑…...

MySq修改配置文件

要修改 MySQL 的配置文件,您可以按照以下步骤进行操作: 1、打开 MySQL 的配置文件 在大多数 Linux 系统上,默认的配置文件路径是 /etc/my.cnf 或 /etc/mysql/my.cnf。您可以使用文本编辑器(如 vim、nano)以管理员权限打开该文件。 sudo vim /etc/my.cnf 2、进行修改 …...

HTML 表格及练习

表格 概述 表格是一种二维结构,横行纵列。 由单元格组成。 表格是一种非常“强” 的结构: 每一行有相同的列数(单元格),每一列有相同的行数(单元格) 同一列的单元格,宽度&#…...

YOLOv5-训练自己的VOC格式数据集(VOC、自建数据集)

YOLOv5:训练自己的 VOC 格式数据集 1. 自定义数据集 1.1 环境安装 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple注意: 安装 lxmlPillow 版本要低于 10.0.0,解释链接: module ‘PIL.Image’ has no attri…...

基于Java的考研信息查询系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…...

Linux性能优化--性能追踪:受CPU限制的应用程序(GIMP)

10.0 概述 本章包含了一个例子:如何用Linux性能工具在受CPU限制的应用程序中寻找并修复性能问题。 阅读本章后,你将能够: 在受CPU限制的应用程序中明确所有的CPU被哪些源代码行使用。用1trace和oprofile弄清楚应用程序调用各种内部与外部函…...

BERT变体(1):ALBERT、RoBERTa、ELECTRA、SpanBERT

Author:龙箬 Computer Application Technology Change the World with Data and Artificial Intelligence ! CSDNweixin_43975035 *天下之大,虽离家万里,何处不可往!何事不可为! 1. ALBERT \qquad ALBERT的英文全称为A Lite versi…...

域控操作二:设置域用户使用简单密码

过程太多简单 直接写出路径更改即可 组策略—计算机配置----策略—Windows设置–安全设置----账户策略–密码策略 按自己想法改就行了 注意一点!!!!! 要么自己设置策略,要么从默认策略改!&am…...

python---三目运算符

在Python中三目运算符也叫三元运算符,其主要作用:就是用于 简化if...else...语句。 基本语法: 原 if 条件判断: # 语句段1 else: # 语句段2 新-----三目运算符/三元运算符 语句段1 if 条件判断 else 语句段2 案例 输入两个数…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...

免费数学几何作图web平台

光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

二叉树-144.二叉树的前序遍历-力扣(LeetCode)

一、题目解析 对于递归方法的前序遍历十分简单,但对于一位合格的程序猿而言,需要掌握将递归转化为非递归的能力,毕竟递归调用的时候会调用大量的栈帧,存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧,而非…...