努力
加油

腾讯云CVM Ubuntu系统中Docker部署MySQL的步骤是什么?

在腾讯云 CVM(云服务器)上基于 Ubuntu 系统部署 Docker 版本的 MySQL,核心逻辑其实很清晰:环境准备 -> 安装 Docker -> 拉取镜像 -> 运行容器 -> 验证连接。

下面我把步骤拆解得细一点,顺便避开几个容易踩的坑。

第一步:登录服务器并更新系统

首先通过 SSH 登录到你的 Ubuntu CVM。建议先执行一下基础的系统更新,确保软件源是最新的,避免后续安装依赖时出现版本冲突。

sudo apt update && sudo apt upgrade -y

第二步:安装 Docker Engine

Ubuntu 官方源里的 Docker 版本可能不是最新的,推荐直接使用 Docker 官方的 APT 仓库来安装,这样更稳定且方便后续升级。

  1. 安装前置依赖
sudo apt install -y ca-certificates curl gnupg lsb-release
  1. 添加 Docker 官方 GPG 密钥和仓库
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 再次更新索引并安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  1. 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
  1. 验证安装
docker --version
docker run hello-world

如果 hello-world 能正常打印欢迎信息,说明 Docker 引擎没问题。

第三步:创建数据持久化目录

Docker 容器的文件系统是临时的,一旦容器删除或重建,数据就没了。所以必须把 MySQL 的数据文件挂载到宿主机的某个目录,实现数据持久化。

建议在 /opt 或者 /data 下创建一个专用目录:

sudo mkdir -p /data/mysql
sudo chown -R 999:999 /data/mysql

注意:MySQL 镜像内部默认用户 ID 通常是 999(取决于具体版本),赋予该目录权限可以防止容器启动时因权限不足报错。

第四步:运行 MySQL 容器

这是最关键的一步。使用 docker run 命令启动容器。这里以 MySQL 8.0 为例(目前主流版本),并配置了端口映射、密码、字符集等关键参数。

sudo docker run -d 
  --name mysql-server 
  -p 3306:3306 
  -v /data/mysql:/var/lib/mysql 
  -e MYSQL_ROOT_PASSWORD=YourStrongPassword123! 
  -e TZ=Asia/Shanghai 
  --restart=always 
  mysql:8.0

参数解析:

  • -d: 后台运行。
  • --name mysql-server: 给容器起个名字,方便后续管理。
  • -p 3306:3306: 将宿主机的 3306 端口映射到容器的 3306 端口。注意:如果你打算从公网访问,需要去腾讯云控制台的安全组里放行 3306 端口;如果是内网应用调用,通常不需要开公网端口,但安全组规则依然要允许相应 IP 访问。
  • -v /data/mysql:/var/lib/mysql: 数据卷挂载,保证数据不丢失。
  • -e MYSQL_ROOT_PASSWORD=...: 设置 root 用户的密码。务必使用强密码。
  • -e TZ=Asia/Shanghai: 设置时区,避免数据库时间与北京时间不一致。
  • --restart=always: 保证服务器重启后容器自动拉起。

第五步:验证部署是否成功

  1. 查看容器状态
sudo docker ps

确保 mysql-server 的状态是 Up,且端口映射正确。

  1. 进入容器测试连接
sudo docker exec -it mysql-server mysql -uroot -p

输入刚才设置的密码。如果能成功进入 mysql> 命令行界面,说明数据库服务本身是正常的。

  1. 检查字符集(可选但推荐)

在 MySQL 命令行中执行:

SHOW VARIABLES LIKE 'character_set%';

默认情况下,MySQL 8.0 使用的是 utf8mb4,这已经支持 Emoji 表情和多语言,基本无需额外修改。如果发现是 latin1,可以在启动容器时加上环境变量 -e MYSQL_CHARSET=utf8mb4 或者在挂载的配置文件中进行调整。

常见问题与避坑指南

  1. 网络连不上?

    • 第一反应查腾讯云安全组。CVM 默认只开放了 22 (SSH)、80、443 等常用端口。3306 必须在安全组的入方向规则中添加,来源可以是 0.0.0.0/0(不推荐,安全性低)或指定你的固定 IP。
    • 第二反应查防火墙。虽然 Docker 会处理 iptables,但有时 ufw 开启会影响。可以临时关闭测试:sudo ufw disable。
  2. 中文乱码?

    • 确保客户端连接时也指定了 utf8mb4 字符集。
    • 如果在 docker run 中没有显式指定,MySQL 8.0 默认就是 utf8mb4,一般不会有乱码问题。如果是旧版 MySQL 5.7,可能需要手动配置 my.cnf。
  3. 内存占用过高?

    • MySQL 比较吃内存。如果你的 CVM 配置较低(如 2核 2G),建议限制 MySQL 的最大连接数和缓冲池大小。可以通过挂载自定义的 my.cnf 文件来实现,例如:
      -v /data/mysql/my.cnf:/etc/mysql/my.cnf

      然后在宿主机 /data/mysql/my.cnf 中写入:

      [mysqld]
      innodb_buffer_pool_size=128M
      max_connections=50
  4. 备份策略

    • 既然用了 Docker,数据都在 /data/mysql 目录下。建议定期用 tar 或 rsync 将这个目录打包备份到 COS(对象存储)或其他备份位置,不要只依赖 Docker 自身的机制。

这套流程走下来,一个标准的、生产环境可用的 MySQL 实例就跑起来了。如果有更复杂的集群需求(如主从复制),那需要考虑使用 MySQL Router 或者专门的 K8s Operator,但对于单机部署,上述方案足够稳健。