Docker实战:使用Docker部署Mysql 8.0教程

举报
江湖有缘 发表于 2025/09/28 00:40:23 2025/09/28
【摘要】 Docker实战:使用Docker部署Mysql 8.0教程

一、MySQL 8.0介绍

在现代应用开发和运维中,Docker 已成为部署数据库的首选方式。MySQL 8.0 作为当前最流行的开源关系型数据库,通过 Docker 部署具有以下优势:

  • 环境一致性:确保开发、测试和生产环境完全一致
  • 快速部署:几分钟内完成数据库安装和配置
  • 资源隔离:避免与其他应用冲突
  • 易于迁移:容器化后可轻松迁移至不同服务器
  • 版本管理:轻松切换不同版本的 MySQL

二、本次实践规划

2.1 本地环境规划

本次实践为个人测试环境,操作系统版本为 Ubuntu 24.04.2 LTS。

hostname IP地址 操作系统版本 Docker版本 部署项目 备注
jeven 192.168.3.88 Ubuntu 24.04.2 LTS 28.3.3 Mysql 8.0k ——

2.2 本次实践介绍

1.本次实践部署环境为个人测试环境,生产环境请谨慎;
2.在Docker环境下部署MySQL8.0数据库。

三、本地环境检查

3.1 检查Docker服务状态

检查Docker服务是否正常运行,确保Docker正常运行。

root@jeven:~# systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: enabled)
     Active: active (running) since Thu 2025-09-18 21:50:05 CST; 3 days ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 858 (dockerd)
      Tasks: 30
     Memory: 5.2G (peak: 5.4G)
        CPU: 11min 54.268s
     CGroup: /system.slice/docker.service

3.2 检查Docker版本

检查Docker版本

root@jeven:~# docker -v
Docker version 28.3.3, build 980b856

3.3 检查docker compose 版本

检查Docker compose版本,确保2.0以上版本。

root@jeven:~# docker -v
Docker version 28.3.3, build 980b856

四、拉取MySQL 8.0 镜像

执行以下命令,拉取ySQL 8.0 镜像。

docker pull mysql:8.0

在这里插入图片描述

五、创建MySQL容器

5.1 创建挂载目录

  • 创建挂载目录
mkdir -p /docker/mysql/{data,logs,conf.d}
  • 设置目录权限
chown -R 999:999 /docker/mysql

5.2 创建容器

  • 创建MySQL容器
docker run -d \
  --name mysql8 \
  -e MYSQL_ROOT_PASSWORD=YourStrongPassword123! \
  -e MYSQL_DATABASE=mydb \
  -e MYSQL_USER=myuser \
  -e MYSQL_PASSWORD=Mypassword123! \
  -p 3306:3306 \
  -v /docker/mysql/data:/var/lib/mysql \
  -v /docker/mysql/logs:/var/log/mysql \
  -v /docker/mysql/conf.d/:/etc/mysql/conf.d \
  mysql:8.0 \
  --default-authentication-plugin=mysql_native_password

在这里插入图片描述

🛠️ 环境变量说明

环境变量 作用 示例值 注意事项
MYSQL_ROOT_PASSWORD 设置 MySQL root 用户的密码 YourStrongPassword123! 必须设置,否则容器无法启动
MYSQL_DATABASE 容器启动时自动创建的数据库名称 mydb 若未指定,需手动进入创建数据库
MYSQL_USER 创建一个普通数据库用户 myuser 用于应用程序连接,避免使用 root
MYSQL_PASSWORD MYSQL_USER 指定的用户设置密码 Mypassword123! 若未设置,用户将无密码(不安全)

💡 提示:这些环境变量仅在 首次初始化数据库 时生效(即 /var/lib/mysql 目录为空时)。重启容器后修改不会影响已初始化的数据库。

📁 挂载目录说明

宿主机目录 容器内目录 用途说明
/docker/mysql/data /var/lib/mysql 数据文件存储目录
• 存放 MySQL 的数据库文件(如 ibdata1、ib_logfile*、.frm、.ibd 等)
• 容器重启或删除后,数据仍保留在宿主机,实现数据持久化
/docker/mysql/logs /var/log/mysql 日志文件存储目录
• 存放 MySQL 的错误日志(error.log)、慢查询日志(slow.log)等
• 方便在宿主机上直接查看和分析日志
/docker/mysql/conf.d/ /etc/mysql/conf.d/ 配置文件扩展目录
• 可在此目录下放置 .cnf 配置文件(如 my.cnf
• 文件内容会自动合并到 MySQL 主配置中,用于自定义参数(如字符集、连接数等)

5.3 检查容器状态

检查MySQL容器状态,确保容器正常启动。

root@jeven:/docker/mysql#
root@jeven:/docker/mysql# docker ps
CONTAINER ID   IMAGE       COMMAND                   CREATED              STATUS              PORTS         NAMES
b500a7cb14f5   mysql:8.0   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp   mysql8

5.4 自定义配置文件(可选)

执行以下命令,可自行修改配置文件。



sudo tee /docker/mysql/conf.d/custom.cnf << 'EOF'
# ===================================================
# 自定义 MySQL 8.0 配置文件
# 挂载路径:/etc/mysql/conf.d/custom.cnf
# ===================================================

[mysqld]
# ==================== 基础设置 ====================
# 确保使用 mysql_native_password(兼容旧客户端)
default_authentication_plugin = mysql_native_password

# 数据库默认字符集(推荐 utf8mb4)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-character-set-client-handshake

# 网络与连接
port = 3306
bind-address = 0.0.0.0
skip-name-resolve
max_connections = 500
max_connect_errors = 1000

# ==================== InnoDB 设置 ====================
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT

# ==================== 日志设置 ====================
# 错误日志(默认已启用)
log-error = /var/log/mysql/error.log

# 慢查询日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

# ==================== 安全设置 ====================
# 默认不监听 X Protocol(可选)
# disable_mysqlx = 1

EOF

六、连接 MySQL 数据库

6.1 本地连接

若宿主机本地没有安装MySQL客户端,则可执行以下命令安装。

apt install mysql-client-core-8.0

本地连接:执行以下命令,输入之前设置的 root 密码。

mysql -u root -p -h 127.0.0.1 -P 3306

在这里插入图片描述

6.2 通过 Docker 连接

docker exec -it mysql8 mysql -u root -p

在这里插入图片描述

七、总结

通过本次实践,我们成功使用Docker部署了MySQL 8.0数据库,实现了数据的持久化存储与容器化管理。整个过程操作简洁高效,充分体现了Docker在快速部署和环境一致性方面的优势。自定义配置和挂载目录的设置,使数据库性能和安全性得到进一步优化。该方案适用于开发、测试及生产环境,为后续应用集成提供了稳定可靠的数据支持。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。