在阿里云 ECS 上跑 Docker 版的 MySQL,核心就三步:拉镜像、开端口、挂载数据。
别搞那些虚的,直接上干货。这里按最稳妥、生产环境常用的方式(使用 docker run 命令)来操作。如果你习惯用 Docker Compose,最后也会附上方案。
第一步:前置检查(别跳过)
-
安全组配置:
这是新手最容易踩的坑。MySQL 默认端口是3306。- 去阿里云控制台 -> 实例详情 -> 安全组 -> 配置规则。
- 添加入方向规则:协议选 TCP,端口范围填
3306/3306,授权对象填你的 IP 地址(或者0.0.0.0/0测试用,但生产环境建议只放特定 IP)。 - 注意:如果不配这个,你在本地 Navicat 或 DBeaver 根本连不上服务器上的容器。
-
系统防火墙:
虽然阿里云安全组已经拦了一层,但为了保险,确认一下 ECS 内部的firewalld或iptables是否放行了 3306。# 如果是 CentOS 7+ / Alibaba Cloud Linux firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload
第二步:安装并启动 MySQL(推荐版本 8.0)
SSH 登录到你的 ECS,执行以下命令。
关键参数解释:
-d: 后台运行。-p 3306:3306: 把容器的 3306 映射到宿主机的 3306。-v ...:/var/lib/mysql: 必须做! 把数据库文件挂载到宿主机,防止容器删了数据也没了。-e MYSQL_ROOT_PASSWORD: 设置 root 密码。--character-set-server=utf8mb4: 支持 Emoji 表情和生僻字,避免乱码。--collation-server=utf8mb4_general_ci: 字符集排序规则。
docker run -d
--name mysql-db
-p 3306:3306
-v /home/mysql/data:/var/lib/mysql
-v /home/mysql/conf.d:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=YourStrongPassword123!
--restart=always
mysql:8.0
注意:
/home/mysql/data是你自己创建的路径,记得先mkdir -p /home/mysql/data。YourStrongPassword123!换成你自己的强密码。mysql:8.0会自动下载最新 8.0 版本。如果网络慢,可以先docker pull mysql:8.0再 run。
第三步:验证与连接
-
检查容器状态:
docker ps看到
mysql-db在运行且状态是 Up,说明成功。 -
进入容器内部测试(可选):
docker exec -it mysql-db bash mysql -u root -p # 输入刚才设置的密码 show databases; exit exit -
本地连接测试:
使用 Navicat、DBeaver 或命令行连接:- Host: 你的 ECS 公网 IP
- Port: 3306
- User: root
- Password: 你设置的密码
如果连不上,90% 是因为第一步的安全组没配好,或者 MySQL 8.0 默认的认证插件问题。
💡 常见坑:Navicat 连不上 MySQL 8.0?
MySQL 8.0 默认使用 caching_sha2_password 认证插件,老版客户端可能不支持。解决方法有两个:
方法 A(推荐):修改用户认证方式
进入容器后执行:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'YourStrongPassword123!';
FLUSH PRIVILEGES;
然后重启容器:docker restart mysql-db
方法 B:启动时指定参数
在上面的 docker run 命令中加一个环境变量:
-e MYSQL_ROOT_HOST=% (其实主要是改认证插件,上面 ALTER USER 更彻底)
进阶:使用 Docker Compose(适合复杂项目)
如果你后续还要加 Redis、Nginx 等,建议直接用 Compose 管理。
在项目目录下建 docker-compose.yml:
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql-db
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: YourStrongPassword123!
TZ: Asia/Shanghai
volumes:
- ./data:/var/lib/mysql
- ./conf.d:/etc/mysql/conf.d
command: >
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--default-authentication-plugin=mysql_native_password
然后执行:
docker-compose up -d
总结
- 安全组先放行 3306。
- 挂载卷保数据,别存容器里。
- UTF8MB4 防乱码。
- 认证插件改
mysql_native_password兼容老工具。
搞定这些,你的 MySQL 就在 ECS 上稳稳跑起来了。
CLOUD云计算