Docker 部署 MySQL 实战

在现代应用开发与数据管理领域,MySQL 作为一款广泛使用的开源关系型数据库管理系统,扮演着极为重要的角色。而 Docker 容器化技术的出现,为 MySQL 的部署提供了一种便捷、高效且可移植的解决方案。本文将详细介绍如何使用 Docker 部署 MySQL 的实战过程。

一、准备工作

在开始部署之前,首先需要确保已经在目标服务器或本地开发环境中安装了 Docker。如果尚未安装,请根据操作系统的类型(如 Linux、Windows 或 macOS)前往 Docker 官方网站下载并安装相应的 Docker 版本。

二、拉取 MySQL 镜像

Docker 镜像类似于一个包含了应用程序及其所有依赖项的模板。MySQL 在 Docker Hub 上有官方维护的镜像,我们可以直接拉取该镜像到本地。

打开终端或命令提示符,执行以下命令:

docker pull mysql:latest

这里的 mysql:latest 表示拉取 MySQL 的最新版本镜像。当然,也可以指定特定的版本号,如 mysql:8.0 等,以确保使用的是经过测试和稳定的版本。

三、创建并启动 MySQL 容器

  1. 镜像拉取完成后,就可以基于该镜像创建并启动 MySQL 容器了。使用以下命令:
docker run -d \
  --name mysql-container \
  -e MYSQL_ROOT_PASSWORD=your_root_password \
  -p 3306:3306 \
  mysql:latest

在上述命令中:

  • -d 参数表示让容器在后台运行,这样终端就可以继续执行其他命令而不会被容器的输出所阻塞。
  • --name mysql-container 为容器指定了一个名称,方便后续对容器进行管理和操作。这里将容器命名为 mysql-container,你可以根据自己的需求修改名称。
  • -e MYSQL_ROOT_PASSWORD=your_root_password 用于设置 MySQL 的 root 用户密码。请务必将 your_root_password 替换为一个强密码,以保障数据库的安全。同时,需要注意密码的复杂性,避免使用过于简单的密码,如生日、纯数字或纯字母组合等,建议包含大小写字母、数字和特殊字符的组合。
  • -p 3306:3306 是端口映射设置。将宿主机的 3306 端口映射到容器内的 3306 端口,这样就可以通过宿主机的 IP 地址和 3306 端口访问容器内的 MySQL 服务。如果宿主机上的 3306 端口已经被其他应用占用,可以将宿主机的端口修改为其他未被占用的端口,如 -p 3307:3306,但在连接数据库时需要相应地修改端口号。另外,在生产环境中,需要谨慎考虑端口的暴露情况,尽量避免将数据库端口直接暴露在公网上,可通过防火墙或其他网络安全策略进行限制。
  1. 容器启动后,可以使用以下命令查看容器的运行状态:
docker ps

该命令会列出当前正在运行的容器信息,包括容器 ID、名称、镜像名称、创建时间以及端口映射等信息。如果看到 mysql-container 在列表中,并且状态为 Up,则表示 MySQL 容器已经成功启动。

四、连接到 MySQL 容器

有多种方式可以连接到刚刚启动的 MySQL 容器中的数据库。

  1. 使用 MySQL 命令行客户端:
    • 如果宿主机上已经安装了 MySQL 命令行客户端,可以直接使用以下命令连接:
mysql -h 127.0.0.1 -P 3306 -u root -p

其中,-h 表示主机地址,这里使用 127.0.0.1 表示连接到本地(宿主机);-P 是端口号,根据前面的端口映射设置,如果是默认的 3306 端口则无需修改;-u 是用户名,这里使用 root 用户;-p 表示需要输入密码,输入之前设置的 your_root_password 即可登录到 MySQL 容器内的数据库。在连接时,如果遇到连接失败的情况,需要检查密码是否正确、端口是否被占用或网络是否正常等问题。

  1. 使用数据库管理工具:
    • 也可以使用一些图形化的数据库管理工具,如 Navicat、MySQL Workbench 等。在创建新连接时,设置主机为宿主机的 IP 地址,端口为映射后的端口(如 3306),用户名是 root,密码是之前设置的密码,然后点击连接即可。需要注意的是,不同的数据库管理工具可能在设置连接参数时有一些细微的差别,需要仔细核对。

五、数据持久化

默认情况下,MySQL 容器内的数据存储在容器的文件系统中。如果容器被删除,数据将会丢失。为了实现数据的持久化保存,可以使用 Docker 数据卷。

  1. 创建数据卷:
docker volume create mysql-data
  1. 在启动 MySQL 容器时,挂载数据卷:
docker run -d \
  --name mysql-container \
  -e MYSQL_ROOT_PASSWORD=your_root_password \
  -p 3306:3306 \
  -v mysql-data:/var/lib/mysql \
  mysql:latest

这里的 -v mysql-data:/var/lib/mysql 表示将创建的 mysql-data 数据卷挂载到容器内的 /var/lib/mysql 目录,该目录是 MySQL 存储数据的默认目录。这样,即使容器被删除或重新创建,数据卷中的数据仍然会保留。在使用数据卷时,如果出现数据卷挂载失败的情况,可能是数据卷名称错误或者磁盘空间不足等原因,需要仔细排查。

六、容器的备份与恢复

  1. 备份
    • 要备份 MySQL 容器内的数据,可以使用以下命令进入容器并执行 mysqldump 命令:
docker exec -it mysql-container sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > backup.sql

上述命令会将容器内所有数据库的结构和数据备份到宿主机当前目录下的 backup.sql 文件中。需要注意的是,exec mysqldump 命令中的密码部分需要使用双引号括起来,并且 $MYSQL_ROOT_PASSWORD 是容器内部环境变量,用于获取 root 用户密码。在执行备份命令时,如果备份过程中出现错误,可能是由于数据库连接问题、权限不足或者磁盘空间不足等原因,需要及时检查并解决。

  1. 恢复
    • 当需要恢复数据时,可以先创建一个临时的 MySQL 容器,并将备份文件挂载到容器内,然后在容器内执行 mysql 命令进行恢复:
docker run -it --rm \
  --name mysql-restore-container \
  -v $(pwd)/backup.sql:/backup.sql \
  -e MYSQL_ROOT_PASSWORD=your_root_password \
  mysql:latest sh -c 'mysql -uroot -p"$MYSQL_ROOT_PASSWORD" < /backup.sql'

在上述命令中,-v $(pwd)/backup.sql:/backup.sql 将宿主机当前目录下的 backup.sql 文件挂载到容器内的 /backup.sql 文件,然后在容器内执行 mysql -uroot -p"$MYSQL_ROOT_PASSWORD" < /backup.sql 命令将备份数据恢复到 MySQL 数据库中。--rm 参数表示容器在退出后自动删除,因为这只是一个临时用于恢复数据的容器。在恢复数据时,如果出现恢复失败的情况,可能是备份文件损坏、数据库版本不兼容或者权限问题等,需要仔细排查原因并解决。

通过以上步骤,我们成功地使用 Docker 部署了 MySQL 数据库,并实现了数据的持久化、备份与恢复等重要功能。这种基于 Docker 的部署方式使得 MySQL 的管理更加灵活、便捷,无论是在开发环境还是生产环境中,都能够快速地搭建和维护 MySQL 服务,为应用程序提供稳定可靠的数据存储支持。但在整个过程中,需要时刻关注各种可能出现的问题并及时解决,以确保数据库的正常运行和数据的安全。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/923975.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DevOps引领数字化转型新趋势

DevOps帮助数字化转型 在数字化转型的大潮中&#xff0c;DevOps作为一种文化、运动和实践&#xff0c;已经成为推动企业快速适应市场变化、提高竞争力的关键因素。DevOps的核心在于打破开发&#xff08;Development&#xff09;和运维&#xff08;Operations&#xff09;之间的…

ctfshow

1,web21 Basic认证采用Base64加密方式&#xff0c;Base64解码字符串发现是 用户名:密码 的格式进行Base64编码。 密码shark63 2,web22 用 子域名扫描器 扫出flag.ctf.show拿到flag&#xff0c;但这个域名已经没了所以就直接交的官方提供的flag。 3,web23 这段PHP代码是一个简单…

从 0 到 1 掌握部署第一个 Web 应用到 Kubernetes 中

文章目录 前言构建一个 hello world web 应用项目结构项目核心文件启动项目 检查项目是否构建成功 容器化我们的应用编写 Dockerfile构建 docker 镜像推送 docker 镜像仓库 使用 labs.play-with-k8s.com 构建 Kubernetes 集群并部署应用构建 Kubernetes 集群环境编写部署文件 总…

数据结构与算法——1120——时间空间效率问题求边界值

目录 1、效率问题 1、时间复杂度 1、O(1) 2、O(n) 3、O(n) 或O(n*log2n)——n倍的log以2为底n的对数 例题 4、O(n) 2、空间复杂度 3、数组和链表 2、面试题之求边界值 题目 解答 &#xff08;1&#xff09;-i &#xff08;2&#xff09;~i &#xff08;3&#x…

爬虫与反爬-Ja3指纹风控(Just a moment...)处理方案及参数说明

概述&#xff1a;本文将针对 Ja3 指纹检测风控进行处理&#xff0c;举例了一个案例并使用两种不同的破解方案进行突破&#xff0c;同时深入了解指纹间不同字符所代表的含义 指纹检测背景&#xff1a; 1、每一个设备、软件都有独属于自己的设备信息、版本号、加密算法、椭圆算…

【JUC-JMM】Java Memory Model Java内存模型

Java内存模型--JMM 一、JMM是什么&#xff1f;二、Happens-Before原则三、JMM有什么用&#xff1f; 一、JMM是什么&#xff1f; JMM&#xff0c;全拼Java Memory Model&#xff0c;翻译过来就是Java内存模型。 那么&#xff0c;我们不禁思索&#xff0c;Java内存模型有什么用&…

SpringAI:Java 开发的智能新利器

一、SpringAI 简介 随着人工智能技术的飞速发展&#xff0c;越来越多的开发者开始探索如何将 AI 能力集成到现有的应用中来提升产品的智能化水平。Spring AI 正是为 Java 开发者提供的一款强大的 AI 框架&#xff0c;使得这一集成过程变得前所未有的简单和高效。 本文将深入探…

在Excel中处理不规范的日期格式数据并判断格式是否正确

有一个Excel表&#xff0c;录入的日期格式很混乱&#xff0c;有些看着差不多&#xff0c;但实际多一个空格少一个字符很难发现&#xff0c;希望的理想格式是 1980-01-01&#xff0c;10位&#xff0c;即&#xff1a;“YYYY-mm-dd”&#xff0c;实际上数据表中这样的格式都有 19…

【我在CSDN成长】我的五周年创作纪念日

感叹 五年的时光匆匆而过&#xff0c; 像一阵风&#xff0c;拂过岁月的湖面&#xff0c; 泛起层层涟漪&#xff0c;又悄然离去。 曾经的欢笑与泪水&#xff0c; 那些奋斗的日夜&#xff0c; 如同电影般在脑海中放映&#xff0c; 却已成为遥远的回忆。 五年&#xff0c;说长不长…

Jmeter中的定时器

4&#xff09;定时器 1--固定定时器 功能特点 固定延迟&#xff1a;在每个请求之间添加固定的延迟时间。精确控制&#xff1a;可以精确控制请求的发送频率。简单易用&#xff1a;配置简单&#xff0c;易于理解和使用。 配置步骤 添加固定定时器 右键点击需要添加定时器的请求…

BERT 详解

BERT简介 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是由 Google 在 2018 年提出的一种预训练语言模型。BERT 在自然语言处理&#xff08;NLP&#xff09;领域取得了重大突破&#xff0c;因为它能够有效地捕捉文本的上下文信息&am…

macos 14.0 Monoma 修改顶部菜单栏颜色

macos 14.0 设置暗色后顶部菜单栏还维持浅色&#xff0c;与整体不协调。 修改方式如下&#xff1a;

数据库-MySQL-Dynamic-Datasource源码解析

文章目录 前言一、简介二、整体流程三、核心解析四、总结 前言 多数据源的应用在日常项目中也是很常见的场景。 dynamic-datasource的功能&#xff0c;用起来的确很方便&#xff0c;只需要一个DS注解&#xff0c;加上一些简单的配置即可完成多数据源的切换。究竟是怎么做到的…

YB2503HV:高效率降压IC,助力电动车、太阳能设备等领域的能源转换

今天我要向大家介绍一款引人注目的产品—— YB2503HV 100V 3A SOP8内置MOS 高效率降压IC。这款单片集成芯片具备可设定输出电流的开关型降压恒压驱动器功能&#xff0c;可广泛应用于电动车、太阳能设备、电子电池充电等领域。让我们一起来看看它的特点和应用吧&#xff01; 首先…

架构-微服务架构

文章目录 前言一、系统架构演变1. 单体应用架构2. 垂直应用架构3. 分布式架构4. SOA 架构5. 微服务架构 二. 微服务架构介绍1. 微服务架构的常见问题2. 微服务架构的常见概念3. 微服务架构的常见解决方案4. 解决方案选型 三. Spring Cloud Alibaba介绍1. 主要功能2. 组件 前言 …

【一个简单的整数问题2——线段树】

题目 代码 下面的两个代码的区别在于modify的分类&#xff0c;modify最简单的分类方式是存在性分类&#xff0c;另一种类似某些query采用的三段式分类&#xff0c;详细见代码 存在性 #include <bits/stdc.h> using namespace std; using ll long long; const int N 1…

通用网络安全设备之【防火墙】

概念&#xff1a; 防火墙&#xff08;Firewall&#xff09;&#xff0c;也称防护墙&#xff0c;它是一种位于内部网络与外部网络之间的网络安全防护系统&#xff0c;是一种隔离技术&#xff0c;允许或是限制传输的数据通过。 基于 TCP/IP 协议&#xff0c;主要分为主机型防火…

如何启动 Docker 服务:全面指南

如何启动 Docker 服务:全面指南 一、Linux 系统(以 Ubuntu 为例)二、Windows 系统(以 Docker Desktop 为例)三、macOS 系统(以 Docker Desktop for Mac 为例)四、故障排查五、总结Docker,作为一种轻量级的虚拟化技术,已经成为开发者和运维人员不可或缺的工具。它允许用…

构建英语知识网站:Spring Boot框架解析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Android mk/bp构建工具介绍

零. 前言 由于Bluedroid的介绍文档有限&#xff0c;以及对Android的一些基本的知识需要了(Android 四大组件/AIDL/Framework/Binder机制/JNI/HIDL等)&#xff0c;加上需要掌握的语言包括Java/C/C等&#xff0c;加上网络上其实没有一个完整的介绍Bluedroid系列的文档&#xff0…