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

Linux 源碼編譯安裝 MySQL 5.6 完整實戰指南(CMake 參數詳解與依賴解決)

     編輯:MySQL 綜合教學

為什麼選擇源碼安裝?

  • 針對 CPU 指令集優化(-march=native)。
  • 精簡組件:僅編譯需要的存儲引擎、字符集、插件。
  • 自定義安裝路徑、數據目錄、Socket、端口等硬編碼參數。
  • 學習 MySQL 內部構建機制。

1. 系統依賴安裝(CentOS 7 / RHEL 7)

yum -y install gcc gcc-c++ make cmake ncurses-devel bison \
  libaio-devel openssl-devel perl-Data-Dumper

關鍵包:

  • cmake ≥ 3.0(5.6 需 3.0+,舊版 yum 可能過低,需手動編譯 cmake)。
  • ncurses-devel:缺失會報 curses.h not found。
  • bison:解析器生成器,缺失報 bison not found。

2. 下載並解壓源碼

cd /usr/local/src
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.51.tar.gz
tar -zxvf mysql-5.6.51.tar.gz
cd mysql-5.6.51

3. CMake 核心參數配置(生產環境模板)

cmake \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.51 \
  -DMYSQL_DATADIR=/data/mysql \
  -DSYSCONFDIR=/etc \
  -DWITH_MYISAM_STORAGE_ENGINE=1 \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  -DWITH_PARTITION_STORAGE_ENGINE=1 \
  -DWITH_FEDERATED_STORAGE_ENGINE=0 \
  -DWITH_SSL=system \
  -DWITH_ZLIB=system \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_general_ci \
  -DEXTRA_CHARSETS=all \
  -DENABLED_LOCAL_INFILE=1 \
  -DWITH_DEBUG=0 \
  -DMYSQL_TCP_PORT=3306 \
  -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
  -DWITH_BOOST=boost_1_59_0   # 5.7+ 需指定 boost 路徑,5.6 可忽略

參數分類說明:

類別參數作用
路徑CMAKE_INSTALL_PREFIX二進制、庫、頭文件安裝根目錄
路徑MYSQL_DATADIR數據文件目錄(啟動後仍可在 my.cnf 覆蓋)
路徑SYSCONFDIRmy.cnf 搜索目錄
引擎WITH_*_STORAGE_ENGINE=1靜態編入指定引擎,0=不編入,1=靜態編入
字符集DEFAULT_CHARSET/DEFAULT_COLLATION編譯期默認字符集,運行時仍可 my.cnf 覆蓋
網絡MYSQL_TCP_PORT/MYSQL_UNIX_ADDR硬編碼默認端口與 Socket 路徑
功能ENABLED_LOCAL_INFILE=1允許 LOAD DATA LOCAL INFILE

4. 編譯與安裝

# 多核並行編譯(根據 CPU 核心數調整 -j)
make -j$(nproc)

# 安裝
make install

常見編譯錯誤處理:

  • CMakeCache.txt 殘留導致參數不生效 → rm -f CMakeCache.txt && rm -rf CMakeFiles 後重跑 cmake。
  • ncurses 找不到 → 確認 ncurses-devel 已裝,或指定 -DCURSES_LIBRARY=/usr/lib64/libncurses.so -DCURSES_INCLUDE_PATH=/usr/include。
  • 內存不足導致 c++: internal compiler error: Killed → 增加 swap 或減少 -j 並行度。

5. 後續配置與初始化

# 創建用戶組/用戶
groupadd -g 497 mysql
useradd -u 499 -g mysql -s /sbin/nologin -M mysql

# 權限
chown -R mysql:mysql /usr/local/mysql-5.6.51
chown -R mysql:mysql /data/mysql

# 拷貝配置模板
cp /usr/local/mysql-5.6.51/support-files/my-default.cnf /etc/my.cnf
# 編輯 /etc/my.cnf 填入 basedir、datadir、port、socket、字符集等

# 初始化系統表(5.6 仍用 mysql_install_db)
/usr/local/mysql-5.6.51/scripts/mysql_install_db \
  --user=mysql \
  --basedir=/usr/local/mysql-5.6.51 \
  --datadir=/data/mysql

# 啟動
/usr/local/mysql-5.6.51/bin/mysqld_safe --defaults-file=/etc/my.cnf &

# 驗證
/usr/local/mysql-5.6.51/bin/mysql -uroot -e "SHOW VARIABLES LIKE 'version';"

6. 環境變量與服務管理

# /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql-5.6.51/bin:$PATH

# systemd 服務文件 /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL 5.6 Source Build
After=network.target

[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/usr/local/mysql-5.6.51/bin/mysqld_safe --defaults-file=/etc/my.cnf
ExecStop=/usr/local/mysql-5.6.51/bin/mysqladmin --defaults-file=/etc/my.cnf shutdown
PIDFile=/data/mysql/mysql.pid
TimeoutSec=300

[Install]
WantedBy=multi-user.target

# 生效
systemctl daemon-reload
systemctl enable mysqld
systemctl start mysqld

7. 升級/遷移提示

  • 源碼安裝升級:重新編譯新版本 → 停舊服務 → 修改 basedir 軟鏈接指向新版 → 啟新服務 → 運行 mysql_upgrade。
  • 數據目錄 /data/mysql 獨立於代碼目錄,遷移極其方便。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved