外观
MySQL 在 macOS 上安装
安装前准备
系统要求
| 操作系统版本 | MySQL 5.7 最低配置 | MySQL 8.0 最低配置 | 生产环境推荐配置 |
|---|---|---|---|
| macOS 10.15+ (Catalina) | 8GB RAM, 4CPU, 50GB 磁盘 | 16GB RAM, 8CPU, 100GB 磁盘 | 32GB+ RAM, 16+ CPU, 500GB+ SSD |
| macOS 11+ (Big Sur, Monterey, Ventura) | 8GB RAM, 4CPU, 50GB 磁盘 | 16GB RAM, 8CPU, 100GB 磁盘 | 32GB+ RAM, 16+ CPU, 500GB+ SSD |
| macOS 12+ (Monterey+) | 16GB RAM, 8CPU, 100GB 磁盘 | 32GB RAM, 16CPU, 200GB 磁盘 | 64GB+ RAM, 32+ CPU, 1TB+ SSD |
| macOS 13+ (Ventura+) | 16GB RAM, 8CPU, 100GB 磁盘 | 32GB RAM, 16CPU, 200GB 磁盘 | 64GB+ RAM, 32+ CPU, 1TB+ SSD |
环境检查与准备
bash
# 检查 macOS 版本和芯片类型
sw_vers
uname -m
# 检查硬件资源
# 内存
sysctl hw.memsize | awk '{print $2/1024/1024/1024 " GB"}'
# CPU 核心数
sysctl hw.ncpu
# 磁盘空间
df -h
# 磁盘 I/O 性能测试
dd if=/dev/zero of=/tmp/test bs=1G count=1 oflag=dsync
rm /tmp/test
# 检查端口占用情况
lsof -i :3306 || echo "3306 端口未被占用"
# 检查是否已安装 MySQL
which mysql 2>/dev/null || echo "未安装 MySQL"
mysql --version 2>/dev/null || echo "未安装 MySQL"
# 检查系统防火墙状态
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate安装必要工具
bash
# 安装 Xcode Command Line Tools
xcode-select --install
# 验证安装
xcode-select -p安装方式选择
安装方式对比
| 安装方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Homebrew | 包管理便捷,自动依赖,易于升级,支持 Apple Silicon | 版本选择有限,默认配置可能不适合生产环境 | 推荐,大多数用户,开发测试环境 |
| DMG 安装包 | 官方提供,图形化安装,适合新手 | 升级不便,卸载麻烦,配置固定 | 新手用户,快速部署 |
| ZIP 压缩包 | 高度自定义,无系统集成,适合生产环境 | 配置复杂,需要手动管理服务 | 高级用户,生产环境,需要精确控制 |
| Docker | 隔离环境,快速部署,版本管理方便 | 性能开销,数据管理复杂 | 开发测试,隔离环境,CI/CD 流程 |
Homebrew 安装
安装 Homebrew(如未安装)
bash
# 安装 Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 验证 Homebrew 安装
brew --version
# 配置 Homebrew 环境变量(如未自动配置)
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zshrc
eval "$(/opt/homebrew/bin/brew shellenv)"使用 Homebrew 安装 MySQL
安装最新稳定版
bash
# 更新 Homebrew 包列表
brew update
# 安装 MySQL(默认安装最新稳定版)
brew install mysql安装特定版本
bash
# 查看可用的 MySQL 版本
brew search mysql
# 安装 MySQL 8.0
brew install mysql@8.0
# 安装 MySQL 5.7(旧版本,仅 Intel 芯片支持)
brew install mysql@5.7服务管理
bash
# 启动 MySQL 服务
brew services start mysql
# 或特定版本
brew services start mysql@8.0
# 停止 MySQL 服务
brew services stop mysql
# 或特定版本
brew services stop mysql@8.0
# 重启 MySQL 服务
brew services restart mysql
# 或特定版本
brew services restart mysql@8.0
# 查看服务状态
brew services list | grep mysql配置与安全加固
初始化配置
bash
# 运行安全配置向导
mysql_secure_installation配置选项建议:
- 验证密码组件:启用(
Y) - 密码策略强度:生产环境选择
2(STRONG),开发环境可选择1(MEDIUM) - 设置 root 密码:使用强密码(长度≥12位,包含大小写字母、数字、特殊字符)
- 删除匿名用户:删除(
Y) - 禁止 root 远程登录:生产环境选择
Y,开发环境可选择N - 删除测试数据库:删除(
Y) - 刷新权限表:立即生效(
Y)
环境变量配置
bash
# 对于 MySQL 8.0(Apple Silicon)
echo 'export PATH="/opt/homebrew/opt/mysql@8.0/bin:$PATH"' >> ~/.zshrc
# 对于 MySQL 8.0(Intel 芯片)
echo 'export PATH="/usr/local/opt/mysql@8.0/bin:$PATH"' >> ~/.zshrc
# 更新环境变量
source ~/.zshrc
# 验证配置
mysql --version
which mysql验证安装
bash
# 登录 MySQL
mysql -uroot -p
# 查看版本和状态
SELECT VERSION(), @@version_comment;
SHOW STATUS LIKE 'Uptime';
# 查看数据库列表
SHOW DATABASES;
# 退出 MySQL
exit;DMG 安装包安装
下载 DMG 安装包
- 访问 MySQL 官方下载页
- 选择 macOS 作为操作系统
- 选择 DMG Archive 下载格式
- 选择对应芯片版本:
- Apple Silicon:选择带有
arm64标识的版本 - Intel:选择带有
x86_64标识的版本
- Apple Silicon:选择带有
- 点击 Download 按钮下载
安装步骤
- 双击下载的 DMG 文件(如
mysql-8.0.36-macos13-arm64.dmg) - 双击 pkg 安装文件 开始安装
- 按照安装向导操作:
- 点击「继续」→「继续」→「同意」
- 选择安装类型(默认即可)→「安装」
- 输入 macOS 管理员密码 →「安装软件」
- 安装完成后,点击「关闭」
初始化配置
启动 MySQL 偏好设置:
- 打开「系统设置」→ 搜索「MySQL」→ 点击 MySQL 图标
- 点击「Start MySQL Server」启动服务
- 勾选「Automatically Start MySQL Server on Startup」设置开机自启
配置 root 密码:
- 首次启动会弹出提示框,点击「Initialize Database」
- 选择加密方式:
- 生产环境:「Use Strong Password Encryption」
- 兼容性要求:「Use Legacy Password Encryption」
- 设置 root 密码 → 点击「OK」
验证安装:
bash
# 登录 MySQL
/usr/local/mysql/bin/mysql -uroot -p
# 查看版本
SELECT VERSION();环境变量配置
bash
# 将 MySQL 添加到 PATH
# 对于 Intel 芯片
echo 'export PATH="/usr/local/mysql/bin:$PATH"' >> ~/.zshrc
# 对于 Apple Silicon 芯片
echo 'export PATH="/usr/local/mysql/bin:$PATH"' >> ~/.zshrc
# 更新环境变量
source ~/.zshrc
# 验证
mysql --versionZIP 压缩包安装(生产环境推荐)
下载和解压
下载 ZIP 压缩包:
- 访问 MySQL 官方下载页
- 选择 macOS → ZIP Archive 格式
- 下载对应芯片版本(Intel 或 Apple Silicon)
解压并配置:
bash# 创建安装目录 sudo mkdir -p /usr/local/mysql # 解压 ZIP 文件(替换为实际文件名) sudo tar -xzf mysql-8.0.36-macos13-arm64.zip -C /usr/local/ # 创建软链接(便于版本管理) sudo ln -sf /usr/local/mysql-8.0.36-macos13-arm64 /usr/local/mysql # 设置权限 sudo chown -R _mysql:_mysql /usr/local/mysql
创建配置文件
bash
# 创建配置目录和日志目录
sudo mkdir -p /usr/local/mysql/etc /usr/local/mysql/logs /usr/local/mysql/data /usr/local/mysql/tmp
# 创建生产环境配置文件
sudo vi /usr/local/mysql/etc/my.cnf生产环境优化配置示例:
ini
[mysqld]
# 基础设置
port = 3306
server-id = 1
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
tmpdir = /usr/local/mysql/tmp
socket = /tmp/mysql.sock
pid-file = /usr/local/mysql/mysql.pid
# 字符集设置
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 日志设置
log-error = /usr/local/mysql/logs/error.log
slow_query_log = 1
slow_query_log_file = /usr/local/mysql/logs/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
log_bin = /usr/local/mysql/logs/binlog
binlog_format = ROW
binlog_expire_logs_seconds = 604800
max_binlog_size = 1G
# InnoDB 设置
innodb_buffer_pool_size = 16G # 物理内存的 50-70%
innodb_log_file_size = 2G
innodb_flush_log_at_trx_commit = 1 # 生产环境推荐 1(最高安全性)
innodb_file_per_table = 1
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_buffer_pool_instances = 8
innodb_flush_method = O_DIRECT # 需要 SSD 支持
innodb_log_files_in_group = 4
innodb_doublewrite = 1 # 生产环境推荐开启
# 连接设置
max_connections = 2000
wait_timeout = 60
interactive_timeout = 60
back_log = 1024
max_connect_errors = 1000000
# 查询优化
table_open_cache = 4096
table_definition_cache = 2048
max_heap_table_size = 128M
tmp_table_size = 128M
join_buffer_size = 8M
read_buffer_size = 4M
read_rnd_buffer_size = 8M
# MySQL 8.0 特有配置
default_authentication_plugin = caching_sha2_password
innodb_dedicated_server = 0 # 生产环境建议手动配置
[mysql]
default-character-set = utf8mb4
[client]
port = 3306
default-character-set = utf8mb4
socket = /tmp/mysql.sock
[mysqldump]
quick
max_allowed_packet = 1G初始化 MySQL
bash
# 进入 MySQL bin 目录
cd /usr/local/mysql/bin
# 初始化数据库(生成随机 root 密码)
sudo ./mysqld --initialize --user=_mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --defaults-file=/usr/local/mysql/etc/my.cnf
# 查看初始密码
sudo grep 'temporary password' /usr/local/mysql/logs/error.log配置和启动服务
使用 launchd 启动(生产环境推荐)
创建 launchd 配置文件:
bashsudo vi /Library/LaunchDaemons/com.mysql.mysqld.plist配置内容:
xml<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Disabled</key> <false/> <key>Label</key> <string>com.mysql.mysqld</string> <key>ProgramArguments</key> <array> <string>/usr/local/mysql/bin/mysqld</string> <string>--defaults-file=/usr/local/mysql/etc/my.cnf</string> <string>--user=_mysql</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> <key>WorkingDirectory</key> <string>/usr/local/mysql</string> <key>StandardErrorPath</key> <string>/usr/local/mysql/logs/error.log</string> <key>StandardOutPath</key> <string>/dev/null</string> </dict> </plist>加载并启动服务:
bash# 设置正确的权限 sudo chown root:wheel /Library/LaunchDaemons/com.mysql.mysqld.plist sudo chmod 644 /Library/LaunchDaemons/com.mysql.mysqld.plist # 加载服务 sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysqld.plist # 验证服务状态 sudo launchctl list | grep mysql lsof -i :3306
手动启动(临时)
bash
# 手动启动 MySQL
cd /usr/local/mysql/bin
sudo ./mysqld_safe --user=_mysql --defaults-file=/usr/local/mysql/etc/my.cnf &
# 停止 MySQL
sudo ./mysqladmin -uroot -p shutdown设置 root 密码和安全配置
bash
# 登录 MySQL(使用初始随机密码)
mysql -uroot -p --socket=/tmp/mysql.sock
# 设置新的 root 密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPassword123!';
# 创建专用 DBA 用户
CREATE USER 'dba_admin'@'localhost' IDENTIFIED BY 'DbaStrongPassword456!';
GRANT ALL PRIVILEGES ON *.* TO 'dba_admin'@'localhost' WITH GRANT OPTION;
# 安全加固
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%';
FLUSH PRIVILEGES;
# 退出 MySQL
exit;Docker 安装
安装 Docker Desktop
- 访问 Docker 官方下载页
- 下载并安装 Docker Desktop for Mac
- 启动 Docker Desktop 并完成初始化配置
- 验证 Docker 安装:bash
docker --version docker-compose --version
运行 MySQL 容器
bash
# 拉取 MySQL 8.0 镜像
docker pull mysql:8.0
# 运行 MySQL 容器(生产环境配置)
docker run -d \
--name mysql-server \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=YourStrongPassword123! \
-e MYSQL_DATABASE=mydb \
-e MYSQL_USER=myuser \
-e MYSQL_PASSWORD=MyUserPassword789! \
-e MYSQL_INITDB_ARGS="--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci" \
-v mysql-data:/var/lib/mysql \
-v mysql-config:/etc/mysql/conf.d \
--restart always \
--cpus=4 \
--memory=8g \
mysql:8.0
# 检查容器状态
docker ps
# 进入容器内的 MySQL
docker exec -it mysql-server mysql -uroot -p
# 查看版本
SELECT VERSION();Docker 高级配置
bash
# 创建自定义配置文件
mkdir -p ~/docker/mysql/conf
cat > ~/docker/mysql/conf/my.cnf << EOF
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=1000
innodb_buffer_pool_size=4G
EOF
# 使用自定义配置运行容器
docker run -d \
--name mysql-server \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=YourStrongPassword123! \
-v mysql-data:/var/lib/mysql \
-v ~/docker/mysql/conf:/etc/mysql/conf.d \
--restart always \
mysql:8.0远程访问配置
配置 MySQL 允许远程连接
sql
-- 登录 MySQL
mysql -uroot -p
-- 创建允许远程访问的用户
CREATE USER 'dba_remote'@'%' IDENTIFIED BY 'RemoteStrongPassword789!';
GRANT ALL PRIVILEGES ON *.* TO 'dba_remote'@'%' WITH GRANT OPTION;
-- 或限制特定 IP 段访问
CREATE USER 'dba_remote'@'192.168.1.%' IDENTIFIED BY 'RemoteStrongPassword789!';
GRANT ALL PRIVILEGES ON *.* TO 'dba_remote'@'192.168.1.%' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;配置 macOS 防火墙
bash
# 查看防火墙状态
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
# 允许 MySQL 传入连接
# 方法 1:通过应用程序
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/local/mysql/bin/mysqld
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /usr/local/mysql/bin/mysqld
# 方法 2:直接允许端口
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/local/mysql/bin/mysqld
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /usr/local/mysql/bin/mysqld
# 重启防火墙使配置生效
sudo pkill -HUP socketfilterfw测试远程连接
从另一台机器测试连接:
bash
# 使用 MySQL 客户端连接
mysql -h <macos-mysql-ip> -udba_remote -p
# 使用 telnet 测试端口连通性
telnet <macos-mysql-ip> 3306
# 使用 nc 测试端口连通性
nc -zv <macos-mysql-ip> 3306自动化安装脚本
Homebrew 自动化安装脚本
bash
#!/bin/bash
# MySQL 安装配置
MYSQL_VERSION="8.0"
ROOT_PASSWORD="MySQLRootPassword123!"
DBA_PASSWORD="DBAAdminPassword456!"
# 检查并安装 Homebrew
if ! command -v brew &> /dev/null; then
echo "正在安装 Homebrew..." -e "\033[32m"
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
eval "$(/opt/homebrew/bin/brew shellenv)"
fi
# 更新 Homebrew
echo "正在更新 Homebrew..." -e "\033[32m"
brew update
# 安装 MySQL
echo "正在安装 MySQL $MYSQL_VERSION..." -e "\033[32m"
brew install mysql@$MYSQL_VERSION
# 启动 MySQL 服务
echo "正在启动 MySQL 服务..." -e "\033[32m"
brew services start mysql@$MYSQL_VERSION
# 等待服务启动
sleep 10
# 配置环境变量
echo "正在配置环境变量..." -e "\033[32m"
# 检测芯片类型
CHIP=$(uname -m)
if [ "$CHIP" = "arm64" ]; then
echo 'export PATH="/opt/homebrew/opt/mysql@$MYSQL_VERSION/bin:$PATH"' >> ~/.zshrc
else
echo 'export PATH="/usr/local/opt/mysql@$MYSQL_VERSION/bin:$PATH"' >> ~/.zshrc
fi
source ~/.zshrc
# 获取初始密码
echo "正在获取初始密码..." -e "\033[32m"
if [ "$CHIP" = "arm64" ]; then
INIT_LOG="/opt/homebrew/var/log/mysql/error.log"
else
INIT_LOG="/usr/local/var/log/mysql/error.log"
fi
INITIAL_PASSWORD=$(grep 'temporary password' $INIT_LOG | tail -1 | awk '{print $NF}')
echo "初始密码: $INITIAL_PASSWORD" -e "\033[33m"
# 设置新密码
echo "正在设置新密码..." -e "\033[32m"
mysql -uroot -p"$INITIAL_PASSWORD" --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$ROOT_PASSWORD';" 2>/dev/null
# 运行安全配置
echo "正在配置安全选项..." -e "\033[32m"
mysql -uroot -p"$ROOT_PASSWORD" -e "DELETE FROM mysql.user WHERE User=''; DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); DROP DATABASE IF EXISTS test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'; FLUSH PRIVILEGES;"
# 创建 DBA 用户
echo "正在创建 DBA 用户..." -e "\033[32m"
mysql -uroot -p"$ROOT_PASSWORD" -e "CREATE USER 'dba_admin'@'localhost' IDENTIFIED BY '$DBA_PASSWORD'; GRANT ALL PRIVILEGES ON *.* TO 'dba_admin'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;"
# 配置防火墙
echo "正在配置防火墙..." -e "\033[32m"
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add $(which mysqld) 2>/dev/null || true
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp $(which mysqld) 2>/dev/null || true
sudo pkill -HUP socketfilterfw 2>/dev/null || true
# 验证安装
echo "正在验证安装..." -e "\033[32m"
mysql -udba_admin -p"$DBA_PASSWORD" -e "SELECT VERSION(), @@version_comment;"
# 输出安装结果
echo "\n======================================" -e "\033[33m"
echo "MySQL $MYSQL_VERSION 安装完成!" -e "\033[32m"
echo "======================================" -e "\033[33m"
echo "Root 密码:$ROOT_PASSWORD" -e "\033[36m"
echo "DBA 密码:$DBA_PASSWORD" -e "\033[36m"
echo "服务状态:已启动(开机自启)" -e "\033[36m"
echo "环境变量:已配置" -e "\033[36m"
echo "防火墙:已允许 MySQL 连接" -e "\033[36m"
echo "访问命令:mysql -udba_admin -p'$DBA_PASSWORD'" -e "\033[36m"
echo "======================================" -e "\033[33m"
echo -e "\033[0m"使用方法
bash
# 保存脚本为 install_mysql.sh
# 赋予执行权限
chmod +x install_mysql.sh
# 执行脚本
./install_mysql.sh常见问题解决
服务无法启动
检查配置文件语法:
bashmysqld --defaults-file=/usr/local/mysql/etc/my.cnf --validate-config查看错误日志:
bash# Homebrew 安装 tail -f /opt/homebrew/var/log/mysql/error.log # ZIP 安装 tail -f /usr/local/mysql/logs/error.log # DMG 安装 tail -f /usr/local/mysql/data/$(hostname).err权限问题:
bash# 确保数据目录权限正确 sudo chown -R _mysql:_mysql /usr/local/mysql/data端口占用:
bashlsof -i :3306 kill -9 <pid> 2>/dev/null || true
忘记 root 密码
停止 MySQL 服务:
bash# Homebrew 安装 brew services stop mysql # ZIP 安装(launchd) sudo launchctl unload -w /Library/LaunchDaemons/com.mysql.mysqld.plist # DMG 安装 # 通过系统偏好设置停止服务以跳过授权表模式启动:
bash# Homebrew 安装 mysqld_safe --skip-grant-tables --skip-networking & # ZIP 安装 cd /usr/local/mysql/bin sudo ./mysqld_safe --skip-grant-tables --skip-networking --defaults-file=/usr/local/mysql/etc/my.cnf &无密码登录并修改密码:
bashmysql -uroot USE mysql; # MySQL 8.0 ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPassword123!'; # 刷新权限 FLUSH PRIVILEGES; # 退出 exit;重启服务:
bash# 终止跳过授权表的进程 pkill -f "mysqld_safe" # 启动正常服务 brew services start mysql # 或 sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysqld.plist
无法连接到 MySQL 服务器
检查服务状态:
bashbrew services list | grep mysql sudo launchctl list | grep mysql检查 socket 文件:
bashls -la /tmp/mysql.sock检查 MySQL 进程:
bashps aux | grep mysqld检查防火墙设置:
bashsudo /usr/libexec/ApplicationFirewall/socketfilterfw --listapps
卸载 MySQL
Homebrew 安装的卸载
bash
# 停止服务
brew services stop mysql
# 卸载 MySQL
brew uninstall mysql
# 删除相关文件
rm -rf /opt/homebrew/var/mysql 2>/dev/null || rm -rf /usr/local/var/mysql
rm /opt/homebrew/etc/my.cnf 2>/dev/null || rm /usr/local/etc/my.cnf
rm -rf ~/.mysql_history
# 删除环境变量
# 编辑 ~/.zshrc,移除 MySQL 相关的 PATH 设置DMG 安装的卸载
停止服务:通过系统偏好设置停止 MySQL 服务
删除应用和文件:
bash# 删除应用程序
sudo rm -rf /Applications/MySQL/
删除数据和配置
sudo rm -rf /usr/local/mysql sudo rm /etc/my.cnf
删除 launchd 配置
sudo rm /Library/LaunchDaemons/com.mysql.mysqld.plist
删除日志
sudo rm -rf /var/log/mysql*
删除用户和组(可选)
sudo dscl . -delete /Users/_mysql sudo dscl . -delete /Groups/_mysql
删除环境变量
编辑 ~/.zshrc,移除 MySQL 相关的 PATH 设置
### ZIP 安装的卸载
```bash
# 停止服务
sudo launchctl unload -w /Library/LaunchDaemons/com.mysql.mysqld.plist
# 删除服务配置
sudo rm /Library/LaunchDaemons/com.mysql.mysqld.plist
# 删除 MySQL 目录
sudo rm -rf /usr/local/mysql /usr/local/mysql-*
# 删除配置文件
sudo rm /etc/my.cnf
# 删除环境变量
# 编辑 ~/.zshrc,移除 MySQL 相关的 PATH 设置Docker 安装的卸载
bash
# 停止并删除容器
docker stop mysql-server
docker rm mysql-server
# 删除数据卷
docker volume rm mysql-data mysql-config
# 删除镜像
docker rmi mysql:8.0版本差异与升级
MySQL 5.7 与 8.0 在 macOS 上的主要差异
| 特性 | MySQL 5.7 | MySQL 8.0 |
|---|---|---|
| 操作系统支持 | 支持 macOS 10.12+ | 支持 macOS 10.13+ |
| Apple Silicon 支持 | 不支持 | 支持 |
| 默认字符集 | latin1 | utf8mb4 |
| 默认认证插件 | mysql_native_password | caching_sha2_password |
| 数据字典 | 文件系统 | 内置数据字典 |
| JSON 支持 | 基础支持 | 增强支持(JSON_TABLE、JSON_PATH 等) |
| 窗口函数 | 不支持 | 支持 |
| 通用表表达式 (CTE) | 不支持 | 支持 |
| 内存占用 | 较低 | 较高 |
| 性能 | 良好 | 更好(特别是并发性能) |
| 安全性 | 良好 | 增强(密码策略、审计日志等) |
升级 MySQL
Homebrew 升级
bash
# 备份数据
mysqldump -uroot -p --all-databases --routines --triggers --events > all_databases_backup.sql
# 升级 MySQL
brew update
brew upgrade mysql
# 重启服务
brew services restart mysql
# 运行升级检查
mysql_upgrade -uroot -p
# 验证升级
mysql -uroot -p -e "SELECT VERSION();"
mysqlcheck -uroot -p --all-databases跨版本升级注意事项
备份数据:
bash# 全量备份 mysqldump -uroot -p --all-databases --routines --triggers --events > all_databases_backup.sql # 备份配置文件 cp /usr/local/mysql/etc/my.cnf /usr/local/mysql/etc/my.cnf.bak检查升级兼容性:
bash# 使用 MySQL Shell 进行升级前检查 mysqlsh -- util checkForServerUpgrade root@localhost:3306测试升级:在测试环境中先进行升级测试
升级后验证:
bash# 运行升级检查工具 mysql_upgrade -uroot -p # 验证数据完整性 mysqlcheck -uroot -p --all-databases # 检查错误日志 tail -f /usr/local/mysql/logs/error.log
生产环境最佳实践
- 使用专用服务器:生产环境建议使用专用的 macOS Server 或 Linux 服务器
- 使用 SSD 存储:显著提升 MySQL 性能,特别是随机读写性能
- 合理配置内存:
innodb_buffer_pool_size设置为物理内存的 50-70%- 预留足够内存给操作系统和其他服务
- 启用二进制日志:用于数据恢复和主从复制
- 配置慢查询日志:便于性能分析和优化
- 定期备份:
- 配置自动备份策略(全量备份 + 增量备份)
- 备份到异地存储
- 定期测试备份恢复
- 监控与告警:
- 使用 MySQL Workbench、Zabbix 或 Prometheus + Grafana 监控
- 监控关键指标:连接数、查询响应时间、慢查询数、磁盘空间等
- 安全加固:
- 使用强密码策略
- 限制远程访问 IP
- 定期更新 MySQL 版本
- 启用审计日志
- 配置防火墙
- 合理设置服务账户:
- 使用专用的低权限账户运行 MySQL 服务
- 避免使用 root 账户
- 文档化配置:记录安装配置过程、版本信息和重要参数
- 定期维护:
- 定期优化表:`OPTIMIZE TABLE table_name;
- 定期分析表:`ANALYZE TABLE table_name;
- 定期检查碎片:`SHOW TABLE STATUS LIKE 'table_name';
总结
MySQL 在 macOS 上的安装方式多样,包括 Homebrew、DMG 安装包、ZIP 压缩包和 Docker。生产环境推荐使用 ZIP 压缩包方式,便于精确控制配置和管理;开发测试环境推荐使用 Homebrew,安装便捷易于升级。
在安装过程中,需要根据业务需求选择合适的 MySQL 版本,配置合理的系统参数和安全设置,并进行充分的测试和验证。自动化脚本可以提高安装效率,减少人为错误,适合批量部署场景。
无论选择哪种安装方式,都应遵循最佳实践,包括设置强密码、配置安全加固、合理调整参数、定期更新和备份数据,确保 MySQL 服务能够稳定、安全地运行。
