如何在本地开发机中快速完成MySQL环境搭建 本地数据库环境搭建与开发连接配置

1次阅读

最省事干净的本地mysql开发方式是用docker运行隔离容器。5.7用mysql:5.7镜像;8.0需加mysql_default_authentication_plugin=mysql_native_password并配置jdbc参数allowpublickeyretrieval=true。

如何在本地开发机中快速完成MySQL环境搭建 本地数据库环境搭建与开发连接配置

用 Docker 一键拉起 MySQL 5.7 或 8.0 实例

本地开发最省事、最干净的方式就是跳过手动编译或安装包,直接用 Docker 运行一个隔离的 MySQL 容器。官方镜像更新及时、配置可控,且避免污染系统环境。

  • 运行 MySQL 5.7(兼容老项目):
    docker run -d --name mysql-dev -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /path/to/my.cnf:/etc/mysql/my.cnf -v /path/to/data:/var/lib/mysql -d mysql:5.7
  • 运行 MySQL 8.0(注意默认认证插件变化):
    docker run -d --name mysql-dev8 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DEFAULT_AUTHENTICATION_PLUGIN=mysql_native_password -d mysql:8.0
  • MYSQL_DEFAULT_AUTHENTICATION_PLUGIN=mysql_native_password 是关键——否则客户端(如 navicat、旧版 JDBC 驱动)会报 Authentication plugin 'caching_sha2_password' cannot be loaded
  • 挂载 /etc/mysql/my.cnf 可自定义 max_allowed_packetsql_mode 等;不挂载则用镜像默认配置

MySQL 8.0 连接失败时优先检查三项配置

连得上但认证失败、或连不上但端口看似通,大概率不是网络问题,而是服务端配置或客户端驱动不匹配。

  • 确认容器内 MySQL 实际监听地址:进容器执行 mysql -uroot -p123456 -e "select @@bind_address;",返回 *0.0.0.0 才表示接受外部连接
  • 检查用户 host 权限:MySQL 8 默认创建的 root@localhost 不允许远程登录,需手动执行:
    CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
  • JDBC URL 要显式指定时区和认证插件:jdbc:mysql://127.0.0.1:3306/test?serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useSSL=false,缺 allowPublicKeyRetrieval=true 在 8.0.14+ 会拒绝连接

本地开发用 my.cnf 的最小必要配置项

不需要照搬生产配置,但几个关键项不设好,写 SQL 时容易踩坑(比如插入中文变 ?、批量导入失败、GROUP BY 报错)。

  • [client] 段加 default-character-set = utf8mb4,保证命令行客户端默认用正确编码
  • [mysqld] 段必须设:
    character-set-server = utf8mb4<br>collation-server = utf8mb4_unicode_ci<br>init_connect='SET NAMES utf8mb4'<br>skip-character-set-client-handshake = true
  • sql_mode 建议设为宽松模式:sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,去掉 ONLY_FULL_GROUP_BY 避免开发期 GROUP BY 报错
  • 修改后重启容器:docker restart mysql-dev,别忘了加 -v 挂载配置文件,否则改了也不生效

验证连接与权限的三步快速检查法

别一上来就跑 ORM 或写业务代码,先用最原始方式确认底层链路通不通、权限对不对。

  • 第一步:用 mysql -h127.0.0.1 -P3306 -uroot -p123456 登录,能进就说明网络 + 认证 OK
  • 第二步:在 MySQL 内执行 SHOW VARIABLES LIKE 'character_set%';SHOW VARIABLES LIKE 'collation%';,所有值都应含 utf8mb4
  • 第三步:建个测试表插入中文:
    CREATE TABLE t1(id INT, name VARCHAR(10)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;<br>INSERT INTO t1 VALUES (1, '张三');<br>SELECT * FROM t1;

    若显示乱码或报错,说明 client/server/conn 三端编码没对齐

Docker 容器生命周期短、配置易复现,但很多人忽略 my.cnf 挂载路径权限、MySQL 8 的默认认证插件、以及客户端连接参数的强制要求——这三个点卡住的时间,往往比搭环境本身还长。

text=ZqhQzanResources