在京东云(或任何基于 Linux 的云服务器)上通过 Docker 安装 MySQL 8.0,主要涉及拉取镜像、配置数据目录映射以及启动容器。以下是标准的操作步骤和关键注意事项。
1. 环境准备
确保你的京东云实例已经安装了 Docker 和 Docker Compose(可选,但推荐)。如果尚未安装,可以使用以下命令:
# 更新软件源
sudo yum update -y # CentOS/RedHat
# 或
sudo apt update # Ubuntu/Debian
# 安装 Docker (以 CentOS 为例)
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
2. 创建本地目录结构
为了数据安全,建议将 MySQL 的数据文件、配置文件和日志文件映射到宿主机目录,避免容器删除后数据丢失。
# 创建目录
mkdir -p /data/mysql8/data
mkdir -p /data/mysql8/conf
mkdir -p /data/mysql8/logs
# 设置权限(防止后续写入失败)
chmod -R 755 /data/mysql8
3. 编写 docker-compose.yml 文件
创建一个 docker-compose.yml 文件来定义服务。这是管理容器最便捷的方式。
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: jingdong-mysql8
restart: always
environment:
MYSQL_ROOT_PASSWORD: 'YourStrongPassword123!' # 请修改为强密码
MYSQL_DATABASE: 'test_db' # 初始化时创建的数据库
MYSQL_USER: 'app_user' # 自定义用户
MYSQL_PASSWORD: 'AppUserPassword456' # 自定义用户密码
ports:
- "3306:3306" # 暴露端口
volumes:
- /data/mysql8/data:/var/lib/mysql # 数据持久化
- /data/mysql8/conf:/etc/mysql/conf.d # 自定义配置
- /data/mysql8/logs:/logs # 日志挂载
command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
networks:
- my-network
networks:
my-network:
driver: bridge
关键参数说明:
MYSQL_ROOT_PASSWORD: 必须设置,否则容器无法启动。command: 显式指定字符集为utf8mb4并启用mysql_native_password插件(兼容旧版客户端),这通常是生产环境的最佳实践。volumes: 确保/data/mysql8路径下的数据不会随容器重启而丢失。
4. 启动容器
在包含 docker-compose.yml 的目录下执行:
docker compose up -d
(如果是较老版本的 Docker,使用 docker-compose up -d)
启动后,可以通过以下命令查看状态:
docker ps
docker logs jingdong-mysql8
5. 京东云安全组配置(至关重要)
Docker 内部端口已开放,但京东云的安全组(Security Group)默认会拦截外部访问。你需要登录京东云控制台进行配置:
- 进入京东云控制台 -> 网络与安全 -> 安全组。
- 找到该实例绑定的安全组规则。
- 添加一条入方向(Inbound)规则:
- 协议类型:TCP
- 端口范围:3306
- 授权对象:
0.0.0.0/0(允许所有 IP,仅用于测试)或指定特定 IP(生产环境建议限制)。 - 优先级:1
- 保存规则。
⚠️ 安全警告:MySQL 数据库直接暴露在公网存在极大风险。生产环境中,建议仅允许应用服务器的内网 IP 访问,或者通过 SSH 隧道连接,不要将
0.0.0.0/0长期开放给 3306 端口。
6. 验证与连接
在本地终端使用 MySQL 客户端连接测试:
mysql -h <京东云公网IP> -P 3306 -u root -p
输入你在 docker-compose.yml 中设置的 MYSQL_ROOT_PASSWORD。如果成功进入命令行界面,则安装完成。
常见问题排查
- 连接被拒绝:首先检查京东云安全组是否放行了 3306 端口;其次检查容器是否正在运行 (
docker ps)。 - 权限错误 (Permission denied):通常是因为宿主机的
/data/mysql8目录所有者不是当前运行 Docker 的用户。尝试执行sudo chown -R 999:999 /data/mysql8(MySQL 容器内默认用户 ID 通常为 999)。 - 时区问题:如果应用报错时区相关,可以在
command中添加--default-time-zone=+08:00。
云知识CLOUD