Docker部署MySQL 8实现数据持久化与远程访问

落日邮差
落日邮差
发布时间:2026-10-13 | 4人浏览过
原创

使用Docker快速部署MySQL 8时,如何保证数据在容器删除或更新后不丢失?本文详细演示如何通过挂载宿主机目录实现MySQL的数据、配置和日志持久化,并配置外部网络访问权限。

核心操作:创建持久化环境与容器

要实现数据持久化,关键在于将MySQL的配置文件、日志以及数据库文件全部映射到宿主机指定目录。以下是完整的操作流程:

第1步:准备基础镜像并提取默认配置

首先拉取指定的版本镜像(本例以 8.0.20 为例),启动一个临时容器用于导出默认的 /etc/mysql 配置目录,随后立即删除该临时容器。

# 拉取镜像
docker pull mysql:8.0.20

# 创建本地挂载目录结构
mkdir -p /home/mysqldata/mysql/conf 
mkdir -p /home/mysqldata/mysql/logs 
mkdir -p /home/mysqldata/mysql/data

# 运行临时容器以便拷贝配置文件
docker run --name temp-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.20

# 拷贝配置文件到宿主机
docker cp temp-mysql:/etc/mysql /home/mysqldata/mysql/conf

# 删除临时容器
docker stop temp-mysql && docker rm temp-mysql

第2步:正式部署MySQL 8并挂载持久化卷

在挂载了所有必要路径后,重新构建并运行最终的MySQL容器。此步骤将配置文件的修改、日志记录以及数据变动直接保存在宿主机中。

docker run -d \
-p 13306:3306 \
--privileged=true \
--restart unless-stopped \
-v /home/mysqldata/mysql/conf:/etc/mysql \
-v /home/mysqldata/mysql/logs:/logs \
-v /home/mysqldata/mysql/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=cqrecadmin \
--name mysql mysql:8.0.20

上述命令中的关键参数说明如下: - -v ... :/etc/mysql 挂载自定义配置文件,方便后续按需修改。
- -v ... :/var/lib/mysql **核心持久化项**,确保数据始终存在于宿主机。
- -p 13306:3306 将容器内 3306 端口映射为宿主机的 13306 端口(避免与本机其他服务冲突)。
- --restart unless-stopped 保证服务器开机或故障重启后容器自动拉起。

执行完毕后,可通过 docker ps 检查容器状态是否为 Up。

第二步:开通远程访问与安全测试

容器启动后,我们需要赋予非 localhost 的主机访问该数据库的权限,并处理宿主机的防火墙策略。

第1步:授权MySQL账号允许远程连接

进入正在运行的容器内部,登录 MySQL 服务端并为特定用户设置远程访问权限。

# 进入容器终端
docker exec -it mysql bash

# 登录 root 账户 (输入上一步设置的密码)
mysql -u root -p

# 以下为 SQL 指令,创建新用户并授予全权限
CREATE USER 'user_galen'@'%' IDENTIFIED WITH mysql_native_password BY 'Galen*10';
GRANT ALL PRIVILEGES ON *.* TO 'user_galen'@'%';
FLUSH PRIVILEGES;
exit; # 退出 MySQL 命令行模式
exit; # 退出容器 bash

第2步:开放宿主机防火墙端口

如果在 Linux 主机上使用 firewalld 管理防火墙,必须手动放行刚刚映射的 13306 端口。

firewall-cmd --zone=public --add-port=13306/tcp --permanent
firewall-cmd --reload

完成以上两步后,即可使用任意客户端工具(如 Navicat、DBeaver)通过 宿主机IP:13306 进行远程连接测试。

总结

Docker 部署的核心在于“解耦”。通过将数据文件和配置文件夹剥离出容器,无论容器本身因为何种原因被移除,我们保存的核心业务数据和配置设定都不会受损。对于生产或开发环境,强烈建议采用这种多卷挂载的方式。

以上就是Docker部署MySQL 8实现数据持久化与远程访问的详细内容,更多关于Docker安装部署MySQL 8的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表