docker中的mysql变更宿主机映射端口

如果你的mysql有绑定宿主机的映射券

"Mounts": [ { "Type": "bind", "Source": "/data/docker-data/mysql/conf", "Destination": "/etc/mysql", "Mode": "", "RW": true, "Propagation": "rslave" }, { "Type": "bind", "Source": "/data/docker-data/mysql/data", "Destination": "/var/lib/mysql", "Mode": "", "RW": true, "Propagation": "rslave" }

新的 MySQL 容器启动命令

请先将你的 <你的root密码><tag>(如 8.0, 5.7)替换为实际值。

bash

复制代码
docker run -d \
  --name mysql \
  -p 13066:3306 \
  -v /data/docker-data/mysql/data:/var/lib/mysql \
  -v /data/docker-data/mysql/conf:/etc/mysql \
  -e MYSQL_ROOT_PASSWORD=<你的root密码> \
  -e TZ=Asia/Shanghai \
  --restart=unless-stopped \
  mysql:<tag>

命令逐行说明:

  • docker run -d: 启动一个容器并在后台 (-d) 运行。

  • --name mysql: 为容器命名为 mysql,方便管理。你可以根据需要修改。

  • -p 13066:3306: 核心修改 。将宿主机的 13066 端口映射到容器内的 3306 端口。

  • -v /data/docker-data/mysql/data:/var/lib/mysql: 数据目录挂载 。确保新容器使用完全相同的数据路径,所有数据库数据都在这里。

  • -v /data/docker-data/mysql/conf:/etc/mysql: 配置目录挂载 。确保你的自定义配置(如 my.cnf)会被继承。

  • -e MYSQL_ROOT_PASSWORD=<你的root密码>: 设置 root 用户的密码。请务必使用旧容器的相同密码

  • -e TZ=Asia/Shanghai: (可选,但建议) 设置容器时区,保证数据库时间准确。

  • --restart=unless-stopped: (可选,但建议) 设置 Docker 服务重启时,这个容器自动启动。

  • mysql:<tag>: 指定 MySQL 镜像版本,请保持与之前一致(例如 mysql:8.0)。


完整操作步骤(请按顺序执行)

  1. 停止并移除旧容器(数据是安全的,因为已经挂载到宿主机)

    bash

    复制代码
    docker stop mysql
    docker rm mysql
  2. 使用新命令启动容器

    将上面生成的命令复制粘贴到终端执行。

  3. 验证是否成功

    • 查看容器状态和端口映射:

      bash

      复制代码
      docker ps

      你应该能看到 0.0.0.0:13066->3306/tcp 的字样。

    • 使用新端口连接数据库,验证数据和配置:

      bash

      复制代码
      # 通过新端口连接
      mysql -h 127.0.0.1 -P 13066 -u root -p

      连接成功后,检查你的数据库和表是否完好。

⚠️ 重要提醒

  • 密码一致性 :确保 MYSQL_ROOT_PASSWORD 环境变量的值和之前容器使用的密码完全一致,否则无法用原密码登录。

  • 目录权限 :首次在新容器启动时,请确认宿主机上的 /data/docker-data/mysql/data/ 目录对于 Docker 的进程是可读可写的。如果启动失败,可以查看日志 docker logs mysql,常见问题是目录权限不足。

  • 防火墙 :如果服务器有防火墙,记得开放新的 13066 端口。

这个操作不会对你的现有数据造成任何影响,只是换了一个端口来访问同一个数据库。

注意 root密码如果有特殊字符,要用单引号

docker run -d \

--name prod-mysql \

-p 13066:3306 \

-v /data/docker-data/mysql/data:/var/lib/mysql \

-v /data/docker-data/mysql/conf:/etc/mysql \

-e MYSQL_ROOT_PASSWORD='aa$1839' \

-e TZ=Asia/Shanghai \

--restart=unless-stopped \

mysql:5.7

完整操作步骤:

  1. 停止并删除旧容器(如果还在运行):

    bash

    复制代码
    docker stop mysql
    docker rm mysql
  2. 使用修正后的命令启动新容器

    bash

    复制代码
    docker run -d \
      --name mysql \
      -p 13066:3306 \
      -v /data/docker-data/mysql/data:/var/lib/mysql \
      -v /data/docker-data/mysql/conf:/etc/mysql \
      -e MYSQL_ROOT_PASSWORD='aa$1839' \
      -e TZ=Asia/Shanghai \
      --restart=unless-stopped \
      mysql:5.7
  3. 验证启动是否成功

    bash

    复制代码
    docker ps
    docker logs mysql  # 查看启动日志,确认没有错误
  4. 测试新端口连接

    bash

    复制代码
    mysql -h 127.0.0.1 -P 13066 -u root -p

    然后在提示符下输入密码 aa$1839 进行连接测试。

相关推荐
这个DBA有点耶17 分钟前
SQL:2023新特性详解:JSON_TABLE、GREATEST/LEAST、QUALIFY 到底怎么用?
数据库·sql·mysql
缘友一世20 分钟前
GLM-5.3-NVFP4 部署实战系列[二]Docker 镜像选择与补丁镜像构建:纯 Python overlay,不重编一行 CUDA
python·docker·容器·vllm
小王C语言30 分钟前
MySQL 用户管理:创建用户、给用户授权
数据库·mysql
九皇叔叔1 小时前
MySQL ORDER BY 性能优化详解:Using filesort、联合索引、ASC/DESC 与覆盖索引
android·adb
数字化小张1 小时前
Docker镜像优化——从1GB到100MB的瘦身实践
docker
java_logo1 小时前
Docker 部署 MinIO:轻松搭建 S3 兼容对象存储平台
运维·docker·容器·对象存储·minio·轩辕镜像·minio部署
OriginCoding1 小时前
用 AI Agent 协作完成一个 Android TOTP 应用:从需求边界到 v1.0.0
android·ai编程
小镇敲码人2 小时前
【深入浅出】之Qt 事件系统实战:鼠标、键盘、滚轮、窗口与定时器事件
数据库·qt·网络协议·mysql·http
Sirens.2 小时前
MySQL数据库:索引
数据库·mysql
2601_962072502 小时前
大数据-234 离线数仓 - 异构数据源 DataX 将数据 从 HDFS 到 MySQL
大数据·mysql·hdfs