Mac 本地安装 MySQL 学习指南

用途 :本地开发、学习 SQL、搭建测试环境

系统要求 :macOS 10.15 (Catalina) 及以上 (Sonoma / Ventura / Monterey 等)

工具 :Homebrew(包管理器) + MySQL 8.0

特点:全程使用命令行,简单、高效,适合初学者。


✅ 第一步:安装 Homebrew(如果还没装)

打开 终端(Terminal),粘贴以下命令:

bash 复制代码
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

检查是否成功

bash 复制代码
brew --version

你应该看到类似输出:

text 复制代码
Homebrew 4.0+

✅ 第二步:用 Homebrew 安装 MySQL

bash 复制代码
brew install mysql

⏱️ 注意:安装过程可能需要几分钟,请耐心等待下载和编译完成。


✅ 第三步:启动 MySQL 服务

安装完成后,启动 MySQL 并设置开机自启:

bash 复制代码
brew services start mysql

验证是否运行中

bash 复制代码
brew services | grep mysql

看到状态为 started ✅ 表示成功。


✅ 第四步:设置 MySQL 初始安全配置

首次安装后,必须运行安全向导来设置密码、删除匿名用户等。

bash 复制代码
mysql_secure_installation

按提示操作如下:

  1. Validate Password Plugin? (是否启用密码强度验证插件?)
    • 输入 N (学习阶段不需要复杂验证,方便记忆)
  2. Set root password? (设置 root 密码?)
    • 输入 Y
    • 输入新密码(例如:root123),并再次确认。
  3. Remove anonymous users? (删除匿名用户?)
    • 输入 Y
  4. Disallow root login remotely? (禁止 root 远程登录?)
    • 输入 Y (学习阶段禁止远程登录更安全)
  5. Remove test database and access to it? (删除测试数据库?)
    • 输入 Y
  6. Reload privilege tables now? (重新加载权限表?)
    • 输入 Y

✅ 完成后,MySQL 就安全配置好了!


✅ 第五步:登录 MySQL

bash 复制代码
mysql -u root -p

输入你刚才设置的密码(如 root123)。如果进入如下界面,说明登录成功:

text 复制代码
Welcome to the MySQL monitor...
mysql>

🎉 恭喜!你现在可以开始学习 SQL 了!


✅ 第六步:创建第一个数据库和表(练习用)

mysql> 命令行中执行以下 SQL 语句:

sql 复制代码
-- 1. 创建数据库
CREATE DATABASE testdb;

-- 2. 使用数据库
USE testdb;

-- 3. 创建表
CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50),
  age INT,
  email VARCHAR(100)
);

-- 4. 插入数据
INSERT INTO users (name, age, email) VALUES ('张三', 25, 'zhangsan@example.com');
INSERT INTO users (name, age, email) VALUES ('李四', 30, 'lisi@example.com');

-- 5. 查询数据
SELECT * FROM users;

预期输出:

text 复制代码
+----+--------+-----+----------------------+
| id | name   | age | email                |
+----+--------+-----+----------------------+
|  1 | 张三   |  25 | zhangsan@example.com |
|  2 | 李四   |  30 | lisi@example.com     |
+----+--------+-----+----------------------+

✅ 第七步:常用命令速查

命令 说明
mysql -u root -p 登录 MySQL
SHOW DATABASES; 查看所有数据库
USE dbname; 切换/使用某个数据库
SHOW TABLES; 查看当前库所有表
SELECT VERSION(); 查看 MySQL 版本
exit\q 退出 MySQL

✅ 第八步:停止/重启 MySQL(可选)

bash 复制代码
# 停止服务
brew services stop mysql

# 重启服务
brew services restart mysql

# 查看状态列表
brew services list | grep mysql

✅ 第九步:卸载 MySQL(如果以后不需要)

⚠️ 警告:以下步骤会清空所有数据,请谨慎操作!

bash 复制代码
# 1. 停止服务
brew services stop mysql

# 2. 卸载软件
brew uninstall mysql

# 3. 删除数据文件 (彻底清理)
rm -rf /usr/local/var/mysql
# 如果是 Apple Silicon (M1/M2/M3),路径可能是:
# rm -rf /opt/homebrew/var/mysql

💡 学习资源推荐

资源 网址
MySQL 官方文档(中文) https://dev.mysql.com/doc/
W3C MySQL 教程 https://www.w3school.com.cn/sql/index.asp
SQLZoo(交互式练习) https://sqlzoo.net/
LeetCode SQL 题库 https://leetcode.cn/problemset/database/

✅ 常见问题(FAQ)

❓ 登录时报错:Access denied for user 'root'@'localhost'

原因 :密码错误。

解决方法:重置 root 密码。

  1. 停止服务:

    bash 复制代码
    brew services stop mysql
  2. 跳过权限验证启动:

    bash 复制代码
    mysqld_safe --skip-grant-tables &
  3. 无密码登录:

    bash 复制代码
    mysql -u root
  4. 在 MySQL 中执行:

    sql 复制代码
    FLUSH PRIVILEGES;
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
    EXIT;
  5. 重启正常服务:

    bash 复制代码
    brew services start mysql

❓ 提示 command not found: mysql

原因 :环境变量未配置(常见于 Apple Silicon M1/M2/M3 芯片)。

解决方法

  1. 将 Homebrew bin 目录加入 PATH:

    bash 复制代码
    echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc
  2. 使配置生效:

    bash 复制代码
    source ~/.zshrc

🔐 安全加固:核实和修改 MySQL监听的网络接口

⚠️ 风险提示

默认配置下,如果 MySQL 绑定到 0.0.0.0,意味着它监听所有网络接口

  • 正常情况:外网 ❌ 无法连接本地 MySQL。
  • 危险情况 :如果绑定 0.0.0.0 且防火墙放行,黑客可直接扫描并尝试爆破你的数据库。

类比:这就像你家门开着,钥匙放在门口,写着"欢迎来拿"。

✅ 如何检查你是否真的"被外网访问"?

1. 查看 MySQL 绑定地址

登录 MySQL 后执行:

sql 复制代码
SHOW VARIABLES LIKE 'bind_address';
  • 安全127.0.0.1 (仅允许本机连接)
  • 危险0.0.0.0 (监听所有 IP,外网可达)
2. 查看有哪些用户可以从远程登录
sql 复制代码
SELECT User, Host FROM mysql.user WHERE Host != 'localhost';

如果看到 'root'@'%''admin'@'%',说明这些账号允许从非本机登录。

3. 检查系统监听端口

在终端运行:

bash 复制代码
lsof -i :3306
  • 如果看到 TCP *:3306 (LISTEN),表示监听所有 IP。
  • 如果看到 TCP localhost:mysql (LISTEN)127.0.0.1:mysql,表示仅监听本地。

🛡️ 正确做法总结

你要做什么 推荐方式
本地开发学习 ✅ 只允许 127.0.0.1,不对外
团队协作测试 ✅ 用后端 API 提供数据,不要暴露 DB
需要远程访问 ✅ 用 SSH 隧道、VPN 或堡垒机,严禁直接开放 3306 端口

✅ 如何修复?→ 改为只监听本地(推荐方案)

方法一:使用 ~/.my.cnf(最简单、无需 sudo)

这是最推荐个人开发者使用的方法,避免权限问题。

  1. 创建/编辑配置文件

    bash 复制代码
    nano ~/.my.cnf
  2. 输入以下内容

    ini 复制代码
    [mysqld]
    bind-address = 127.0.0.1
  3. 保存并退出

    • Ctrl + OEnter (保存)
    • Ctrl + X (退出)
  4. 重启 MySQL 生效配置

    bash 复制代码
    brew services restart mysql
  5. 验证是否生效

    登录 MySQL 并执行:

    sql 复制代码
    SHOW VARIABLES LIKE 'bind_address';

    ✅ 正确输出应为:

    text 复制代码
    +---------------+-----------+
    | Variable_name | Value     |
    +---------------+-----------+
    | bind_address  | 127.0.0.1 |
    +---------------+-----------+
方法二:编辑全局配置(如果需要系统级配置)
  1. 编辑配置文件(路径可能因 Homebrew 版本而异):

    bash 复制代码
    # Intel Mac
    sudo nano /usr/local/etc/my.cnf
    
    # Apple Silicon Mac (M1/M2/M3)
    sudo nano /opt/homebrew/etc/my.cnf
  2. [mysqld] 段落下添加:

    ini 复制代码
    [mysqld]
    bind-address = 127.0.0.1
  3. 保存并重启:

    bash 复制代码
    brew services restart mysql

✅ 额外安全建议(必做)

  1. 清理远程用户

    如果发现 root@% 或其他 % 结尾的用户,建议删除或限制:

    sql 复制代码
    DROP USER 'root'@'%';
    -- 或者改为强密码
    ALTER USER 'root'@'%' IDENTIFIED BY 'StrongPass!2025';

    本地开发通常只需要 root@localhost

  2. 开启 macOS 防火墙

    • 前往:系统设置网络防火墙打开
    • 防止未经授权的入站连接。
  3. 严禁使用 ngrok/frp 暴露 3306 端口

    • 调试 Web 服务可以用 ngrok 转发 80/443 端口。
    • 绝对不要用来转发数据库端口!

最终总结

🔐 记住一句话:

"数据库不是网站,不应该让全世界都能连。"

你应该像保护银行卡密码一样保护你的 MySQL。

项目 当前状态 建议
bind_address * (监听所有) ❌ 危险
实际风险 如果网络开放,可能被连
修复方法 设置 bind-address = 127.0.0.1 ✅ 立即做
是否影响本地使用 ❌ 不影响 命令行、TablePlus、DBeaver 等工具照常可用
相关推荐
XLYcmy3 小时前
pdf论文处理:CSV输出模式
数据库·python·pycharm·pdf·论文·csv·dify
MC皮蛋侠客3 小时前
Redis 系列(十一):高可用(二)——Redis Cluster 集群
数据库·redis·bootstrap
zhanghaha13143 小时前
Python进阶教程:5_XML 解析 —— 新手完全指南
java·前端·数据库
祈禾13 小时前
Redis三大缓存问题与分布式锁
运维·数据库·redis·笔记·分布式·缓存
DBA小马哥13 小时前
关系型数据库核心概念手册:SQL、事务与存储引擎的技术脉络
数据库·sql
丫头,冲鸭!!!13 小时前
记账网站3-连数据库
数据库·个人开发
灯澜忆梦14 小时前
【MySQL12】进阶篇 | SQL优化
数据库·sql·mysql·性能优化
IvorySQL14 小时前
PostgreSQL 日报|PG18.5 回归测试崩溃问题(8 月 12 日)
大数据·数据库·人工智能·postgresql
ltl14 小时前
学习型查询优化器:Neo、Bao、Balsa 与 LLM-CBO
数据库