mysql在MacOS上使用Homebrew安装与配置

1次阅读

homebrew安装mysql后服务默认不启动,需手动执行brew services start mysql;若mysql_secure_installation失败,应先用mysql -u root直连并修改root认证方式为mysql_native_password。

mysql在MacOS上使用Homebrew安装与配置

brew install mysql 后服务没启动?

Homebrew 安装的 mysql 默认不会自动启动服务,这是最常被忽略的第一步。执行 brew install mysql 只是把二进制和配置文件放到 /opt/homebrew/opt/mysql(Apple Silicon)或 /usr/local/opt/mysql(Intel),不等于 MySQL 在后台运行。

必须手动启动:

brew services start mysql

如果提示权限错误或失败,检查是否已安装 brew services 插件(brew tap homebrew/services),再确认 mysql 是否真被识别为服务(brew services list | grep mysql)。

常见误操作:直接运行 mysql 命令报 Error 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'——本质就是服务根本没跑。

mysql_secure_installation 报错 “Can’t connect to local MySQL server”

这个命令依赖 mysqld 正在运行且监听本地 socket。但 Homebrew 安装的 MySQL 8.0+ 默认启用 auth_socket 插件认证,root 用户不设密码、不走密码验证,导致 mysql_secure_installation 的交互流程卡在连接阶段。

解决办法分两步:

  • 先用 socket 直连(跳过密码):
    mysql -u root
  • 在 MySQL 内切换 root 认证方式并设密码:
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
  • 退出后重试:
    mysql_secure_installation

注意:MySQL 8.0.27+ 的 Homebrew formula 默认禁用 mysql_native_password 插件,需确认 plugin_dir 路径是否包含该插件(SHOW varIABLES LIKE 'plugin_dir';),必要时在 my.cnf 中显式加载:

plugin-load-add = auth_socket.so

如何修改 my.cnf 配置并让 brew services 生效?

Homebrew 不会自动生成或管理 my.cnf,你得自己建。默认读取顺序是:/etc/my.cnf/opt/homebrew/etc/my.cnf(M1)或 /usr/local/etc/my.cnf(Intel)→ ~/.my.cnf。推荐放系统级路径,避免用户级干扰。

示例最小配置(启用远程访问、调大连接数):

[mysqld] bind-address = 0.0.0.0 max_connections = 200 port = 3306 socket = /tmp/mysql.sock

改完必须重启服务才生效:

brew services restart mysql

别漏掉 socket 路径一致性:如果 my.cnf 里写了 socket = /tmp/mysql.sock,客户端连接也得匹配,否则报错。验证方式:

mysql --socket=/tmp/mysql.sock -u root

卸载重装时残留数据和权限问题

brew uninstall mysql 不会删数据目录(默认在 /opt/homebrew/var/mysql),重装后可能因表结构/权限不兼容直接启动失败,错误日志在:tail -f /opt/homebrew/var/log/mysql/error.log

彻底清理步骤:

  • 停止服务:
    brew services stop mysql
  • 删数据目录:
    rm -rf /opt/homebrew/var/mysql
  • 删日志:
    rm -f /opt/homebrew/var/log/mysql/error.log
  • 删 socket 文件:
    rm -f /tmp/mysql.sock
  • 重装:
    brew reinstall mysql

特别注意:若之前用 mysql_install_db 手动初始化过,新版 MySQL 8.0+ 已弃用该命令,改用 mysqld --initialize,而 Homebrew 的 formula 会在 brew install 时自动调用它——所以不要自己再初始化,否则权限混乱。

mac 上最容易被绕晕的是路径碎片化:Intel 和 Apple Silicon 的 opt 路径不同、my.cnf 优先级易混淆、socket 文件位置硬编码在多个地方。动手前先确认架构和 brew 安装根路径,比反复重装更省时间。

text=ZqhQzanResources