首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 5.5+ 源碼編譯安裝:CMake 參數完整對照與實戰指南

     編輯:MySQL 資料庫相關知識

背景:從 autotools 到 CMake

MySQL 5.5 起棄用傳統 ./configure,全面轉向 CMake 構建系統。優勢:跨平台一致性、並行編譯、依賴檢測更智能、IDE 整合友好。

核心命令語法對照

傳統 configureCMake 對應說明
./configurecmake .預設配置生成
./configure --helpcmake . -LH 或 ccmake . (互動式)查看所有選項
make cleanmake clean && rm -f CMakeCache.txt清除快取重新配置

安裝路徑參數映射表

功能configure 選項CMake 選項備註
安裝根目錄--prefix=/usr-DCMAKE_INSTALL_PREFIX=/usr其他路徑若為相對值,基於此前綴
mysqld 執行檔--libexecdir=/usr/sbin-DINSTALL_SBINDIR=sbin相對路徑
資料目錄--localstatedir=/var/lib/mysql-DMYSQL_DATADIR=/var/lib/mysql建議絕對路徑
配置檔目錄--sysconfdir=/etc/mysql-DSYSCONFDIR=/etc/mysql
插件目錄--with-plugindir=...-DINSTALL_PLUGINDIR=lib/mysql/plugin
Man page--mandir=/usr/share/man-DINSTALL_MANDIR=share/man
共享資料--sharedstatedir=/usr/share/mysql-DINSTALL_SHAREDIR=share
庫檔安裝--libdir=/usr/lib64/mysql-DINSTALL_LIBDIR=lib64/mysql
頭檔安裝--includedir=/usr/include/mysql-DINSTALL_INCLUDEDIR=include/mysql

儲存引擎(插件)編譯控制

MySQL 5.5+ 採用插件式架構,--with-plugins 替換為獨立 CMake 選項:

引擎啟用選項停用選項預設行為
InnoDB-DWITH_INNOBASE_STORAGE_ENGINE=1-DWITHOUT_INNOBASE_STORAGE_ENGINE=1內建(非共享)
Archive-DWITH_ARCHIVE_STORAGE_ENGINE=1-DWITHOUT_ARCHIVE_STORAGE_ENGINE=1共享模組
Blackhole-DWITH_BLACKHOLE_STORAGE_ENGINE=1-DWITHOUT_BLACKHOLE_STORAGE_ENGINE=1共享模組
CSV / MyISAM / MEMORY / MERGE無需指定強制內建
Partition-DWITH_PARTITION_STORAGE_ENGINE=1-DWITHOUT_PARTITION_STORAGE_ENGINE=1內建
Federated-DWITH_FEDERATED_STORAGE_ENGINE=1-DWITHOUT_FEDERATED_STORAGE_ENGINE=1共享模組

共享模組 vs 內建:若未指定 WITH/WITHOUT,預設編譯為共享模組(.so),需執行 INSTALL PLUGIN 或 --plugin-load 載入。生產環境建議核心引擎(InnoDB)內建編譯。

第三方庫依賴選項

庫configureCMake說明
Readline--with-readline-DWITH_READLINE=1命令列編輯支援
SSL/TLS--with-ssl=/usr-DWITH_SSL=system或 bundled 使用內建 yaSSL
zlib--with-zlib-dir=/usr-DWITH_ZLIB=system
libwrap (tcp_wrappers)--without-libwrap-DWITH_LIBWRAP=0預設啟用

完整實戰編譯腳本範例


#!/bin/bash
# build_mysql.sh - MySQL 5.5/5.6/5.7 通用編譯範例

VERSION="5.7.44"
PREFIX="/usr/local/mysql-${VERSION}"
DATADIR="/data/mysql/${VERSION}"
BUILD_DIR="/tmp/mysql-build"

# 1. 準備環境
yum install -y cmake gcc gcc-c++ ncurses-devel bison openssl-devel libaio-devel

# 2. 解壓並進入
tar zxvf mysql-${VERSION}.tar.gz
cd mysql-${VERSION}

# 3. 配置(釋放建構目錄隔離源碼)
mkdir -p ${BUILD_DIR}
cd ${BUILD_DIR}

cmake /path/to/mysql-${VERSION} \
    -DCMAKE_INSTALL_PREFIX=${PREFIX} \
    -DMYSQL_DATADIR=${DATADIR} \
    -DSYSCONFDIR=/etc/mysql \
    -DINSTALL_SBINDIR=sbin \
    -DINSTALL_PLUGINDIR=lib/mysql/plugin \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    -DWITH_PARTITION_STORAGE_ENGINE=1 \
    -DWITH_SSL=system \
    -DWITH_ZLIB=system \
    -DWITH_READLINE=1 \
    -DDEFAULT_CHARSET=utf8mb4 \
    -DDEFAULT_COLLATION=utf8mb4_general_ci \
    -DENABLED_LOCAL_INFILE=1 \
    -DWITH_DEBUG=0 \
    -DCMAKE_BUILD_TYPE=Release

# 4. 編譯安裝(並行加速)
make -j$(nproc)
make install

# 5. 後續初始化(略,參考官方文件)
# scripts/mysql_install_db --user=mysql --datadir=${DATADIR}

常見編譯錯誤與解決

錯誤訊息原因解決
Curses library not found缺少 ncurses-develyum install ncurses-devel
Could not find OpenSSLOpenSSL 開發包缺失yum install openssl-devel 或 -DWITH_SSL=bundled
Boost not found (MySQL 5.7+)需 Boost 庫-DWITH_BOOST=/usr/local/boost 或 -DDOWNLOAD_BOOST=1
CMakeCache.txt 衝突舊快取干擾rm -rf CMakeCache.txt CMakeFiles 重新 cmake

升級遷移提醒

  • 5.5 → 5.6/5.7/8.0:mysql_upgrade 必執行,系統表結構變更大
  • 預設字元集變更:5.5 latin1 → 5.7 utf8mb4 → 8.0 utf8mb4(排序規則 utf8mb4_0900_ai_ci)
  • InnoDB 參數重命名:innodb_file_per_table、innodb_buffer_pool_instances 等
  • 密碼驗證插件:8.0 預設 caching_sha2_password,舊客戶端需指定 mysql_native_password
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved