第 2 章:安装与部署
第 2 章:安装与部署
工欲善其事,必先利其器。本章覆盖所有主流平台的 MySQL 安装方式,以及 Docker 快速部署。
2.1 安装方式总览
| 方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 包管理器安装 | 开发/测试环境 | 简单快速 | 版本可能较旧 |
| 官方 APT/YUM 仓库 | 生产 Linux 环境 | 可控版本,自动依赖 | 配置稍复杂 |
| 二进制包 | 生产环境(精细控制) | 不依赖系统包管理 | 手动操作多 |
| Docker | 开发/测试/容器化生产 | 隔离、可重复、快速 | 数据持久化需规划 |
| 源码编译 | 特殊定制需求 | 完全可控 | 耗时、复杂 |
| Homebrew | macOS 开发环境 | 简单 | 不适合生产 |
2.2 Linux 安装
2.2.1 Ubuntu / Debian(APT)
# === 第 1 步:添加 MySQL 官方 APT 仓库 ===
# 下载仓库配置包(以 MySQL 8.4 为例)
wget https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.32-1_all.deb
# 弹出界面选择 MySQL 8.4 LTS
# 更新包索引
sudo apt update
# === 第 2 步:安装 MySQL Server ===
sudo apt install -y mysql-server
# 安装过程中会提示设置 root 密码
# === 第 3 步:启动并设置开机自启 ===
sudo systemctl start mysql
sudo systemctl enable mysql
# === 第 4 步:安全初始化 ===
sudo mysql_secure_installation
2.2.2 CentOS / RHEL(YUM / DNF)
# === 第 1 步:添加 MySQL 官方 YUM 仓库 ===
sudo rpm -Uvh https://dev.mysql.com/get/mysql84-community-release-el9-1.noarch.rpm
# === 第 2 步:安装 MySQL Server ===
# CentOS 8+ / RHEL 8+ 使用 dnf
sudo dnf install -y mysql-community-server
# === 第 3 步:启动并设置开机自启 ===
sudo systemctl start mysqld
sudo systemctl enable mysqld
# === 第 4 步:获取临时密码并修改 ===
sudo grep 'temporary password' /var/log/mysqld.log
# 输出类似:A temporary password is generated for root@localhost: xK3#mR9p!
# 使用临时密码登录并修改
mysql -uroot -p'xK3#mR9p!'
-- 登录后立即修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewP@ssw0rd!2026';
FLUSH PRIVILEGES;
2.2.3 二进制包安装(通用 Linux)
# === 第 1 步:下载二进制包 ===
cd /tmp
wget https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.4-linux-glibc2.28-x86_64.tar.xz
# === 第 2 步:解压到 /usr/local ===
sudo tar -xf mysql-8.4.4-linux-glibc2.28-x86_64.tar.xz -C /usr/local/
sudo ln -s /usr/local/mysql-8.4.4-linux-glibc2.28-x86_64 /usr/local/mysql
# === 第 3 步:创建用户和目录 ===
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
sudo mkdir -p /var/lib/mysql /var/run/mysqld /var/log/mysql
sudo chown -R mysql:mysql /var/lib/mysql /var/run/mysqld /var/log/mysql
# === 第 4 步:初始化数据库 ===
cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql
# 记录输出的临时密码
# === 第 5 步:配置 my.cnf ===
sudo tee /etc/my.cnf << 'EOF'
[mysqld]
basedir = /usr/local/mysql
datadir = /var/lib/mysql
socket = /var/run/mysqld/mysqld.sock
port = 3306
pid-file = /var/run/mysqld/mysqld.pid
log-error = /var/log/mysql/error.log
# 基础调优
innodb_buffer_pool_size = 1G
max_connections = 200
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
[client]
socket = /var/run/mysqld/mysqld.sock
EOF
# === 第 6 步:启动 MySQL ===
sudo bin/mysqld_safe --user=mysql &
# 或使用 systemd(创建 service 文件)
2.3 macOS 安装(Homebrew)
# 安装 MySQL 8.4
brew install [email protected]
# 启动 MySQL 服务
brew services start [email protected]
# 验证版本
mysql --version
# 安全初始化
mysql_secure_installation
💡 提示:如果之前安装过其他版本,先卸载再安装:
brew uninstall mysql
brew cleanup
brew install [email protected]
2.4 Windows 安装
方式 1:官方安装包(MSI)
- 下载:https://dev.mysql.com/downloads/installer/
- 选择 mysql-installer-community-8.4.x.msi
- 安装类型选择 Server only 或 Custom
- 配置 root 密码
- 端口默认 3306
- 服务名默认 MySQL84
方式 2:ZIP 免安装包
# 解压到 C:\mysql-8.4
# 创建 my.ini 配置文件
[mysqld]
basedir = C:/mysql-8.4
datadir = C:/mysql-8.4/data
port = 3306
# 初始化数据库
cd C:\mysql-8.4\bin
mysqld --initialize --console
# 记录临时密码
# 安装为 Windows 服务
mysqld --install MySQL84
# 启动服务
net start MySQL84
2.5 Docker 快速部署
2.5.1 基础 Docker 启动
# 最简单的启动方式
docker run -d \
--name mysql8 \
-e MYSQL_ROOT_PASSWORD=MyStr0ng!Pass \
-p 3306:3306 \
mysql:8.4
# 查看日志
docker logs -f mysql8
# 进入容器执行 SQL
docker exec -it mysql8 mysql -uroot -p'MyStr0ng!Pass'
2.5.2 带数据持久化的完整启动
docker run -d \
--name mysql8 \
-e MYSQL_ROOT_PASSWORD=MyStr0ng!Pass \
-e MYSQL_DATABASE=myapp \
-e MYSQL_USER=appuser \
-e MYSQL_PASSWORD=AppUser!Pass \
-p 3306:3306 \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf:/etc/mysql/conf.d \
-v /data/mysql/log:/var/log/mysql \
--restart=unless-stopped \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_0900_ai_ci \
mysql:8.4
2.5.3 Docker Compose 部署
创建 docker-compose.yml:
version: '3.8'
services:
mysql:
image: mysql:8.4
container_name: mysql8
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-MyStr0ng!Pass}
MYSQL_DATABASE: myapp
MYSQL_USER: appuser
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-AppUser!Pass}
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./conf/my.cnf:/etc/mysql/conf.d/my.cnf:ro
- ./init:/docker-entrypoint-initdb.d:ro # 初始化脚本目录
- mysql_log:/var/log/mysql
command: >
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_0900_ai_ci
--innodb-buffer-pool-size=512M
--max-connections=200
--slow-query-log=ON
--long-query-time=1
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD:-MyStr0ng!Pass}"]
interval: 10s
timeout: 5s
retries: 5
volumes:
mysql_data:
mysql_log:
启动:
# 创建配置目录
mkdir -p conf init
# 启动
docker compose up -d
# 查看状态
docker compose ps
# 查看日志
docker compose logs -f mysql
2.5.4 用自定义配置文件
创建 conf/my.cnf:
[mysqld]
# 基础设置
default-time-zone = '+08:00'
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
# InnoDB 调优
innodb_buffer_pool_size = 512M
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1
# 连接设置
max_connections = 200
wait_timeout = 600
interactive_timeout = 600
# 日志
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log-bin = mysql-bin
binlog-format = ROW
server-id = 1
2.5.5 Docker 初始化脚本
将 .sql 或 .sh 文件放入 init/ 目录,首次启动自动执行:
init/01-create-tables.sql:
USE myapp;
CREATE TABLE IF NOT EXISTS users (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
status TINYINT DEFAULT 1 COMMENT '1=active, 0=disabled',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_email (email),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2.6 初始化安全配置
安装完成后,无论哪种方式,都应执行安全初始化:
mysql_secure_installation
该命令会引导你完成以下操作:
| 步骤 | 操作 | 建议 |
|---|---|---|
| 1 | 设置 root 密码 | 使用强密码(12位+,含大小写、数字、特殊字符) |
| 2 | 删除匿名用户 | ✅ 是 |
| 3 | 禁止 root 远程登录 | ✅ 是 |
| 4 | 删除 test 数据库 | ✅ 是 |
| 5 | 刷新权限表 | ✅ 是 |
2.7 核心配置参数(my.cnf)
安装后最重要的配置文件:
| 参数 | 默认值 | 生产建议 | 说明 |
|---|---|---|---|
innodb_buffer_pool_size | 128M | 物理内存的 60-70% | InnoDB 最关键的参数 |
max_connections | 151 | 200-500 | 根据并发量调整 |
character-set-server | utf8mb4 | utf8mb4 | 支持 emoji 和所有 Unicode |
collation-server | utf8mb4_0900_ai_ci | utf8mb4_0900_ai_ci | 8.0 默认排序规则 |
innodb_flush_log_at_trx_commit | 1 | 1(安全优先) | 0/2 可提升性能但有丢失风险 |
sync_binlog | 1 | 1(安全优先) | 0 可提升性能但有丢失风险 |
slow_query_log | OFF | ON | 记录慢查询 |
long_query_time | 10 | 1 | 慢查询阈值(秒) |
innodb_file_per_table | ON | ON | 每个表独立表空间 |
default-time-zone | SYSTEM | +08:00 | 时区设置 |
⚠️ 关键参数配置示例(4核8G 服务器):
[mysqld]
# 内存:Buffer Pool 占 60%
innodb_buffer_pool_size = 5G
innodb_buffer_pool_instances = 4
# 连接
max_connections = 300
wait_timeout = 600
# 日志
slow_query_log = ON
long_query_time = 1
log-bin = mysql-bin
binlog-format = ROW
# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
# 安全
default-authentication-plugin = caching_sha2_password
local_infile = OFF
2.8 安装后验证
# 检查 MySQL 服务状态
sudo systemctl status mysql
# 检查版本
mysql --version
# 登录并验证
mysql -uroot -p -e "SELECT VERSION(); SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
-- 验证基本功能
SELECT VERSION(); -- 查看版本
SHOW VARIABLES LIKE '%character_set%'; -- 查看字符集
SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; -- 查看 Buffer Pool
SHOW DATABASES; -- 查看数据库列表
SELECT * FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Threads_connected';
业务场景
场景 1:开发团队快速搭建环境
10 人开发团队需要统一的 MySQL 开发环境。
方案:使用 Docker Compose 部署,将 docker-compose.yml 和 conf/my.cnf 纳入 Git 仓库,每人一条命令启动:
git clone <repo>
cd <repo>
docker compose up -d
场景 2:生产环境服务器选型
某 SaaS 系统日活 10 万,数据量约 50GB。
方案:
- 服务器:4 核 16G 或 8 核 32G
- 存储:SSD,至少 200GB
- 安装方式:官方 YUM/APT 仓库
- Buffer Pool:10-20G
- 主从架构(一主两从)