Docker实战:使用Docker部署Mysql 8.0教程
【摘要】 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)