docker 安装 mysql

[复制链接]
发表于 2026-10-6 12:43:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

用 Docker 起一个 MySQL 是最省事的数据库落地方式:不用编译、不用处理依赖,一条 docker pull 加一条 docker run 就跑起来。但容器里的数据库有两个绕不开的话题——数据怎么留在容器外面、端口怎么通到外面。这篇把下载镜像、启动容器、脚本化启动、连库验证以及几个容易踩的坑一次讲清。

一、先看自己已经拉了哪些镜像

开始之前先确认本地镜像状态:

docker images

没有 mysql 的话就先拉,推荐锁定具体版本而不是直接用 latest,避免下次重启容器时拉到不兼容的新版:

docker pull mysql:5.7

二、方法一:直接一条命令启动

docker run -p 3306:3306 --name mysql --restart=always \
  -v /usr/local/docker/mysql/log:/var/log/mysql \
  -v /usr/local/mysql/data:/var/lib/mysql \
  -v /usr/local/mysql/conf:/etc/mysql \
  -v /etc/localtime:/etc/localtime:ro \
  -e MYSQL_ROOT_PASSWORD=你的强密码 -d mysql:5.7

几个参数的含义逐个说清楚:

  • -p 3306:3306:把宿主机的 3306 映射到容器的 3306,外部程序连宿主机这个端口就能进数据库。
  • --name mysql:给容器起个固定名字,后面 docker stop mysql、docker logs mysql 都靠它。
  • --restart=always:宿主机重启后容器自动跟着起来,生产环境几乎必选。
  • 四个 -v:分别把日志日志、数据、配置和宿主机时钟挂进容器。数据目录一定要挂出来,否则删容器等于删库。
  • -v /etc/localtime:/etc/localtime:ro:让容器时钟跟宿主机一致,避免时区导致的日志日志记录和定时任务偏移,ro 是只读。
  • -e MYSQL_ROOT_PASSWORD=...:设置 root 初始密码,这是唯一一次能在这条命令里设密码的机会,容器重建后这个环境变量就失效了。
  • -d:后台运行。

三、方法二:写成脚本反复用

同一套参数每次敲容易敲错,不如固化成脚本。新建启动脚本:

vim startMysql.sh

把上面那段 docker run 原样粘进去,保存后赋权:

chmod 755 startMysql.sh
./startMysql.sh

以后换机器、重装系统,只要把这段脚本复制过去改两处路径就能复用。

四、确认容器正常并连库

docker ps
docker logs mysql

状态是 Up、日志日志里出现 ready for connections 就说明起来了。然后用一个客户端填四项:连接名随便起、主机填宿主机 IP(虚拟机里就是虚拟机的 IP)、用户名 root、密码是刚才设的那个,测试通过就装完了。

五、连不进去时依次查这四项

  • 容器是不是真的在跑:docker ps 看状态,不在就 docker logs mysql 找启动失败原因。
  • 宿主机 3306 有没有放行:云服务器要去安全组放行 3306,本机虚拟机不需要。
  • 端口映射对不对:docker ps 看 PORTS 列,显示 0.0.0.0:3306->3306/tcp 才对。
  • 防火墙:iptables 或 firewalld 有没有拦,用 sudo ss -lntp | grep 3306 看监听。

六、几个必须提醒的坑

  • 密码别设成 123456 这种,容器一对外就是全网的扫描目标,几分钟内就会被试出来。
  • 别用 --privileged=true。原文章里为了省事加了它,这等于把宿主机的 root 权限直接给容器,风险极高,正常情况下卷映射加普通用户权限就够了。
  • log 和 data 两个挂载路径在原文里写得不一致(一个 /usr/local/docker/mysql/log,一个 /usr/local/mysql/data),照抄时要统一,不然后面清理目录很容易误删数据。
  • 数据目录的属主要跟容器里 mysql 用户的 uid 对上,否则会报 InnoDB: Operating system error number 28 之类的权限错。
  • 备份要单独做,容器只解决「跑得起来」,不解决「数据安全」,定期 mysqldump 或做卷快照是必须的。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表