努力
奋斗

阿里云ECS如何安装docker的mysql镜像?

服务器价格表

在阿里云 ECS 上跑 Docker 版的 MySQL,核心就三步:拉镜像、开端口、挂载数据。

别搞那些虚的,直接上干货。这里按最稳妥、生产环境常用的方式(使用 docker run 命令)来操作。如果你习惯用 Docker Compose,最后也会附上方案。

第一步:前置检查(别跳过)

  1. 安全组配置:
    这是新手最容易踩的坑。MySQL 默认端口是 3306。

    • 去阿里云控制台 -> 实例详情 -> 安全组 -> 配置规则。
    • 添加入方向规则:协议选 TCP,端口范围填 3306/3306,授权对象填你的 IP 地址(或者 0.0.0.0/0 测试用,但生产环境建议只放特定 IP)。
    • 注意:如果不配这个,你在本地 Navicat 或 DBeaver 根本连不上服务器上的容器。
  2. 系统防火墙:
    虽然阿里云安全组已经拦了一层,但为了保险,确认一下 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

注意:

  1. /home/mysql/data 是你自己创建的路径,记得先 mkdir -p /home/mysql/data。
  2. YourStrongPassword123! 换成你自己的强密码。
  3. mysql:8.0 会自动下载最新 8.0 版本。如果网络慢,可以先 docker pull mysql:8.0 再 run。

第三步:验证与连接

  1. 检查容器状态:

    docker ps

    看到 mysql-db 在运行且状态是 Up,说明成功。

  2. 进入容器内部测试(可选):

    docker exec -it mysql-db bash
    mysql -u root -p
    # 输入刚才设置的密码
    show databases;
    exit
    exit
  3. 本地连接测试:
    使用 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

总结

  1. 安全组先放行 3306。
  2. 挂载卷保数据,别存容器里。
  3. UTF8MB4 防乱码。
  4. 认证插件改 mysql_native_password 兼容老工具。

搞定这些,你的 MySQL 就在 ECS 上稳稳跑起来了。