用 Docker 跑本地数据库:测试数据不脏主库

举报
yd_224001237 发表于 2026/10/31 06:01:47 2026/10/31
【摘要】 用 Docker 起一个用完即弃的本地数据库:一条命令建库、导入测试数据、跑完直接删容器,主库不受任何影响,附 compose 与常见坑。

为什么要给测试数据单独开一个库

在开发机直连主库跑测试,最常见的事故是三种:测试数据混进生产表、误执行 UPDATE 把真实记录改掉、跑性能压测时把主库拖慢。哪怕只是本地开发库,被测试脚本反复改写后,也很难再判断某条数据到底是真实业务还是测试残留。用 Docker 起一个独立实例,最直接的好处是它能被「删掉重来」——容器销毁、数据卷清空,环境就像新装的一样。

第一步:一条命令把数据库跑起来

以 MySQL 为例,docker run 加上四个参数就够用:-d 后台运行、-p 映射端口(测试库别用默认 3306,改成 3307 避免和本机已装的实例抢占)、-e 设置 root 密码和初始库名、-v 挂一个数据目录。启动后用 docker logs 看初始化进度,出现 ready for connections 表示可用。第一次启动会跑初始化脚本,耗时比后续启动长,不要在这时候急着连库。

第二步:把建表和数据导入做成可重复的脚本

把建表 DDL 和测试数据放进 init 目录,MySQL 官方镜像会在首次启动时自动执行该目录下的 SQL 文件。这样每次重建容器,环境都是同一份可复现的初始状态,不依赖某台机器上残留的旧库。要注意的是初始化只在数据目录为空时执行一次;如果你改了 SQL 想重跑,必须先把挂载卷删掉,否则改了也不会生效——这是最常被忽略的坑。

第三步:用 compose 固化配置

参数一多,命令行就记不住了,写成 docker-compose.yml 更清爽:镜像版本固定到具体小版本(不要用 latest,避免哪天拉下来行为变了)、端口、环境变量、卷、健康检查都写进去。版本固定这一条尤其重要,本地跑得好好的,换台机器拉到新版镜像后默认排序规则变了,测试结果就对不上。启动用 docker compose up -d,销毁用 docker compose down -v,加 -v 才会连数据卷一起删。

第四步:常见坑与收尾习惯

三个坑值得提前知道:一是端口冲突,本机已经装了数据库时改映射端口;二是权限,容器内的 root 与宿主用户不是一回事,挂载目录权限不对会启动失败;三是时区,容器默认 UTC,涉及时间字段的测试要显式设置时区,否则查出来的时间差 8 小时。收尾习惯只有一句:测试跑完就 docker compose down -v,别让测试库常驻占内存,下次要跑再 up 一次,几十秒的事。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。