使用 Docker 部署 MySQL 8

server/2025/3/18 6:54:13/

使用 Docker 部署 MySQL 8 详细指南

MySQL 是一个广泛使用的开源关系型数据库管理系统。通过 Docker 部署 MySQL 8 可以快速搭建一个可移植、可扩展的数据库环境。本文将详细介绍如何使用 Docker 部署 MySQL 8,并讲解如何根据需求配置 MySQL。


从拉取镜像开始的详细步骤

1. 拉取 MySQL 8 镜像

首先,从 Docker Hub 拉取 MySQL 8 的官方镜像。

docker pull mysql:8.0
  • mysql:8.0:指定拉取 MySQL 8 的镜像。

2. 启动一个临时 MySQL 容器

启动一个临时的 MySQL 容器,目的是生成默认的配置文件。

docker run -d --name temp-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:8.0
  • -d:后台运行容器
  • --name temp-mysql:指定容器名称为 temp-mysql
  • -e MYSQL_ROOT_PASSWORD=my-secret-pw:设置 MySQL root 用户的密码。

3. 从容器中复制配置文件

MySQL 的配置文件通常位于 /etc/mysql 目录中。我们可以使用 docker cp 命令将配置文件复制到主机。

复制整个配置文件目录
docker cp temp-mysql:/etc/mysql /path/to/mysql-config
检查复制的文件

复制完成后,检查主机上的 /path/to/mysql-config 目录,确保文件已成功复制:

ls /path/to/mysql-config

4. 删除临时容器

配置文件已经复制到主机,现在可以删除临时容器了。

docker stop temp-mysql
docker rm temp-mysql

5. 基于自定义配置文件启动新的 MySQL 容器

现在,我们可以基于自定义配置文件启动一个新的 MySQL 容器,并将配置文件挂载到容器中。

启动容器
docker run -d \--name my-mysql \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD=my-secret-pw \-v /path/to/mysql-config:/etc/mysql \-v /path/to/mysql-data:/var/lib/mysql \mysql:8.0
  • -d:后台运行容器
  • --name my-mysql:指定容器名称为 my-mysql
  • -p 3306:3306:将主机的 3306 端口映射到容器的 3306 端口。
  • -e MYSQL_ROOT_PASSWORD=my-secret-pw:设置 MySQL root 用户的密码。
  • -v /path/to/mysql-config:/etc/mysql:将主机的配置文件目录挂载到容器/etc/mysql 目录。
  • -v /path/to/mysql-data:/var/lib/mysql:将主机的数据目录挂载到容器/var/lib/mysql 目录。

6. 验证 MySQL 容器

检查容器状态
docker ps
进入 MySQL 容器
docker exec -it my-mysql mysql -uroot -pmy-secret-pw
查看配置文件是否生效

在 MySQL 客户端中运行以下命令,检查配置文件是否生效:

SHOW VARIABLES LIKE 'max_connections';
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

自定义配置文件详解

默认配置文件结构

MySQL 8 的默认配置文件通常包括以下几个文件:

  • my.cnf:主配置文件。
  • conf.d/:额外的配置文件目录。
  • mysql.conf.d/:MySQL 服务器的配置文件目录。
示例 my.cnf

以下是一个简单的 my.cnf 配置文件示例:

[mysqld]
# 绑定 IP
bind-address = 0.0.0.0# 监听端口
port = 3306# 数据目录
datadir = /var/lib/mysql# 最大连接数
max_connections = 200# InnoDB 缓冲池大小
innodb_buffer_pool_size = 256M# 错误日志
log_error = /var/log/mysql/error.log# 慢查询日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci# 禁用符号链接
symbolic-links = 0# 禁用 DNS 解析
skip-name-resolve

高级配置与优化

1. 调整缓冲池大小

[mysqld]
innodb_buffer_pool_size = 1G

2. 启用查询缓存

[mysqld]
query_cache_type = 1
query_cache_size = 64M

3. 优化连接数

[mysqld]
max_connections = 500

案例实战

部署 MySQL 数据库服务

1. 修改配置文件

/path/to/mysql-config/my.cnf 中添加以下内容:

[mysqld]
bind-address = 0.0.0.0
port = 3306
datadir = /var/lib/mysql
max_connections = 200
innodb_buffer_pool_size = 256M
log_error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
symbolic-links = 0
skip-name-resolve
2. 启动容器
docker run -d \--name my-mysql \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD=my-secret-pw \-v /path/to/mysql-config:/etc/mysql \-v /path/to/mysql-data:/var/lib/mysql \mysql:8.0

部署 MySQL 主从复制

1. 配置主节点

在主节点的 my.cnf 中添加以下内容:

[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = mydatabase
2. 配置从节点

在从节点的 my.cnf 中添加以下内容:

[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = mydatabase
3. 启动主从复制

在主节点上创建复制用户,在从节点上配置主节点信息并启动复制。


通过以上步骤,你可以灵活地配置和管理 MySQL 8 容器,同时保留默认配置文件的模板。继续实践和探索,你将能够更高效地使用 MySQL 构建高性能的数据库服务!


http://www.ppmy.cn/server/175893.html

相关文章

LLaMA-Factory多机多卡训练实战

https://www.dong-blog.fun/post/1999 参考资料:https://llamafactory.readthedocs.io/zh-cn/latest/advanced/distributed.html 以训练qwen2.5vl 7b 为例子。 创建空间 创建数据集 如果数据集文件非常多,可以选择上tar.gz包,然后再数据集页面面,点击终端进入到…

VLLM专题(二十)—多模态输入

本页面将教你如何在 vLLM 中向多模态模型传递多模态输入。 离线推理 要输入多模态数据,请按照以下 vllm.inputs.PromptType 中的格式: prompt: 提示词(prompt)应遵循 HuggingFace 文档中记录的格式。multi_modal_data: 这是一个字典,遵循 vllm.multimodal.inputs.MultiM…

Linux下学【MySQL】中如何实现:多表查询(配sql+实操图+案例巩固 通俗易懂版~)

每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论​: 本章是MySQL篇中,非常实用性的篇章,相信在实际工作中对于表的查询,很多时候会涉及多表的查询,在多表查询…

蓝桥杯基础【暴力枚举】

暴力枚举的思路 暴力枚举(也称为穷举法)是一种通过遍历所有可能的情况来解决问题的方法。它的核心思想是:不遗漏任何一种可能性,直到找到满足条件的解。暴力枚举通常适用于数据规模较小的题目,因为它的效率相对较低&a…

美团Leaf分布式ID生成器:使用详解与核心原理解析

引言 在分布式系统中,全局唯一ID是贯穿整个业务链路的关键标识,无论是订单号、用户ID、支付流水号,还是日志追踪,都需要唯一且有序的ID来保证数据的一致性。然而,传统的自增ID方案(如数据库自增主键&#…

JavaScript基础-JS没有块级作用域

在早期版本的JavaScript(ECMAScript 5及之前),变量的作用域主要分为全局作用域和函数作用域,这意味着即使在代码块如if语句或循环体内声明的变量,在其外部也是可访问的。然而,随着ECMAScript 6 (ES6) 的发布…

网络安全一CTF入门

什么是CTF? CTF在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。它起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展至今,已经成为全球范围网络安全圈流行的竞赛形式&#xff0…

【区块链+乡村振兴】国链区块链农产品溯源系统 | FISCO BCOS 应用案例

国链区块链农产品溯源系统通过集中管理和调度计算资源,结合区块链技术,为企业提供高效、安全、可靠的农产品全链条溯源服务。 系统的技术架构包括分布式架构、区块链平台、数据存储、前端应用和物联网设备等。其分布式架构采用多节点部署,提…