首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 5.6.10 源碼編譯安裝最佳實踐:從 CMake 到生產就緒

     編輯:MySQL 綜合教學

前言:為何選擇源碼編譯?

  • 自定義編譯參數(-march=native、-O3、LTO)榨乾 CPU 性能
  • 精簡模塊,減小體積、縮小攻擊面
  • 及時應用上游補丁,不等待發布版
  • 學習內核機制,構建內部定制版

環境準備

# CentOS/RHEL 7/8
yum install -y gcc gcc-c++ cmake3 ncurses-devel openssl-devel bison \
  libaio-devel numactl-devel rpcgen perl-Data-Dumper

# Ubuntu/Debian
apt install -y build-essential cmake libncurses5-dev libssl-dev bison \
  libaio-dev numactl-dev

關鍵依賴:CMake 3.5+

MySQL 5.6 要求 CMake ≥ 2.8.12,生產建議用 CMake 3.15+ 以獲得更好的編譯器特性檢測與並行構建支持。

# 若系統版本過舊,自編譯 CMake
wget https://cmake.org/files/v3.25/cmake-3.25.2.tar.gz
tar xzf cmake-3.25.2.tar.gz && cd cmake-3.25.2
./bootstrap --parallel=$(nproc) && make -j$(nproc) && make install

獲取源碼與驗證

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.51.tar.gz
# 驗證 GPG 簽名
gpg --keyserver pgp.mit.edu --recv-keys 5072E1F5
gpg --verify mysql-5.6.51.tar.gz.asc mysql-5.6.51.tar.gz

編譯配置:生產級參數模板

cd mysql-5.6.51
mkdir build && cd build

cmake .. \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.51 \
  -DMYSQL_DATADIR=/data/mysql \
  -DSYSCONFDIR=/etc \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DWITH_PARTITION_STORAGE_ENGINE=1 \
  -DWITH_FEDERATED_STORAGE_ENGINE=0 \
  -DWITH_BLACKHOLE_STORAGE_ENGINE=0 \
  -DWITH_ARCHIVE_STORAGE_ENGINE=0 \
  -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
  -DWITH_SSL=system \
  -DWITH_ZLIB=system \
  -DWITH_LIBWRAP=0 \
  -DENABLED_LOCAL_INFILE=1 \
  -DWITH_DEBUG=0 \
  -DCMAKE_BUILD_TYPE=RelWithDebInfo \
  -DCMAKE_C_FLAGS_RELWITHDEBINFO="-O3 -march=native -pipe -fomit-frame-pointer" \
  -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-O3 -march=native -pipe -fomit-frame-pointer" \
  -DWITH_LTO=ON \
  -DMYSQL_MAINTAINER_MODE=OFF

參數解析

編譯安裝

make -j$(nproc)  # 並行編譯
make install

部署後配置

# 創建用戶與目錄
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

# 初始化數據目錄 (MySQL 5.6 使用 mysql_install_db)
/usr/local/mysql-5.6.51/scripts/mysql_install_db \
  --basedir=/usr/local/mysql-5.6.51 \
  --datadir=/data/mysql \
  --user=mysql

# 配置 my.cnf 關鍵參數
cat > /etc/my.cnf <<'EOF'
[mysqld]
basedir=/usr/local/mysql-5.6.51
datadir=/data/mysql
socket=/var/run/mysqld/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid
user=mysql
port=3306
innodb_buffer_pool_size=4G
innodb_log_file_size=512M
innodb_flush_log_at_trx_commit=1
sync_binlog=1
max_connections=2000
EOF

# 啟動並驗證
/usr/local/mysql-5.6.51/bin/mysqld_safe --defaults-file=/etc/my.cnf &
mysqladmin -uroot -S /var/run/mysqld/mysql.sock ping

系統服務化

cp /usr/local/mysql-5.6.51/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on

性能驗證清單

  1. SHOW VARIABLES LIKE 'version_compile_os'; 確認編譯架構
  2. SHOW ENGINE INNODB STATUS\G 檢查 LTO 是否生效(無報錯即可)
  3. SysBench OLTP 測試對比官方二進制包,預期 QPS 提升 5-15%

總結

源碼編譯 MySQL 5.6 的核心價值在於硬件感知優化與模塊精簡。關鍵成功因子:新版 CMake + LTO + march=native + 系統 OpenSSL。構建出的二進制包可作為內部標準鏡像,通過 Ansible/Docker 統一分發,實現「編譯一次,到處運行」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
參數作用
-DWITH_SSL=system使用系統 OpenSSL,及時獲取安全補丁
-DCMAKE_BUILD_TYPE=RelWithDebInfo保留調試符號,便於生產排查 core dump
-DWITH_LTO=ON鏈接時優化(LTO),跨文件內聯,性能提升 3-8%
-march=native針對當前 CPU 指令集優化(AVX2、BMI2 等)
精簡存儲引擎僅保留 InnoDB、Partition、PerfSchema,減少 30% 體積