京东云docker安装mysql8.0?

在京东云(或其他任何基于 Linux 的云服务器)上通过 Docker 安装 MySQL 8.0,主要涉及拉取镜像、配置运行参数以及处理数据持久化。

以下是完整的操作步骤和最佳实践:

1. 基础环境准备

确保你的京东云实例已经安装了 Docker 和 Docker Compose(可选,但推荐)。如果尚未安装,请先执行以下命令:

# 更新软件源
sudo yum update -y  # CentOS/RedHat
# 或
sudo apt update -y  # Ubuntu/Debian

# 安装 Docker (以 CentOS 为例)
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

# 验证安装
docker --version

注意:在京东云控制台,请确保安全组规则已放行 3306 端口,否则外部无法连接数据库。


2. 创建目录结构

为了便于管理配置文件和数据,建议先创建本地目录并映射到容器内。

mkdir -p /root/mysql8/data /root/mysql8/conf.d
cd /root/mysql8

3. 启动 MySQL 8.0 容器

你可以使用 docker run 命令直接启动,也可以使用 docker-compose 文件管理。这里提供两种方案:

方案 A:使用单条命令快速启动(适合测试)

docker run -d 
  --name mysql8 
  -e MYSQL_ROOT_PASSWORD=your_strong_password 
  -e MYSQL_DATABASE=test_db 
  -e MYSQL_USER=app_user 
  -e MYSQL_PASSWORD=app_password 
  -p 3306:3306 
  -v /root/mysql8/data:/var/lib/mysql 
  -v /root/mysql8/conf.d:/etc/mysql/conf.d 
  --restart=always 
  mysql:8.0

关键参数说明:

  • -e MYSQL_ROOT_PASSWORD: 必须设置,用于 root 用户的初始密码。
  • -p 3306:3306: 将宿主机的 3306 端口映射到容器内部。
  • -v .../data: 数据持久化。如果不挂载,容器删除后数据会丢失。
  • --restart=always: 保证服务器重启后数据库自动运行。

方案 B:使用 Docker Compose(推荐生产环境)

创建一个 docker-compose.yml 文件:

version: '3.8'

services:
  mysql:
    image: mysql:8.0
    container_name: mysql8
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_strong_password
      MYSQL_DATABASE: test_db
      MYSQL_USER: app_user
      MYSQL_PASSWORD: app_password
    ports:
      - "3306:3306"
    volumes:
      - ./data:/var/lib/mysql
      - ./conf.d:/etc/mysql/conf.d
    command: 
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --default-time-zone='+00:00'

启动命令:

docker-compose up -d

4. 验证安装与连接

  1. 查看容器状态

    docker ps
    # 确认 CONTAINER ID 对应 mysql8 且 STATUS 为 Up
  2. 进入容器内部测试

    docker exec -it mysql8 mysql -u root -p
    # 输入刚才设置的密码即可登录
  3. 检查版本
    登录成功后执行:

    SELECT VERSION();

5. 京东云安全组配置(至关重要)

如果在上述步骤完成后,本地客户端(如 Navicat, DBeaver)无法连接,通常是因为云厂商的安全组拦截了流量。

  1. 登录 京东云控制台
  2. 进入 云服务器 (ECS) -> 选择你的实例 -> 网络与安全 -> 安全组
  3. 找到关联的安全组,点击 添加规则
  4. 配置如下:
    • 协议类型: TCP
    • 端口范围: 3306
    • 授权对象: 0.0.0.0/0 (允许所有 IP,生产环境建议限制为你的办公 IP)
    • 优先级: 默认即可
  5. 保存规则。

常见问题提示

  • 字符集问题:MySQL 8.0 默认字符集可能不是 utf8mb4。建议在 docker run 时添加环境变量 MYSQL_INITDB_ARGS 或在 command 中指定 --character-set-server=utf8mb4,以避免中文乱码。
  • 权限错误:如果报错 Can't create directory '/var/lib/mysql',请检查宿主机 /root/mysql8/data 目录的权限,通常需要赋予容器用户权限:
    sudo chown -R 999:999 /root/mysql8/data

    (注:MySQL 8.0 官方镜像默认用户 UID 通常是 999)

  • 远程连接失败:除了安全组,MySQL 8.0 默认只允许 localhost 连接。如果需要远程连接,登录后需执行:
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
    FLUSH PRIVILEGES;

    (注意:mysql_native_password 是兼容旧版客户端的认证方式,新客户端支持 caching_sha2_password 也可以)

未经允许不得转载:CLOUD技术博 » 京东云docker安装mysql8.0?