直接安装 MySQL Community Server 官方二进制包或安装器最省事可控;Windows 用 mysql-installer-community,macOS/Linux 解压即用;需手动初始化、配置 bind-address、重置密码并授权、调整 sql_mode/字符集/日志等参数,并排查服务、端口、连接协议问题。

直接装 MySQL Community Server 最省事
本地开发用官方二进制包或安装器,比 Docker、Homebrew(macOS)、apt(Ubuntu)更可控,尤其避免权限、socket 路径、配置文件位置不一致带来的连接失败。Windows 用户优先选 mysql-installer-community,macOS 和 Linux 推荐下载 mysql-8.0.x-macos14-x86_64.tar.gz 或 mysql-8.0.x-linux-glibc2.17-x86_64.tar.xz 解压即用。
- Windows 安装器会自动注册服务、初始化数据目录、弹出 root 密码设置向导;跳过这步会导致后续连不上
localhost:3306 - macOS/Linux 解压后必须手动执行
bin/mysqld --initialize --user=$(whoami) --basedir=... --datadir=...,否则启动报错Can't find error-message file或空数据目录 - 首次启动前检查
my.cnf(Linux/macOS)或my.ini(Windows)里bind-address是否为127.0.0.1(不是0.0.0.0),否则客户端可能因拒绝远程连接而报Access denied for user 'root'@'::1'
改 root 密码和开远程访问要分两步做
安装完默认只允许 localhost 通过 socket 连接,且密码是临时生成的(在错误日志里,路径类似 /usr/local/mysql/data/hostname.err)。想用 Navicat、DBeaver 或命令行 mysql -h 127.0.0.1 -u root -p 连,必须先重置密码并授权 host。
- 先用 socket 登录:
mysql -u root -S /tmp/mysql.sock -p(macOS/Linux)或mysql -u root -p(Windows,默认走命名管道) - 执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_pass'; - 再加一条允许本机 IP 访问:
CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'your_new_pass'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION; - 别漏掉
FLUSH PRIVILEGES;,否则权限不生效
my.cnf 配置里这几个参数改了才好写 SQL
默认配置对开发不友好:SQL 模式太严、日志关着、字符集没统一。不调的话,建表时遇到 Invalid default value for 'created_at' 或插入中文变 ??? 是大概率事件。
- 在
[mysqld]段下加: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 报错频繁) - 明确设字符集:
character-set-server = utf8mb4和collation-server = utf8mb4_unicode_ci - 开启通用查询日志方便调试:
general_log = 1和general_log_file = /usr/local/mysql/data/general.log - 如果用 Laravel、Django 等 ORM,建议加
lower_case_table_names = 1(macOS/Linux),避免表名大小写敏感导致迁移失败
连接不上?先看这三个地方
90% 的本地连接问题不是密码错,而是服务没起来、端口被占、或 client 用错了协议。
- 查进程:
ps aux | grep mysqld(macOS/Linux)或任务管理器看mysqld.exe是否运行;没进程就去data/目录看有没有hostname.pid - 查端口:
lsof -i :3306或netstat -an | findstr 3306,确认没被其他 MySQL 实例或 Docker 容器占用 - 区分连接方式:
mysql -u root -p走 socket(macOS/Linux 默认),mysql -h 127.0.0.1 -u root -p才走 TCP;前者快但受限于 socket 文件路径,后者可跨网络但依赖bind-address设置 - Navicat 连不上时,把“高级”里的
Use compression protocol勾去掉——MySQL 8.0 默认禁用压缩,开了反而报Authentication plugin 'caching_sha2_password' cannot be loaded
实际配一次环境,最花时间的往往不是下载或安装,而是发现 my.cnf 被系统放在了多个位置(/etc/my.cnf、/usr/local/mysql/etc/my.cnf、~/my.cnf),而 mysqld 只读第一个找到的——这点不查 mysqld --help --verbose | grep "Default options" 很难意识到。










