MySQL 安装指南
MySQL 关系型数据库的权威安装指南。涵盖 Linux(CentOS Stream 9)、macOS(Apple Silicon)、Windows 三大平台,包含最佳实践配置与常见问题排查。
基于 MySQL 官方文档(dev.mysql.com),最后更新:2026-04
MySQL 8.0 系列将于 2026-04 结束生命周期。MySQL 8.4 LTS 是当前推荐的长期支持版本(支持至 2032 年)。本指南以 MySQL 8.4 LTS 为主线,兼顾 8.0 安装说明。
一、Linux 安装(CentOS Stream 9)
1.1 环境信息
| 项目 | 值 |
|---|---|
| 发行版 | CentOS Stream 9(RHEL 系,兼容 rhel fedora) |
| 内核 | 5.15.120-5.ve2.x86_64 |
| 架构 | x86_64 |
| 包管理器 | dnf(YUM 的继任) |
CentOS Stream 9 是 RHEL 9 的上游开发分支。MySQL 官方 Yum 仓库明确支持 EL9(Enterprise Linux 9)系列,包括 CentOS Stream 9、RHEL 9、Rocky Linux 9、AlmaLinux 9。
1.2 前置条件
- 具有
sudo或root权限的用户 - 活跃的网络连接
- 内核版本 ≥ 3.10(当前 5.15 远超要求)
- 系统已执行
dnf update保持最新 - 确保
libaio、numactl已安装(MySQL 依赖)
1.3 卸载旧版本与冲突包
CentOS Stream 9 默认仓库包含 MariaDB(MySQL 的分支),安装前必须清理冲突包:
# 卸载系统自带的 MariaDB 及旧版 MySQL
sudo dnf remove -y mariadb-server mariadb mariadb-libs \
mysql-server mysql mysql-libs \
community-mysql-server community-mysql
# 清理残留配置(可选)
sudo rm -rf /var/lib/mysql
sudo rm -f /etc/my.cnf /etc/my.cnf.d/*如果之前有 MySQL 数据需要保留,请先备份 /var/lib/mysql 目录,再执行卸载操作。
1.4 安装 MySQL Server(推荐:官方 Yum 仓库方式)
Step 1:下载并安装 MySQL 官方 Yum 仓库
# 下载 MySQL 8.4 Yum 仓库 RPM(EL9)
sudo dnf install -y https://dev.mysql.com/get/mysql84-community-release-el9-1.noarch.rpmmysql84-community-release— MySQL 8.4 LTS 仓库配置包el9— 适用于 Enterprise Linux 9(CentOS Stream 9 / RHEL 9)- 安装后会在
/etc/yum.repos.d/下创建mysql-community.repo和mysql-community-source.repo
验证仓库已启用:
sudo dnf repolist enabled | grep mysql应看到类似 mysql-8.4-lts-community 或 mysql84-community 的仓库名称。
Step 2:选择 MySQL 版本(可选)
MySQL Yum 仓库默认启用最新 LTS 版本(8.4)。如需安装 8.0:
# 查看所有可用的 MySQL 子仓库
sudo dnf repolist all | grep mysql
# 禁用 8.4,启用 8.0
sudo dnf config-manager --disable mysql-8.4-lts-community
sudo dnf config-manager --enable mysql80-community
# 验证当前启用的版本
sudo dnf repolist enabled | grep mysqlStep 3:安装 MySQL Server
sudo dnf install -y mysql-community-server此命令自动安装以下核心组件:
| 包名 | 说明 |
|---|---|
mysql-community-server | MySQL 服务端守护进程(mysqld) |
mysql-community-client | MySQL 命令行客户端(mysql) |
mysql-community-common | 公共文件(字符集、配置模板) |
mysql-community-libs | 共享库(libmysqlclient) |
mysql-community-client-plugins | 客户端插件(认证等) |
mysql-community-icu-data-files | ICU 国际化数据(正则表达式支持) |
如果安装过程中提示 GPG 密钥确认,验证指纹为 MySQL 官方公钥后输入 y 确认。
Step 4:启动并设置开机自启
# 启动 MySQL 守护进程
sudo systemctl start mysqld
# 设置开机自动启动
sudo systemctl enable mysqld
# 验证运行状态
sudo systemctl status mysqldStep 5:获取临时 root 密码
MySQL 首次启动时会自动初始化数据目录并生成临时 root 密码:
# 从日志中提取临时密码
sudo grep 'temporary password' /var/log/mysqld.log输出类似:A temporary password is generated for root@localhost: Xk9#aB2!cDfE
此临时密码仅能用于首次登录,登录后必须立即修改。临时密码包含大小写字母、数字和特殊字符。
Step 6:安全初始化(mysql_secure_installation)
sudo mysql_secure_installation交互式向导将引导完成以下安全配置:
- 输入临时密码 — 粘贴 Step 5 获取的密码
- 设置新 root 密码 — 需满足密码策略(默认 MEDIUM:≥8 字符,含大小写、数字、特殊字符)
- 移除匿名用户 — 输入
y(推荐) - 禁止 root 远程登录 — 输入
y(生产环境推荐;开发环境可选n) - 删除 test 数据库 — 输入
y(推荐) - 重新加载权限表 — 输入
y
Step 7:验证安装
# 登录 MySQL
mysql -u root -p
# 查看版本
mysql> SELECT VERSION();
# 查看当前用户
mysql> SELECT USER(), CURRENT_USER();
# 查看数据库列表
mysql> SHOW DATABASES;
# 退出
mysql> EXIT;# 查看 MySQL 服务版本(无需登录)
mysqld --version
# 查看安装的 MySQL 包
rpm -qa | grep mysql-community1.5 安装特定版本(可选)
# 列出所有可用版本
dnf list mysql-community-server --showduplicates | sort -r
# 安装指定版本(替换 VERSION_STRING)
sudo dnf install -y mysql-community-server-VERSION_STRING1.6 Linux 安装后配置(Post-Install)
密码策略调整
MySQL 8 默认使用 validate_password 组件,密码策略为 MEDIUM。开发环境可适当降低:
-- 查看当前密码策略
SHOW VARIABLES LIKE 'validate_password%';
-- 降低密码策略为 LOW(仅检查长度)
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 6;降低密码策略仅适用于开发/测试环境。生产环境应保持 MEDIUM 或 STRONG 策略。
创建远程访问用户
默认 root 用户仅允许本地登录。生产环境推荐创建独立用户用于远程连接:
-- 创建用户并授权(替换实际用户名、密码和权限)
CREATE USER 'appuser'@'%' IDENTIFIED BY 'StrongP@ssw0rd!';
GRANT ALL PRIVILEGES ON mydb.* TO 'appuser'@'%';
FLUSH PRIVILEGES;
-- 如需 root 远程访问(不推荐生产环境)
-- UPDATE mysql.user SET Host='%' WHERE User='root';
-- FLUSH PRIVILEGES;认证插件
MySQL 8.4 默认使用 caching_sha2_password 认证插件。部分旧客户端可能不兼容,可按需调整:
-- 查看当前默认认证插件
SHOW VARIABLES LIKE 'default_authentication_plugin';
-- 为特定用户使用旧版认证(兼容旧客户端)
ALTER USER 'appuser'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongP@ssw0rd!';防火墙放行(CentOS Stream 9 使用 firewalld)
# 放行 MySQL 默认端口 3306
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
# 验证规则
sudo firewall-cmd --list-portsSELinux 配置
CentOS Stream 9 默认启用 SELinux,可能阻止 MySQL 非标准操作:
# 查看 SELinux 状态
getenforce
# 允许 MySQL 使用非标准端口(如修改了默认端口)
sudo semanage port -a -t mysqld_port_t -p tcp 3307
# 如果遇到 SELinux 阻止问题,查看审计日志
sudo ausearch -m AVC -ts recent | grep mysql二、macOS 安装(Apple Silicon M 系列)
2.1 系统要求
| 要求 | 说明 |
|---|---|
| 芯片 | Apple Silicon(M1/M2/M3/M4/M5)或 Intel |
| macOS 版本 | ≥ macOS 13(Ventura) |
| 磁盘空间 | ≥ 1 GB |
2.2 方式一:Homebrew 安装(推荐开发环境)
安装 MySQL 8.4 LTS
# 更新 Homebrew
brew update
# 安装 MySQL 8.4(默认最新 LTS)
brew install mysql
# 如需安装 8.0(注意:8.0 将于 2026-04 EOL)
# brew install mysql@8.0启动服务
# 使用 brew services 管理(推荐,支持开机自启)
brew services start mysql
# 或手动启动(不设置开机自启)
mysql.server start安全初始化
# 首次安装后 root 密码为空,执行安全初始化
mysql_secure_installation交互流程与 Linux 一致(见 1.4 Step 6)。
验证安装
mysql --version
mysql -u root -p -e "SELECT VERSION();"常用 brew 命令
# 查看服务状态
brew services list | grep mysql
# 停止服务
brew services stop mysql
# 重启服务
brew services restart mysql
# 卸载
brew uninstall mysql
rm -rf /opt/homebrew/var/mysql # 删除数据目录(Apple Silicon 路径)- Homebrew 安装目录:
/opt/homebrew/ - MySQL 数据目录:
/opt/homebrew/var/mysql/ - MySQL 配置文件:
/opt/homebrew/etc/my.cnf - Intel Mac 路径为
/usr/local/开头
2.3 方式二:官方 DMG 安装包
- 访问 MySQL Community Downloads,选择 macOS → ARM, 64-bit → DMG Archive
- 双击 DMG,运行安装器,按向导完成安装
- 安装结束时会弹窗显示 临时 root 密码,务必记录
- 系统偏好设置 → MySQL → Start MySQL Server
- 将 MySQL 加入 PATH:
# 添加到 ~/.zshrc(macOS 默认 zsh)
export PATH="/usr/local/mysql/bin:$PATH"
source ~/.zshrc- 执行安全初始化:
mysql_secure_installation2.4 Apple Silicon 注意事项
- MySQL 8.0.26+ 和 8.4 均提供原生 ARM64 二进制,性能优于 Rosetta 2 模拟
- Homebrew 在 Apple Silicon 上安装路径为
/opt/homebrew/,与 Intel 的/usr/local/不同 - 如果使用 Docker 运行 MySQL,确保拉取
linux/arm64架构的镜像:
docker pull --platform linux/arm64 mysql:8.4三、Windows 安装
3.1 系统要求
| 要求 | 说明 |
|---|---|
| 系统版本 | Windows 10(Build 17763+)/ Windows 11 / Windows Server 2019+ |
| 架构 | x86_64(64 位) |
| 前置依赖 | Microsoft Visual C++ 2019 Redistributable(x64) |
3.2 方式一:MSI 安装包(推荐)
MySQL 8.4 起不再提供 MySQL Installer 统一安装器,改为独立 MSI 包 + MySQL Configurator。
安装步骤
- 访问 MySQL Community Downloads,选择 Windows (x86, 64-bit) → MSI Installer
- 下载并双击 MSI 安装包
- 按向导选择安装路径(默认
C:\Program Files\MySQL\MySQL Server 8.4\) - 安装完成后自动启动 MySQL Configurator
MySQL Configurator 配置
- Server Configuration Type:选择 Development Computer(开发)/ Server Computer(生产)/ Dedicated Computer(专用服务器)
- Networking:默认端口 3306,勾选 Open Windows Firewall port
- Authentication Method:选择 Use Strong Password Encryption(推荐
caching_sha2_password) - Accounts and Roles:设置 root 密码,可选添加其他用户
- Windows Service:勾选 Configure MySQL Server as a Windows Service,勾选 Start at System Startup
- Apply Configuration:点击 Execute 应用所有配置
验证安装
# 添加 MySQL 到 PATH(如果未自动添加)
$env:PATH += ";C:\Program Files\MySQL\MySQL Server 8.4\bin"
# 验证版本
mysql --version
# 登录测试
mysql -u root -p3.3 方式二:ZIP Archive 免安装版
适合需要完全控制安装过程或在同一机器运行多个 MySQL 实例的场景:
- 下载 ZIP Archive 并解压到目标目录(如
D:\mysql-8.4) - 创建配置文件
D:\mysql-8.4\my.ini - 以管理员身份打开 PowerShell:
# 初始化数据目录(生成临时 root 密码)
cd D:\mysql-8.4\bin
.\mysqld --initialize --console
# 注册 Windows 服务
.\mysqld --install MySQL84 --defaults-file="D:\mysql-8.4\my.ini"
# 启动服务
net start MySQL84
# 安全初始化
mysql_secure_installation3.4 Windows 注意事项
- VC++ 运行库: MySQL 8.x 需要 Microsoft Visual C++ 2019 Redistributable。如缺失会报
VCRUNTIME140.dll not found,从 Microsoft 官网 下载安装 - 配置文件位置: Windows 上默认读取顺序为
C:\Windows\my.ini→C:\my.ini→ MySQL 安装目录下的my.ini - 服务管理: 使用
services.msc或 PowerShell 管理 MySQL 服务
# 查看服务状态
Get-Service MySQL*
# 停止/启动
Stop-Service MySQL84
Start-Service MySQL84- Windows Defender 排除: 建议将 MySQL 数据目录添加到 Windows Defender 排除列表以提升 I/O 性能
四、通用最佳实践配置(my.cnf / my.ini)
安装完成后,配置 MySQL 服务端参数以适应生产环境。
4.1 配置文件位置
| 平台 | 路径 |
|---|---|
| Linux | /etc/my.cnf 或 /etc/mysql/my.cnf |
| macOS(Homebrew) | /opt/homebrew/etc/my.cnf(Apple Silicon) |
| macOS(DMG) | /usr/local/mysql/my.cnf |
| Windows | MySQL 安装目录下的 my.ini |
4.2 推荐的生产级 my.cnf
以下配置适用于 4 核 8 GB 内存 的典型云服务器,可根据实际资源按比例调整:
[mysqld]
# === 基础设置 ===
port = 3306
bind-address = 0.0.0.0
socket = /var/lib/mysql/mysql.sock
pid-file = /var/run/mysqld/mysqld.pid
datadir = /var/lib/mysql
default-storage-engine = InnoDB
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
skip-name-resolve = ON
lower-case-table-names = 0
# === 连接设置 ===
max_connections = 500
max_connect_errors = 1000
wait_timeout = 600
interactive_timeout = 1800
connect_timeout = 10
# === InnoDB 引擎(核心调优)===
innodb_buffer_pool_size = 4G
innodb_buffer_pool_instances = 4
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
innodb_file_per_table = ON
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
innodb_read_io_threads = 4
innodb_write_io_threads = 4
# === 日志设置 ===
log-error = /var/log/mysqld.log
slow_query_log = ON
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes = ON
# === 二进制日志(主从复制 / 数据恢复)===
server-id = 1
log-bin = mysql-bin
binlog_format = ROW
binlog_expire_logs_seconds = 604800
max_binlog_size = 256M
sync_binlog = 1
# === 临时表与排序 ===
tmp_table_size = 64M
max_heap_table_size = 64M
sort_buffer_size = 4M
join_buffer_size = 4M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
# === 安全设置 ===
local-infile = OFF
symbolic-links = OFF
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[client]
default-character-set = utf8mb4
socket = /var/lib/mysql/mysql.sock
[mysql]
default-character-set = utf8mb4
prompt = (\u@\h) [\d]>4.3 关键配置说明
| 配置项 | 说明 | 推荐值 |
|---|---|---|
innodb_buffer_pool_size | InnoDB 缓冲池,MySQL 最重要的内存参数 | 物理内存的 50%–70% |
innodb_flush_log_at_trx_commit | 事务日志刷盘策略。1=每次提交刷盘(最安全) | 1(生产)/ 2(开发) |
innodb_flush_method | I/O 刷新方法,O_DIRECT 避免双重缓冲 | O_DIRECT |
character-set-server | 服务端默认字符集 | utf8mb4 |
collation-server | 默认排序规则,0900_ai_ci 为 Unicode 9.0 规则 | utf8mb4_0900_ai_ci |
skip-name-resolve | 跳过 DNS 反向解析,加速连接建立 | ON |
slow_query_log | 慢查询日志,定位性能瓶颈必备 | ON |
binlog_format | 二进制日志格式,ROW 模式最安全可靠 | ROW |
sync_binlog | 每次事务提交同步 binlog,防数据丢失 | 1 |
max_connections | 最大并发连接数 | 根据应用负载调整 |
4.4 应用配置
# 编辑配置文件
sudo vim /etc/my.cnf
# 检查配置语法(MySQL 8.4)
mysqld --validate-config
# 重启 MySQL 使配置生效
sudo systemctl restart mysqld
# 验证关键参数
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
mysql -u root -p -e "SHOW VARIABLES LIKE 'character_set_server';"部分参数支持运行时修改(SET GLOBAL),部分需要重启。使用 SET PERSIST 可以同时修改运行值和持久化到 mysqld-auto.cnf,重启后自动生效。
五、常见问题与解决方案
5.1 权限问题
问题:Access denied for user 'root'@'localhost'
原因: 临时密码过期或输入错误。
解决: 使用 --skip-grant-tables 重置密码:
# 停止 MySQL
sudo systemctl stop mysqld
# 以跳过权限模式启动
sudo mysqld --skip-grant-tables --user=mysql &
# 无密码登录
mysql -u root
# 重置密码
mysql> FLUSH PRIVILEGES;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewP@ssw0rd!';
mysql> EXIT;
# 正常重启
sudo kill $(pgrep mysqld)
sudo systemctl start mysqld5.2 服务启动失败
问题:Job for mysqld.service failed
排查步骤:
# 查看详细错误
sudo journalctl -xeu mysqld.service
# 查看 MySQL 错误日志
sudo tail -100 /var/log/mysqld.log
# 常见原因及解决
# 1. 数据目录权限不正确
sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod 750 /var/lib/mysql
# 2. my.cnf 配置错误
mysqld --validate-config
# 3. 端口被占用
ss -tlnp | grep 33065.3 与 MariaDB 冲突
问题:Error: Transaction test error: file /usr/lib64/mysql/libmysqlclient.so conflicts
原因: CentOS Stream 9 默认仓库的 MariaDB 与 MySQL 共享库冲突。
解决:
# 彻底卸载 MariaDB
sudo dnf remove -y mariadb* mysql-libs
# 清理缓存后重新安装
sudo dnf clean all
sudo dnf install -y mysql-community-server5.4 字符集问题
问题:中文数据插入后显示乱码
解决: 确保全链路使用 utf8mb4:
-- 检查各级字符集
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
-- 修改已有数据库字符集
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
-- 修改已有表字符集
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;同时确认客户端连接指定了 charset=utf8mb4。
5.5 连接数耗尽
问题:Too many connections
解决:
-- 查看当前连接数
SHOW STATUS LIKE 'Threads_connected';
SHOW PROCESSLIST;
-- 临时增加(运行时生效)
SET GLOBAL max_connections = 1000;
-- 永久修改(写入 my.cnf)
-- max_connections = 1000
-- 排查:找出空闲连接并终止
SELECT * FROM information_schema.processlist WHERE Command = 'Sleep' AND Time > 600;5.6 InnoDB 日志文件大小不匹配
问题:InnoDB: Resizing redo log 或启动慢
说明: MySQL 8.4 已改进 redo log 自动管理,但修改 innodb_log_file_size 后重启可能触发 redo log 重建,耗时取决于数据量。这是正常行为,等待完成即可。
5.7 磁盘空间不足
问题:No space left on device 或 binlog 占满磁盘
解决:
# 查看 MySQL 数据目录磁盘占用
du -sh /var/lib/mysql/*
# 清理过期 binlog
mysql -u root -p -e "PURGE BINARY LOGS BEFORE NOW() - INTERVAL 3 DAY;"
# 设置自动过期(my.cnf)
# binlog_expire_logs_seconds = 604800 (7天)
# 如需迁移数据目录
# 1. 停止 MySQL
# 2. 移动 /var/lib/mysql 到新路径
# 3. 修改 my.cnf 中 datadir
# 4. 更新 SELinux 上下文
# 5. 重启 MySQL5.8 macOS:Homebrew 升级后 MySQL 无法启动
解决:
# 查看错误日志
cat /opt/homebrew/var/mysql/*.err
# 通常是数据目录版本不兼容,执行升级
mysql_upgrade -u root -p
# 或使用 mysqld 内置升级(8.0.16+)
mysqld --upgrade=AUTO
# 如果仍然失败,备份数据后重新初始化
brew services stop mysql
mv /opt/homebrew/var/mysql /opt/homebrew/var/mysql.bak
mysqld --initialize
brew services start mysql5.9 Windows:VC++ 运行库缺失
问题:VCRUNTIME140.dll not found 或 MSVCP140.dll not found
解决: 从 Microsoft Visual C++ Redistributable 下载并安装 x64 版本,重启后再启动 MySQL。
六、安装验证清单
-
mysql --version— 确认客户端版本 -
mysqld --version— 确认服务端版本 -
mysql -u root -p -e "SELECT VERSION();"— 确认可登录且版本正确 -
SHOW VARIABLES LIKE 'character_set_server';— 确认字符集为utf8mb4 -
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';— 确认 InnoDB 缓冲池大小 -
SHOW VARIABLES LIKE 'slow_query_log';— 确认慢查询日志已开启 -
systemctl is-active mysqld— 确认服务正在运行(Linux) -
systemctl is-enabled mysqld— 确认开机自启(Linux)
七、卸载 MySQL
Linux(CentOS Stream 9)
# 停止服务
sudo systemctl stop mysqld
sudo systemctl disable mysqld
# 卸载所有 MySQL 包
sudo dnf remove -y mysql-community-*
# 删除数据、日志和配置
sudo rm -rf /var/lib/mysql
sudo rm -rf /var/log/mysqld.log
sudo rm -f /etc/my.cnf /etc/my.cnf.d/*
sudo rm -f /etc/yum.repos.d/mysql-community*
# 删除 MySQL 用户和组(可选)
sudo userdel -r mysqlmacOS
Homebrew 安装:
brew services stop mysql
brew uninstall mysql
rm -rf /opt/homebrew/var/mysql
rm -f /opt/homebrew/etc/my.cnfDMG 安装:
sudo rm -rf /usr/local/mysql*
sudo rm -f /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
sudo rm -rf /Library/PreferencePanes/MySQL.prefPaneWindows
- 控制面板 → 程序和功能 → MySQL Server → 卸载
- 删除数据目录(默认
C:\ProgramData\MySQL\) - 删除安装目录(默认
C:\Program Files\MySQL\) - 删除 Windows 服务:
sc delete MySQL84