用途:本地开发、学习 SQL、搭建测试环境
系统要求:macOS 10.15 (Catalina) 及以上 (Sonoma / Ventura / Monterey 等)
工具:Homebrew(包管理器) + MySQL 8.0
特点:全程使用命令行,简单、高效,适合初学者。
✅ 第一步:安装 Homebrew(如果还没装)
打开终端(Terminal),粘贴以下命令:
/bin/bash-c"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"检查是否成功
brew--version你应该看到类似输出:
Homebrew 4.0+✅ 第二步:用 Homebrew 安装 MySQL
brewinstallmysql⏱️注意:安装过程可能需要几分钟,请耐心等待下载和编译完成。
✅ 第三步:启动 MySQL 服务
安装完成后,启动 MySQL 并设置开机自启:
brew services start mysql验证是否运行中
brew services|grepmysql看到状态为started✅ 表示成功。
✅ 第四步:设置 MySQL 初始安全配置
首次安装后,必须运行安全向导来设置密码、删除匿名用户等。
mysql_secure_installation按提示操作如下:
- Validate Password Plugin?(是否启用密码强度验证插件?)
- 输入
N(学习阶段不需要复杂验证,方便记忆)
- 输入
- Set root password?(设置 root 密码?)
- 输入
Y - 输入新密码(例如:
root123),并再次确认。
- 输入
- Remove anonymous users?(删除匿名用户?)
- 输入
Y
- 输入
- Disallow root login remotely?(禁止 root 远程登录?)
- 输入
Y(学习阶段禁止远程登录更安全)
- 输入
- Remove test database and access to it?(删除测试数据库?)
- 输入
Y
- 输入
- Reload privilege tables now?(重新加载权限表?)
- 输入
Y
- 输入
✅ 完成后,MySQL 就安全配置好了!
✅ 第五步:登录 MySQL
mysql-uroot-p输入你刚才设置的密码(如root123)。如果进入如下界面,说明登录成功:
Welcome to the MySQL monitor... mysql>🎉恭喜!你现在可以开始学习 SQL 了!
✅ 第六步:创建第一个数据库和表(练习用)
在mysql>命令行中执行以下 SQL 语句:
-- 1. 创建数据库CREATEDATABASEtestdb;-- 2. 使用数据库USEtestdb;-- 3. 创建表CREATETABLEusers(idINTAUTO_INCREMENTPRIMARYKEY,nameVARCHAR(50),ageINT,emailVARCHAR(100));-- 4. 插入数据INSERTINTOusers(name,age,email)VALUES('张三',25,'zhangsan@example.com');INSERTINTOusers(name,age,email)VALUES('李四',30,'lisi@example.com');-- 5. 查询数据SELECT*FROMusers;预期输出:
+----+--------+-----+----------------------+ | 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(可选)
# 停止服务brew services stop mysql# 重启服务brew services restart mysql# 查看状态列表brew services list|grepmysql✅ 第九步:卸载 MySQL(如果以后不需要)
⚠️警告:以下步骤会清空所有数据,请谨慎操作!
# 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 密码。
- 停止服务:
brew services stop mysql - 跳过权限验证启动:
mysqld_safe --skip-grant-tables& - 无密码登录:
mysql-uroot - 在 MySQL 中执行:
FLUSHPRIVILEGES;ALTERUSER'root'@'localhost'IDENTIFIEDBY'newpassword';EXIT; - 重启正常服务:
brew services start mysql
❓ 提示command not found: mysql
原因:环境变量未配置(常见于 Apple Silicon M1/M2/M3 芯片)。
解决方法:
- 将 Homebrew bin 目录加入 PATH:
echo'export PATH="/opt/homebrew/bin:$PATH"'>>~/.zshrc - 使配置生效:
source~/.zshrc
🔐 安全加固:核实和修改 MySQL监听的网络接口
⚠️ 风险提示
默认配置下,如果 MySQL 绑定到0.0.0.0,意味着它监听所有网络接口。
- 正常情况:外网 ❌ 无法连接本地 MySQL。
- 危险情况:如果绑定
0.0.0.0且防火墙放行,黑客可直接扫描并尝试爆破你的数据库。
类比:这就像你家门开着,钥匙放在门口,写着“欢迎来拿”。
✅ 如何检查你是否真的“被外网访问”?
1. 查看 MySQL 绑定地址
登录 MySQL 后执行:
SHOWVARIABLESLIKE'bind_address';- ✅安全:
127.0.0.1(仅允许本机连接) - ❌危险:
0.0.0.0(监听所有 IP,外网可达)
2. 查看有哪些用户可以从远程登录
SELECTUser,HostFROMmysql.userWHEREHost!='localhost';如果看到'root'@'%'或'admin'@'%',说明这些账号允许从非本机登录。
3. 检查系统监听端口
在终端运行:
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)
这是最推荐个人开发者使用的方法,避免权限问题。
创建/编辑配置文件:
nano~/.my.cnf输入以下内容:
[mysqld] bind-address = 127.0.0.1保存并退出:
Ctrl + O→Enter(保存)Ctrl + X(退出)
重启 MySQL 生效配置:
brew services restart mysql验证是否生效:
登录 MySQL 并执行:SHOWVARIABLESLIKE'bind_address';✅ 正确输出应为:
+---------------+-----------+ | Variable_name | Value | +---------------+-----------+ | bind_address | 127.0.0.1 | +---------------+-----------+
方法二:编辑全局配置(如果需要系统级配置)
编辑配置文件(路径可能因 Homebrew 版本而异):
# Intel Macsudonano/usr/local/etc/my.cnf# Apple Silicon Mac (M1/M2/M3)sudonano/opt/homebrew/etc/my.cnf在
[mysqld]段落下添加:[mysqld] bind-address = 127.0.0.1保存并重启:
brew services restart mysql
✅ 额外安全建议(必做)
清理远程用户:
如果发现root@%或其他%结尾的用户,建议删除或限制:DROPUSER'root'@'%';-- 或者改为强密码ALTERUSER'root'@'%'IDENTIFIEDBY'StrongPass!2025';本地开发通常只需要
root@localhost。开启 macOS 防火墙:
- 前往:系统设置→网络→防火墙→打开✅
- 防止未经授权的入站连接。
严禁使用 ngrok/frp 暴露 3306 端口:
- 调试 Web 服务可以用 ngrok 转发 80/443 端口。
- 绝对不要用来转发数据库端口!
最终总结
🔐记住一句话:
“数据库不是网站,不应该让全世界都能连。”
你应该像保护银行卡密码一样保护你的 MySQL。
| 项目 | 当前状态 | 建议 |
|---|---|---|
| bind_address | *(监听所有) | ❌ 危险 |
| 实际风险 | 如果网络开放,可能被连 | 高 |
| 修复方法 | 设置bind-address = 127.0.0.1 | ✅ 立即做 |
| 是否影响本地使用 | ❌ 不影响 | 命令行、TablePlus、DBeaver 等工具照常可用 |