如何在开发环境中快速完成MySQL环境搭建 开发数据库环境搭建及项目隔离配置

2次阅读

docker一键启动mysql 8.0开发实例:执行docker run命令,配置端口映射、密码、数据库、数据卷及初始化sql,创建独立账号隔离项目环境,避免数据污染。

如何在开发环境中快速完成MySQL环境搭建 开发数据库环境搭建及项目隔离配置

用 Docker 一键拉起 MySQL 实例,跳过系统级安装

本地开发环境不需要长期运行、也不需要和宿主机 MySQL 端口或配置冲突,Docker 是最快最干净的选择。直接执行以下命令即可启动一个可立即连接的 MySQL 8.0 实例:

docker run -d    --name mysql-dev    -p 3306:3306    -e MYSQL_ROOT_PASSWORD=root123    -e MYSQL_database=myapp_dev    -v $(pwd)/mysql-data:/var/lib/mysql    -v $(pwd)/my.cnf:/etc/mysql/conf.d/my.cnf    -d mysql:8.0

注意几个关键点:

  • MYSQL_DATABASE 会自动创建数据库,避免手动 CREATE DATABASE
  • -v 挂载数据目录确保容器重启后数据不丢失;若只是临时调试,可去掉这一行
  • 如果宿主机 3306 已被占用,把 -p 3306:3306 改成 -p 3307:3306,应用连接时用 localhost:3307
  • MySQL 8.0 默认使用 caching_sha2_password 插件,某些老版本客户端(如 MySQL Workbench 6.x)会报 Authentication plugin 'caching_sha2_password' cannot be loaded —— 此时需在 my.cnf 中加一行:default_authentication_plugin=mysql_native_password

为每个项目配独立数据库 + 用户,避免 test 数据污染

多个项目共用 root 或同一个库,容易因迁移脚本误删表、字段名冲突、测试数据串库。应在容器启动后立刻创建隔离账号:

docker exec -it mysql-dev mysql -uroot -proot123 -e " CREATE DATABASE myproject_test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'myproject'@'%' IDENTifIED BY 'devpass123'; GRANT ALL ON myproject_test.* TO 'myproject'@'%'; FLUSH PRIVILEGES;"

这样项目配置里就该用:

  • host: localhost(Docker 内部连接)或 127.0.0.1(宿主机连接)
  • port: 3306(或你映射的端口)
  • database: myproject_test
  • username: myproject
  • password: devpass123

好处是:删库只删自己库,改表不影响别人,CI 脚本也能安全跑 DROP DATABASE

用 .env + 初始化 SQL 自动建表,避免手动导入

项目根目录放 .envinit.sql,启动容器时自动执行建表语句。修改 docker run 命令加入初始化卷:

-v $(pwd)/init.sql:/docker-entrypoint-initdb.d/init.sql

init.sql 示例内容(别加 USE,入口脚本会在目标库中执行):

CREATE table users (   id BIGINT PRIMARY KEY AUTO_INCREMENT,   email VARCHAR(255) UNIQUE NOT NULL,   created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

注意:

  • 文件名必须以 .sql 结尾,且放在 /docker-entrypoint-initdb.d/ 下才会被自动执行
  • 如果容器已存在并启动过,再挂这个卷也不会重跑 —— 需先 docker rm -f mysql-dev 再重新 run
  • 不要在 init.sql 里写 DROP TABLE IF EXISTS,否则每次重启都清空数据;真要重置,用 mysql -u myproject -pdevpass123 myproject_test 手动重放

Mac / windows 上连接失败?重点查 host 和认证插件

常见错误是 Can't connect to local MySQL server through socketaccess denied for user,本质是连接方式没对上:

  • Mac 上用 localhost 会走 socket 连接,但 Docker 容器不提供宿主机 socket 文件 —— 必须用 127.0.0.1
  • Windows WSL2 用户,localhost 指向 WSL2 自身,不是宿主机 Docker Desktop —— 应用连接地址填 host.docker.internal(Docker Desktop 提供的特殊 DNS)
  • MySQL 8.0 客户端报错 public Key Retrieval is not allowed?在 JDBC URL 后加参数:&allowPublicKeyRetrieval=true&useSSL=false
  • Workbench 报错 Plugin caching_sha2_password could not be loaded?除了改 my.cnf,也可临时用 root 登录后执行:ALTER USER 'myproject'@'%' IDENTIFIED WITH mysql_native_password BY 'devpass123';

真正麻烦的不是搭环境,而是不同系统下 host 解析逻辑、认证插件、socket 路径这三者混在一起时,错误信息根本不指明哪一环出了问题。

text=ZqhQzanResources