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

MySQL 5.6 源碼編譯安裝最佳實踐:CMake 完整指南與避坑手冊

     編輯:MySQL 資料庫相關知識

前言

MySQL 5.5+ 棄用 configure 改用 CMake 建置系統。本文提供從依賴安裝、CMake 參數映射、存儲引擎選擇、SSL/分區引擎編譯錯誤修復、到部署配置、啟動驗證的完整生產級編譯安裝流程,基於 CentOS/RHEL 環境實測。

一、前置依賴安裝

# 基礎建構工具
yum -y groupinstall "Development Tools"
yum -y install cmake3  # 或從源碼編譯 cmake 3.12+

# MySQL 編譯依賴
yum -y install \
  gcc gcc-c++ \
  ncurses-devel \
  libaio-devel \
  openssl-devel \
  zlib-devel \
  bison \
  perl-Data-Dumper \
  rpcgen

二、CMake 核心參數映射表 (configure → CMake)

舊 configure 參數CMake 參數說明
--prefix-DCMAKE_INSTALL_PREFIX安裝根目錄
--sysconfdir-DSYSCONFDIR配置檔目錄 (相對 prefix)
--localstatedir-DMYSQL_DATADIR資料目錄
--with-tcp-port-DMYSQL_TCP_PORTTCP 連接埠
--with-unix-socket-path-DMYSQL_UNIX_ADDRUnix socket 路徑
--with-mysqld-user-DMYSQL_USER運行用戶
--with-extra-charsets-DEXTRA_CHARSETS額外字符集
--with-readline-DWITH_READLINEReadline 庫
--with-ssl-DWITH_SSLSSL 庫 (system/bundled/yes/no)
--with-embedded-server-DWITH_EMBEDDED_SERVER嵌入式伺服器
--enable-local-infile-DENABLED_LOCAL_INFILELOAD DATA LOCAL
--with-plugins-DWITH_*_STORAGE_ENGINE存儲引擎 (見下表)
--with-debug-DWITH_DEBUG除錯版本

三、存儲引擎 CMake 選項

引擎啟用選項停用選項備註
InnoDB-DWITH_INNOBASE_STORAGE_ENGINE=1-DWITHOUT_INNOBASE_STORAGE_ENGINE=1核心引擎,預設啟用,5.6+ 必須啟用
MyISAM強制內建不可停用系統表依賴
MEMORY/HEAP強制內建不可停用
CSV強制內建不可停用
ARCHIVE-DWITH_ARCHIVE_STORAGE_ENGINE=1-DWITHOUT_ARCHIVE_STORAGE_ENGINE=1壓縮只讀歸檔
BLACKHOLE-DWITH_BLACKHOLE_STORAGE_ENGINE=1-DWITHOUT_BLACKHOLE_STORAGE_ENGINE=1測試/複寫過濾
PARTITION預設啟用-DWITHOUT_PARTITION_STORAGE_ENGINE=164 位舊版 GCC 編譯失敗須停用
FEDERATED-DWITH_FEDERATED_STORAGE_ENGINE=1-DWITHOUT_FEDERATED_STORAGE_ENGINE=1遠程表映射
PERFORMANCE_SCHEMA預設啟用-DDISABLE_PSI_*=1監控儀表

關鍵:未指定 WITH/WITHOUT 的引擎編譯為動態外掛 (ha_*.so),需 INSTALL PLUGIN 或 --plugin-load 載入。

四、生產環境推薦 CMake 命令 (單行)

cmake3 \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6 \
  -DSYSCONFDIR=/etc/mysql \
  -DMYSQL_DATADIR=/data/mysql \
  -DMYSQL_TCP_PORT=3306 \
  -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
  -DMYSQL_USER=mysql \
  -DEXTRA_CHARSETS=all \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_unicode_ci \
  -DWITH_READLINE=1 \
  -DWITH_SSL=system \
  -DWITH_EMBEDDED_SERVER=1 \
  -DENABLED_LOCAL_INFILE=1 \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  -DWITHOUT_PARTITION_STORAGE_ENGINE=1 \
  -DWITH_DEBUG=0 \
  -DWITH_ZLIB=system \
  -DWITH_LZ4=system \
  -DWITH_ZSTD=system

五、常見編譯錯誤與修復

1. PARTITION 引擎 64 位編譯失敗

# 錯誤:undefined reference to `ha_partition::ha_partition...'
# 原因:舊版 GCC/glibc 浮點數處理缺陷
# 修復:停用分區引擎
-DWITHOUT_PARTITION_STORAGE_ENGINE=1

2. SSL 庫找不到 / 版本不符

# 5.6.10+ 強制需 SSL
# 方案 A:使用系統 OpenSSL (推薦)
-DWITH_SSL=system
# 方案 B:使用內建 yaSSL (舊版相容)
-DWITH_SSL=bundled
# 確認 openssl-devel 已安裝

3. CMake 快取污染導致參數不生效

# 重新編譯前必須清理
make clean
rm -f CMakeCache.txt
# 或直接刪除建構目錄重建
rm -rf build && mkdir build && cd build

4. 缺少 rpcgen (CentOS 7+)

yum -y install rpcgen  # 或 libtirpc-devel

六、建構、安裝、初始化、部署全流程

  1. 解壓進入
    tar xf mysql-5.6.xx.tar.gz
    cd mysql-5.6.xx
    mkdir build && cd build
    
  2. 配置 (執行上述 CMake 命令)
  3. 編譯
    make -j$(nproc)  # 並行編譯
    
  4. 安裝
    make install
    
  5. 建立用戶、目錄、權限
    groupadd -r mysql
    useradd -r -g mysql -s /sbin/nologin mysql
    mkdir -p /data/mysql /var/log/mysql /var/run/mysqld
    chown -R mysql:mysql /data/mysql /var/log/mysql /var/run/mysqld
    chmod 750 /data/mysql
    
  6. 配置 my.cnf (/etc/mysql/my.cnf 或 /etc/my.cnf)
    [mysqld]
    basedir=/usr/local/mysql-5.6
    datadir=/data/mysql
    socket=/var/lib/mysql/mysql.sock
    pid-file=/var/run/mysqld/mysqld.pid
    port=3306
    user=mysql
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    skip-name-resolve
    explicit_defaults_for_timestamp=true
    sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    innodb_buffer_pool_size=1G
    innodb_log_file_size=256M
    innodb_flush_log_at_trx_commit=1
    innodb_file_per_table=1
    max_connections=500
    
  7. 初始化資料目錄
    /usr/local/mysql-5.6/scripts/mysql_install_db \
      --defaults-file=/etc/mysql/my.cnf \
      --basedir=/usr/local/mysql-5.6 \
      --datadir=/data/mysql \
      --user=mysql
    
  8. 部署啟動腳本
    cp /usr/local/mysql-5.6/support-files/mysql.server /etc/init.d/mysqld
    chmod +x /etc/init.d/mysqld
    chkconfig --add mysqld
    chkconfig mysqld on
    
  9. 啟動驗證
    service mysqld start
    /usr/local/mysql-5.6/bin/mysql -uroot -p -e "SELECT VERSION(); SHOW ENGINES;"
    
  10. 設定 root 密碼
    /usr/local/mysql-5.6/bin/mysqladmin -uroot password 'StrongRootPass123!'
    

七、升級與維護提示

  • 小版本升級:替換二進制檔,保留 datadir、my.cnf,執行 mysql_upgrade。
  • 大版本升級:建議邏輯備份 mysqldump --all-databases --routines --triggers --single-transaction → 全新編譯安裝 → 還原。
  • 參數調優:使用 mysqltuner.pl、pt-variable-advisor 定期檢視。
  • 備份策略:xtrabackup 熱備份 + Binlog 時間點恢復。

八、總結

MySQL 源碼編譯安裝核心在於:依賴完整、CMake 參數精準映射、存儲引擎按需啟用、SSL 選項正確、PARTITION 64位避坑、清理快取重建、權限目錄規範、配置檔最佳化、啟動腳本標準化。掌握此流程,即可在任何 Linux 環境部署高效能、可定制、安全合規的 MySQL 實例。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved