在京东云(或其他任何基于 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. 验证安装与连接
-
查看容器状态:
docker ps # 确认 CONTAINER ID 对应 mysql8 且 STATUS 为 Up -
进入容器内部测试:
docker exec -it mysql8 mysql -u root -p # 输入刚才设置的密码即可登录 -
检查版本:
登录成功后执行:SELECT VERSION();
5. 京东云安全组配置(至关重要)
如果在上述步骤完成后,本地客户端(如 Navicat, DBeaver)无法连接,通常是因为云厂商的安全组拦截了流量。
- 登录 京东云控制台。
- 进入 云服务器 (ECS) -> 选择你的实例 -> 网络与安全 -> 安全组。
- 找到关联的安全组,点击 添加规则。
- 配置如下:
- 协议类型: TCP
- 端口范围: 3306
- 授权对象:
0.0.0.0/0(允许所有 IP,生产环境建议限制为你的办公 IP) - 优先级: 默认即可
- 保存规则。
常见问题提示
- 字符集问题: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技术博