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

来源:这里教程网 时间:2026-02-28 20:49:00 作者:

用 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 自动建表,避免手动导入

项目根目录放

.env
init.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 socket
Access 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 路径这三者混在一起时,错误信息根本不指明哪一环出了问题。

相关推荐