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 进行连接测试。

相关推荐
TDengine (老段)4 小时前
TDengine 字符串函数 CONCAT_WS 用户手册
android·大数据·数据库·时序数据库·tdengine·涛思数据
会跑的兔子4 小时前
Android 16 Kotlin协程 第一部分
android·开发语言·kotlin
颜大哦4 小时前
linux安装mysql
linux·运维·mysql·adb
Meteors.5 小时前
安卓进阶——OpenGL ES
android
深圳市恒讯科技5 小时前
如何在服务器上安装和配置数据库(如MySQL)?
服务器·数据库·mysql
天一生水water5 小时前
ubuntu使用毫秒镜像方式安装docker mysql
ubuntu·阿里云·docker
员大头硬花生6 小时前
七、InnoDB引擎-架构-后台线程
java·数据库·mysql
IT教程资源C6 小时前
(N_151)基于微信小程序校园学生活动管理平台
mysql·vue·前后端分离·校园活动小程序·springboot校园活动
椰羊sqrt7 小时前
CVE-2025-4334 深度分析:WordPress wp-registration 插件权限提升漏洞
android·开发语言·okhttp·网络安全
2501_916008897 小时前
金融类 App 加密加固方法,多工具组合的工程化实践(金融级别/IPA 加固/无源码落地/Ipa Guard + 流水线)
android·ios·金融·小程序·uni-app·iphone·webview