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

相关推荐
Full Stack Developme几秒前
Mycat 2 实现 MySQL 读写分离,并且实现 主从同步
android·数据库·mysql
Winston Wood14 分钟前
Android图形与显示系统:从架构到协作的深度解析
android·图形系统·显示系统
alonewolf_9918 分钟前
MySQL Explain详解与索引优化实战
数据库·mysql·adb
lxysbly22 分钟前
psx模拟器安卓版带金手指
android
それども22 分钟前
MySQL 查询索引最左前缀原则,如果是(a,b)的联合索引,WHERE b = ? AND a = ?会走索引吗
数据库·mysql
それども23 分钟前
MySQL EXPLAIN Impossible WHERE noticed after reading const tables
数据库·mysql
lxysbly30 分钟前
ps1模拟器安卓版带金手指
android·linux·运维
stevenzqzq31 分钟前
Android Studio 断点调试异常相关选项总结
android·ide·android studio
TA远方4 小时前
【Android】adb常用的命令用法详解
android·adb·管理·控制·命令
唯情于酒10 小时前
Docker学习
学习·docker·容器