Docker 快速安装 MySQL 8.0 完整教程(附配置优化+远程连接)

本文详细介绍了在 Linux 系统(以 CentOS 为例)中,使用 Docker 容器化安装 MySQL 8.0 的完整流程,包括镜像拉取、容器部署、数据持久化、配置优化、远程连接及常用运维命令,适合新手快速上手,同时满足开发、测试及轻量级生产环境需求。

一、前言

MySQL 是目前最流行的关系型数据库之一,而 Docker 作为轻量级容器技术,能够快速部署、隔离应用环境,避免因系统依赖、版本冲突导致的安装失败问题。本文基于 Docker 部署 MySQL 8.0,全程采用命令行操作,步骤清晰可复现,同时解决新手常遇到的“数据丢失”“远程连接失败”等痛点。

适用环境:Linux(CentOS 7/8、Ubuntu)、Docker 19.03+,本文以 CentOS 7 为例演示。

二、安装前准备

2.1 验证 Docker 环境

确保本地已安装 Docker 且服务正常运行,执行以下命令验证:

# 查看 Docker 版本
docker --version

# 查看 Docker 服务状态
systemctl status docker

若 Docker 未安装或服务未启动,参考 Docker 官方文档完成安装,或执行以下快速启动命令:

# 启动 Docker 服务
sudo systemctl start docker

# 设置 Docker 开机自启(可选,推荐)
sudo systemctl enable docker

2.2 提前规划目录(数据持久化关键)

Docker 容器默认是临时存储,若容器删除,MySQL 数据会丢失。因此需提前在宿主机创建挂载目录,将 MySQL 的配置、数据、日志目录挂载到宿主机,实现数据持久化。

创建目录命令(复制执行即可):

# 创建 MySQL 配置目录、数据目录、日志目录
mkdir -p /mydata/mysql/conf
mkdir -p /mydata/mysql/data
mkdir -p /mydata/mysql/logs

目录说明:

  • /mydata/mysql/conf:存放 MySQL 配置文件(my.cnf)

  • /mydata/mysql/data:存放 MySQL 核心数据(持久化关键)

  • /mydata/mysql/logs:存放 MySQL 运行日志(便于排查问题)

三、Docker 安装 MySQL 8.0 详细步骤

3.1 拉取 MySQL 8.0 官方镜像

优先使用 Docker 官方镜像,确保版本纯净、安全可信赖,拉取命令:

# 拉取 MySQL 8.0 最新稳定版
docker pull mysql:8.0

说明:若需指定具体小版本(如 8.0.36),可执行 docker pull mysql:8.0.36,建议生产环境指定具体版本,避免自动更新导致兼容性问题。

拉取完成后,执行 docker images | grep mysql 验证镜像是否成功拉取,输出类似以下内容即正常:

mysql 8.0 xxxxxxxx 2 months ago 560MB

3.2 启动 MySQL 容器(核心步骤)

使用 docker run 命令启动容器,整合挂载目录、端口映射、环境变量等配置,命令如下(复制即可,建议修改密码):

docker run -d \
--name mysql8 \
--restart always \
-p 3306:3306 \
-v /mydata/mysql/conf:/etc/mysql/conf.d \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/logs:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e TZ=Asia/Shanghai \
mysql:8.0

命令参数详解(关键参数必看):

  • -d:后台运行容器(守护进程模式)

  • --name mysql8:给容器命名为 mysql8(便于后续操作,可自定义)

  • --restart always:容器开机自启,避免服务器重启后容器失效

  • -p 3306:3306:端口映射,宿主机 3306 端口映射到容器内部 3306 端口(外部通过 3306 访问 MySQL)

  • -v 挂载目录:将宿主机目录与容器目录关联,实现数据持久化(核心)

  • -e MYSQL_ROOT_PASSWORD=123456:设置 MySQL root 用户密码(建议修改为复杂密码,如 MySql@123456)

  • -e TZ=Asia/Shanghai:设置 MySQL 时区为上海时区,避免时间同步问题

3.3 验证容器启动状态

启动后,执行以下命令查看容器是否正常运行:

# 查看正在运行的容器 docker ps # 若未正常运行,查看容器日志排查问题 docker logs mysql8

若输出中包含 mysqld: ready for connections,说明 MySQL 容器启动成功,可正常使用。

四、MySQL 基础配置(优化+远程连接)

4.1 配置文件优化(my.cnf)

MySQL 8.0 默认配置可能无法满足开发/生产需求,需自定义配置文件。由于我们已挂载配置目录,直接在宿主机编辑配置文件即可,无需进入容器。

编辑配置文件命令:

vi /mydata/mysql/conf/my.cnf

复制以下基础优化配置(直接可用,适配大部分场景):

[mysqld]
# 时区设置(与容器时区一致)
default-time_zone = '+8:00'
# 字符集配置(解决中文乱码问题)
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 最大连接数(根据需求调整,默认151,此处改为1000)
max_connections=1000
# 连接超时时间(单位:秒)
wait_timeout=86400
interactive_timeout=86400
# 认证插件(兼容 Navicat 等工具远程连接,MySQL 8.0 默认插件可能导致连接失败)
default_authentication_plugin=mysql_native_password
# 日志相关配置
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=2

保存退出:按 ESC键,输入 :wq 回车即可。

配置生效需重启 MySQL 容器:

docker restart mysql8

4.2 开启远程连接(Navicat/DBeaver 连接)

MySQL 8.0 默认只允许本地(容器内部)连接,若需通过 Navicat、DBeaver 等工具远程连接,需手动授权。

步骤如下:

  1. 进入 MySQL 容器内部: docker exec -it mysql8 /bin/bash

  2. 登录 MySQL(输入之前设置的 root 密码):mysql -uroot -p123456

  3. 执行授权命令(允许 root 用户远程连接,密码与本地一致): -- 切换到系统数据库 use mysql; -- 授权 root 用户所有 IP 可连接(% 表示所有 IP) ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; -- 刷新权限,使授权生效 flush privileges;

  4. 退出 MySQL 和容器: -- 退出 MySQL exit; -- 退出容器 exit;

4.3 开放宿主机 3306 端口

远程连接需确保宿主机防火墙开放 3306 端口(CentOS 防火墙操作如下):

# 开放 3306 端口(永久生效)
firewall-cmd --add-port=3306/tcp --permanent

# 重新加载防火墙配置
firewall-cmd --reload

# 验证端口是否开放
firewall-cmd --query-port=3306/tcp

若输出yes,说明端口已开放,此时可通过远程工具输入宿主机 IP、3306 端口、root 用户名和密码,成功连接 MySQL。

五、MySQL 常用运维命令(Docker 版)

整理日常高频操作命令,方便快速运维:

# 1. 启动 MySQL 容器
docker start mysql8

# 2. 停止 MySQL 容器
docker stop mysql8

# 3. 重启 MySQL 容器(修改配置后必执行)
docker restart mysql8

# 4. 查看 MySQL 容器日志(排查启动/运行故障)
docker logs mysql8

# 5. 进入 MySQL 容器内部
docker exec -it mysql8 /bin/bash

# 6. 查看 MySQL 容器详细信息
docker inspect mysql8

# 7. 删除 MySQL 容器(数据不会丢失,因已挂载宿主机)
docker rm -f mysql8

# 8. 查看 MySQL 版本(容器内部执行)
mysql -uroot -p123456 -e "select version();"

六、常见问题排查

6.1 容器启动失败,日志提示“权限不足”

原因:宿主机挂载目录权限不足,MySQL 容器无法写入数据。

解决方法:给挂载目录授权:

chmod -R 777 /mydata/mysql

6.2 远程连接失败,提示“1045 - Access denied”

常见原因及解决:

  • 密码错误:确认 root 密码与授权命令中的密码一致。

  • 未授权远程访问:重新执行 4.2 节的授权命令。

  • 防火墙未开放 3306 端口:重新执行 4.3 节的端口开放命令。

6.3 配置文件修改后不生效

原因:修改配置后未重启容器,或配置文件路径错误。

解决方法:确认配置文件路径为 /mydata/mysql/conf/my.cnf,修改后执行 docker restart mysql8

七、总结

本文通过 Docker 容器化方式安装 MySQL 8.0,核心优势在于“快速部署、环境隔离、数据持久化”,全程无需复杂的依赖配置,新手也能快速上手。关键要点总结:

  1. 提前创建挂载目录,避免容器删除导致数据丢失;

  2. 启动容器时配置时区、root 密码,确保基础环境可用;

  3. 修改配置文件后需重启容器,远程连接需授权并开放端口;

  4. 日常运维通过 Docker 命令操作容器,MySQL 操作与原生一致。

该部署方式适用于开发、测试环境,若用于生产环境,建议进一步优化配置(如调整最大连接数、开启主从复制、定期备份数据),确保数据库稳定运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

angelasp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值