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

MySQL 5.6.31 源碼編譯安裝全流程實踐:CMake 參數詳解與生產級配置

     編輯:MySQL 綜合教學

前言

源碼編譯安裝 MySQL 可深度定製功能特性、優化性能參數,是掌握內核機制的必經之路。本文以 MySQL 5.6.31 於 RHEL 6.5 x86_64 為例,完整記錄依賴安裝、CMake 參數矩陣、編譯安裝、初始化、配置優化、服務管理全流程,附帶生產級 my.cnf 解析。

一、環境準備

# 依賴包
yum install -y gcc gcc-c++ ncurses-devel perl cmake bison

# 用戶與目錄規劃
groupadd mysql
useradd -g mysql -s /sbin/nologin mysql

mkdir -p /usr/local/mysql          # 安裝目錄
mkdir -p /data/mysqldb/{binlog,log} # 數據/日誌目錄
mkdir -p /opt/mysqltmp             # 臨時表目錄

chown -R mysql:mysql /usr/local/mysql /data/mysqldb /opt/mysqltmp

二、CMake 核心參數矩陣

參數示例值說明
-DCMAKE_INSTALL_PREFIX/usr/local/mysql安裝根目錄
-DMYSQL_DATADIR/data/mysqldb數據目錄
-DSYSCONFDIR/etc配置文件目錄
-DMYSQL_UNIX_ADDR/tmp/mysql.sockSocket 文件
-DDEFAULT_CHARSETutf8mb4默認字符集(建議 utf8mb4)
-DDEFAULT_COLLATIONutf8mb4_general_ci默認校驗規則
-DMYSQL_TCP_PORT3306監聽端口
-DWITH_INNOBASE_STORAGE_ENGINE1InnoDB(必選)
-DWITH_PARTITION_STORAGE_ENGINE1分區支持
-DWITH_ARCHIVE_STORAGE_ENGINE1歸檔引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE1黑洞引擎
-DWITH_FEDERATED_STORAGE_ENGINE1聯邦引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE1Performance Schema
-DWITH_SSLsystemOpenSSL 支持
-DWITH_ZLIBsystem壓縮庫
-DENABLED_LOCAL_INFILE1LOAD DATA LOCAL
-DENABLE_DOWNLOADS1自動下載 Boost 等依賴

編譯安裝命令

cmake \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DMYSQL_DATADIR=/data/mysqldb \
  -DSYSCONFDIR=/etc \
  -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_general_ci \
  -DMYSQL_TCP_PORT=3306 \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DWITH_PARTITION_STORAGE_ENGINE=1 \
  -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  -DWITH_FEDERATED_STORAGE_ENGINE=1 \
  -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
  -DWITH_SSL=system \
  -DWITH_ZLIB=system \
  -DENABLED_LOCAL_INFILE=1 \
  -DENABLE_DOWNLOADS=1

make -j$(nproc) && make install

注意:重新 CMake 需刪除 CMakeCache.txt。

三、初始化與配置

# 初始化(5.7+ 用 mysqld --initialize,5.6 用 mysql_install_db)
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqldb

# 服務腳本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
# 編輯 /etc/init.d/mysqld 確認 basedir、datadir

生產級 my.cnf 核心段解析

[client]
port=3306
socket=/tmp/mysql.socket
default-character-set=utf8mb4

[mysqld]
# 基礎
user=mysql
port=3306
socket=/tmp/mysql.sock
pid-file=/tmp/mysql.pid
basedir=/usr/local/mysql
datadir=/data/mysqldb
tmpdir=/opt/mysqltmp
open_files_limit=10240

# SQL 模式:嚴格+無引擎替換
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

# 複制
server_id=706
log_bin=/data/mysqldb/binlog/mysql-bin
binlog_format=ROW
expire_logs_days=30
sync_binlog=1
gtid_mode=ON
enforce_gtid_consistency=1

# 連接與超時
max_connections=2000
max_connect_errors=100000
wait_timeout=600
interactive_timeout=600
skip_name_resolve=1

# 字符集
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci

# 緩衝區(按實例內存 60-70% 分配)
innodb_buffer_pool_size=1G
innodb_buffer_pool_instances=8
innodb_log_file_size=256M
innodb_log_files_in_group=3
innodb_flush_log_at_trx_commit=1
innodb_flush_method=O_DIRECT
innodb_file_per_table=1
innodb_io_capacity=2000
innodb_read_io_threads=8
innodb_write_io_threads=8

# 查詢緩存(5.6 仍可用,5.7+ 建議關閉)
query_cache_type=0
query_cache_size=0

# 線程與表緩存
thread_cache_size=100
table_open_cache=4000
table_definition_cache=2000

# 日誌
log_error=/data/mysqldb/log/mysql-error.log
slow_query_log=1
slow_query_log_file=/data/mysqldb/log/mysql-slow.log
long_query_time=1
log_queries_not_using_indexes=1
log_output=FILE

# MyISAM 兼容
key_buffer_size=32M
myisam_sort_buffer_size=64M

[mysql]
no-auto-rehash
prompt=(\u@\h) [\d]>
default-character-set=utf8mb4

四、服務啟動與環境變量

# 環境變量
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
source /etc/profile

# 啟動
service mysqld start

# 安全初始化
mysql_secure_installation

# 開機自啟
chkconfig mysqld on

五、常見坑點排查

  • 編譯失敗:檢查 CMakeCache.txt 殘留、Boost 下載失敗(可預下載 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/path)
  • 啟動報錯:chown -R mysql:mysql /data/mysqldb、檢查 my.cnf 路徑、selinux / firewalld
  • 字符集亂碼:全鏈路統一 utf8mb4,含 client、connection、database、table、column
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved