一、前置依赖安装(Ubuntu 24.04)
sudo apt update && sudo apt full-upgrade -y
# 必装:编译工具链 + CMake(>=3.25!MySQL 8.4 要求高)
sudo apt install -y \
build-essential \
cmake ninja-build \
g++ gcc libssl-dev libsasl2-dev \
zlib1g-dev liblz4-dev libzstd-dev \
libcurl4-openssl-dev libedit-dev \
libnuma-dev libjemalloc-dev \
pkg-config bison flex \
git wget curl
# ✅ 验证版本(关键!)
cmake --version # 必须 ≥ 3.25(若旧,见下方升级方法)
gcc --version # 推荐 ≥ 12(Ubuntu 24.04 默认 GCC 13.2,OK)
若 CMake < 3.25(如 Ubuntu 22.04)?升级它:
cd /tmp && wget https://github.com/Kitware/CMake/releases/download/v3.29.2/cmake-3.29.2-linux-x86_64.sh
sudo sh cmake-3.29.2-linux-x86_64.sh --prefix=/usr/local --exclude-subdir
export PATH="/usr/local/bin:$PATH"
echo 'export PATH="/usr/local/bin:$PATH"' | sudo tee -a /etc/profile.d/cmake.sh
source /etc/profile.d/cmake.sh
cmake --version # 应输出 3.29.2
二、获取 MySQL 源码(官方 GitHub,非 tarball)
下载 MySQL 官方已将源码迁至 https://github.com/mysql/mysql-server,不再维护 Launchpad 或旧 SVN。
# 创建工作目录(建议 SSD)
mkdir -p ~/mysql-src && cd ~/mysql-src
# 克隆(推荐 v8.4.0 tag,稳定版;也可用 main 分支,但可能不稳定)
git clone --branch mysql-8.4.0 --depth 1 https://github.com/mysql/mysql-server.git .
# ✅ 提示:--depth 1 加速克隆(无历史记录),约 300MB
# 查看当前分支 & 提交
git describe --tags # 输出类似:mysql-8.4.0-rc
三、配置 CMake(关键!决定功能开关)
✅ 强烈建议使用 Ninja 构建(比 make 快 2–3 倍,内存占用低)
✅ 所有选项以 -D 开头;-DBUILD_C 启用官方发布配置(推荐新手)
# 创建构建目录(与源码分离,干净可删)
mkdir build && cd build
# ✅ 执行 CMake 配置(一行命令,已优化,含安全加固)
cmake .. -G Ninja \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DBUILD_C \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LZ4=system \
-DWITH_ZSTD=system \
-DWITH_LIBEDIT=system \
-DWITH_SYSTEMD=ON \
-DINSTALL_SYSC \
-DINSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_0900_ai_ci \
-DENABLE_DOWNLOADS=OFF \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_JEMALLOC=ON \
-DWITH_NUMA=ON \
-DWITH_ICU=system \
-DWITH_UNIT_TESTS=OFF \ # 关闭测试(节省 30+ 分钟编译时间)
-DWITH_BOOST=../boost
# ✅ 验证配置是否成功(必须看到 "Build files have been written")
# 若报错,常见原因见文末【避坑清单】
🔑 关键选项说明:
|选项| 含义 | 推荐值|
| - | - | - |
| -DWITH_SSL=system | 使用系统 OpenSSL(Ubuntu 24.04 自带 3.0+,支持 TLS 1.3)| ✅ 更安全、免编译 Boost.SSL|
|-DWITH_SYSTEMD=ON |生成 mysqld.service,支持 systemctl start mysql |✅ 必开
|-DINSTALL_PREFIX |安装路径(不影响运行时数据目录) |/usr/local/mysql(标准)
|-DMYSQL_DATADIR |数据库存放路径(可独立挂载 SSD) |/usr/local/mysql/data
|-DWITH_JEMALLOC=ON |启用 jemalloc 内存分配器(提升高并发性能)| ✅ 推荐
🌟 进阶:如需 静态链接 OpenSSL/Boost(满足 FIPS 或离线部署),可改用 -DWITH_SSL=bundled + -DWITH_BOOST=../boost(需先下载 boost)。
四、编译与安装(耐心等待 ~15–30 分钟)
bash
1. 并行编译(-j$(nproc) 表示用满 CPU 核心)
ninja -j$(nproc)
# ✅ 成功标志:最后几行显示:
# [100%] Built target mysqld
# [100%] Built target mysql_client_test
# 2. 安装(需要 root 权限)
sudo ninja install
# 3. 验证二进制文件
/usr/local/mysql/bin/mysqld --version
# 输出:mysqld Ver 8.4.0 for Linux on x86_64 (MySQL Community Server - GPL)
✅ 此时 MySQL 已安装到 /usr/local/mysql/,但尚未初始化数据库、未启动服务。
🛠 五、初始化数据目录 & 启动服务
✅ Step 1:创建数据目录并赋权
sudo mkdir -p /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql
sudo chmod -R 755 /usr/local/mysql
✅ Step 2:初始化系统数据库(生成 root 密码)
# 初始化(会自动生成临时 root 密码,记下来!)
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data
# 查看临时密码(在 error log 中,路径由 --log-error 指定;默认在 data/ 目录下)
sudo grep 'temporary password' /usr/local/mysql/data/*.err
# 示例输出:A temporary password is generated for root@localhost: SxKtYv9!aBcD
✅ Step 3:启用 systemd 服务(自动管理)
# 复制 service 文件(CMake 已生成)
sudo cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /etc/systemd/system/
sudo systemctl daemon-reload
# 启动并设开机自启
sudo systemctl enable mysqld
sudo systemctl start mysqld
# 检查状态
sudo systemctl status mysqld
# ✅ 必须显示 active (running),且无 failed
✅ Step 4:首次登录并修改密码
# 登录(用上一步的临时密码)
sudo /usr/local/mysql/bin/mysql -u root -p
# 在 MySQL shell 中执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPass123!';
FLUSH PRIVILEGES;
EXIT;
# ✅ 测试本地连接
/usr/local/mysql/bin/mysql -u root -p -e "SELECT VERSION(), @@hostname;"
🧪 六、验证功能完整性(关键!)
运行以下命令确认核心功能就绪:
# 1. SSL 是否启用
/usr/local/mysql/bin/mysql -u root -p -e "SHOW VARIABLES LIKE 'have_ssl';" # 应为 YES
# 2. InnoDB 引擎是否可用
/usr/local/mysql/bin/mysql -u root -p -e "SHOW ENGINES;" | grep InnoDB
# 3. JSON、窗口函数、CTE 是否支持
/usr/local/mysql/bin/mysql -u root -p -e "
SELECT JSON_OBJECT('key', 'value') AS json,
ROW_NUMBER() OVER() AS rn,
(WITH t AS (SELECT 1) SELECT * FROM t) AS cte;
"
# 4. systemd 服务是否可管理
sudo systemctl is-active mysqld # 应返回 "active"
sudo systemctl is-enabled mysqld # 应返回 "enabled"
✅ 全部通过 → 源码构建成功!
运行时极致调优(my.cnf 生产级模板)
[mysqld]
# === 基础身份与路径 ===
user = mysql
basedir = /usr/local/mysql-optimized
datadir = /var/lib/mysql-optimized
socket = /var/run/mysqld/mysqld.sock
pid-file = /var/run/mysqld/mysqld.pid
port = 3306
# === 安全加固 ===
default_authenticati
require_secure_transport = ON
ssl_mode = REQUIRED
tls_version = TLSv1.3
skip_show_database = ON
local_infile = OFF
secure_file_priv = /var/lib/mysql-files/
# === 连接与网络 ===
max_c
wait_timeout = 300
interactive_timeout = 300
c
max_c
skip_name_resolve = ON # ✅ 关键!禁用 DNS 反查(防连接卡顿)
# === InnoDB(核心引擎)===
innodb_buffer_pool_size = 24G # ≈ 75% 物理内存(32G 机器)
innodb_buffer_pool_instances = 8 # ≥ 8,避免 mutex 争用
innodb_log_file_size = 2G # ≥ 1G,减少 checkpoint 频率
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 1 # 强一致性(如需更高性能可设 2,但丢事务风险)
innodb_flush_method = O_DIRECT # ✅ 绕过 page cache,直写 NVMe
innodb_io_capacity = 2000 # NVMe 推荐 2000–4000
innodb_io_capacity_max = 4000
innodb_read_io_threads = 16
innodb_write_io_threads = 16
innodb_purge_threads = 4
innodb_adaptive_hash_index = OFF # ✅ 高并发下易成瓶颈,关闭
innodb_doublewrite = ON # ✅ 必开(防止页损坏)
innodb_checksum_algorithm = crc32 # 最快校验算法
# === 查询优化 ===
query_cache_type = 0 # ❌ MySQL 8.0+ 已移除,但显式关掉更清晰
table_open_cache = 4000
table_definiti
sort_buffer_size = 4M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
join_buffer_size = 8M
tmp_table_size = 256M
max_heap_table_size = 256M
innodb_sort_buffer_size = 64M
# === 日志与监控 ===
log_error = /var/log/mysql/error-optimized.log
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow-optimized.log
l
log_queries_not_using_indexes = ON
general_log = OFF
log_error_verbosity = 3
# === 性能模式 & 审计 ===
performance_schema = ON
performance_schema_instrument = '%=ON'
performance_schema_c
# ✅ 审计日志(MySQL 8.4 原生支持,无需插件)
audit_log_policy = ALL
audit_log_format = NEW
audit_log_file = /var/log/mysql/audit-optimized.log
audit_log_strategy = ASYNCHRONOUS
# === systemd 集成 ===
# 已由 CMake 启用,此处无需额外配置
评论