用 Docker 部署远程 MySQL:从端口踩坑到权限全开(附避坑指南)

文章目录

一、部署环境与核心工具

  • 服务器:阿里云轻量应用服务器(Ubuntu/CentOS 均可)
  • 核心技术:Docker + Docker Compose
  • 数据库版本:MySQL 8.0
  • 本地连接工具:DataGrip

二、基础部署流程:三步走方案

1. 目录隔离与 Docker Compose 配置

yaml 复制代码
version: '3.8'
services:
  new-db:
    image: mysql:8.0
    container_name: xxx-db  # 容器名称
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: xxx  # root用户密码
      MYSQL_DATABASE:xxx_db  # 自动创建的数据库名
    ports:
      - "3307:3306"  # 关键!宿主机端口:容器端口
    volumes:
      - ./mysql_data:/var/lib/mysql  # 数据持久化挂载

核心配置解析:

端口映射 3307:3306:外部连接必须使用宿主机端口(本处如果是3307记得改因为3306就是 MySQL 数据库的"官方出厂默认端口"如果改了宿主机端口记得改)

持久化挂载:避免容器删除后数据丢失

2. 一键启动服务

复制代码
docker compose up -d

三、血泪避坑指南:解决"连不上"的三个死理

坑位 1:Connection timed out

症状

DataGrip 提示 280001045 Connection timed out: connect

原因

云服务器安全组默认拦截非标准端口(如 3307)

解决方案

登录云服务器控制台

在安全组中添加入方向规则:

协议:TCP

端口范围:3307

授权对象:0.0.0.0/0(生产环境建议限制 IP)

坑位 2:误把容器名当用户名

症状

Access denied for user 'resumer-db'@'xxx'

原因

混淆了容器名(xxx-db)与数据库用户名(root)

解决方案

在连接工具中填写:

User: root

Password: xxx(即 MYSQL_ROOT_PASSWORD 的值)

坑位 3:MySQL 8.0 的权限与加密限制

症状

Access denied for user 'root'@'你的IP' (using password: YES)

原因

权限限制:root 默认仅允许 localhost 访问

加密冲突:MySQL 8.0 默认使用 caching_sha2_password,旧客户端不支持

解决方案:

复制代码
docker exec -it resumer-db mysql -uroot -proot -e \
"ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root'; \
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; \
FLUSH PRIVILEGES;"

命令解析

修改 root 用户加密方式为 mysql_native_password

授权所有 IP(%)访问

立即刷新权限

四、排查逻辑总结

连不上 → 查云服务器安全组

账号错误 → 确认使用 root 而非容器名

密码错误 → 解决 MySQL 8.0 权限与加密问题

理清这三点,从此告别数据库连接报错!

相关推荐
qq_45239623几秒前
第十篇:《Dockerfile 最佳实践与镜像瘦身》
docker
Plastic garden14 分钟前
Docker(1)
运维·docker·容器
quan263130 分钟前
20260529,日常开发-数据库主从问题
java·mysql·主从·延迟
gs801401 小时前
网络隐形杀手:从 Could not connect to SMTP host 报错深度剖析 Docker MTU 黑洞理论与实战
网络·docker·容器
程序猿阿伟2 小时前
《一套完整方法论:搞定图形应用的Docker镜像优化》
数据库·docker·容器
java_logo3 小时前
2026 Docker 国内镜像加速配置教程
运维·docker·容器·docker镜像·docker镜像源·docker镜像加速·docker镜像国内库
DIY源码阁3 小时前
JavaSwing宿舍管理系统 - MySQL版
java·数据库·mysql·eclipse
cfm_29143 小时前
MySQL8.0 InnoDB Cluster
数据库·mysql
IT策士3 小时前
Docker从0到1再到 Kubernetes 实战:第15篇Compose 中的服务依赖、健康检查与启动顺序
docker·容器·kubernetes
“码”力全开4 小时前
深度解析:基于 Docker 与边缘计算的 AI 视频管理平台架构——打通 GB28181/RTSP 协议与“源码交付”的高效集成方案
人工智能·docker·边缘计算