萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

Linux/Ubuntu 源碼編譯安裝 MySQL 5.5/5.6/5.7/8.0 完整教程 (CMake)

為什麼編譯安裝?

  • 自定義安裝路徑、功能模組
  • 啟用特定存儲引擎、字符集
  • 優化編譯參數 (CPU 指令集、LTO)
  • 無 root 權限安裝到用戶目錄
  • 學習 MySQL 內部構建

前置依賴 (Ubuntu/Debian)

sudo apt-get update
sudo apt-get install -y cmake build-essential libncurses5-dev \
  libssl-dev bison pkg-config libaio-dev libreadline-dev \
  libjemalloc-dev libnuma-dev
  • libncurses5-dev:解決 Curses library not found 錯誤
  • libssl-dev:SSL/TLS 支援
  • libjemalloc-dev:高效能記憶體分配器 (可選)

下載源碼

VERSION=5.7.44  # 或 8.0.36
wget https://cdn.mysql.com/archives/mysql-$VERSION/mysql-$VERSION.tar.gz
tar -xzf mysql-$VERSION.tar.gz
cd mysql-$VERSION

CMake 配置選項詳解

mkdir build && cd build

cmake .. \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DMYSQL_DATADIR=/data/mysql \
  -DSYSCONFDIR=/etc \
  -DWITH_MYISAM_STORAGE_ENGINE=1 \
  -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_READLINE=1 \
  -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
  -DMYSQL_TCP_PORT=3306 \
  -DENABLED_LOCAL_INFILE=1 \
  -DWITH_EXTRA_CHARSETS=all \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_unicode_ci \
  -DWITH_SSL=system \
  -DWITH_ZLIB=system \
  -DWITH_JEMALLOC=1 \
  -DCMAKE_BUILD_TYPE=Release \
  -DCOMPILATION_COMMENT="Custom Build $(date +%F)"

關鍵選項說明

編譯安裝

# 多核並行編譯 (n = CPU 核心數)
make -j$(nproc)

# 安裝
sudo make install

# 建立軟連結方便使用
sudo ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
sudo ln -s /usr/local/mysql/bin/mysqldump /usr/bin/mysqldump

後續配置

1. 用戶權限

sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
sudo chown -R mysql:mysql /usr/local/mysql
sudo chown -R mysql:mysql /data/mysql

2. 配置文件 (/etc/my.cnf)

[mysqld]
basedir = /usr/local/mysql
datadir = /data/mysql
socket = /tmp/mysql.sock
port = 3306
user = mysql
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
default-storage-engine = InnoDB
lower_case_table_names = 1
skip-name-resolve
max_connections = 1000
# InnoDB 核心參數參考前文生產配置

3. 初始化資料字典

# MySQL 5.7+
sudo /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql \
  --basedir=/usr/local/mysql --datadir=/data/mysql

# MySQL 5.6/5.5
sudo /usr/local/mysql/scripts/mysql_install_db --user=mysql \
  --basedir=/usr/local/mysql --datadir=/data/mysql

4. SSL/RSA 憑證生成 (5.7+)

sudo /usr/local/mysql/bin/mysql_ssl_rsa_setup --uid=mysql --datadir=/data/mysql

5. systemd 服務

sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
# 或建立 systemd unit (參考前文)
sudo systemctl daemon-reload
sudo systemctl enable mysql
sudo systemctl start mysql

6. 修改 root 密碼

/usr/local/mysql/bin/mysqladmin -u root password 'StrongPass123!'
# 或登入後
ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongPass123!';

驗證安裝

# 1. 進程
ps -ef | grep mysqld

# 2. 埠
netstat -tnlp | grep 3306

# 3. 版本
mysqladmin version

# 4. 字符集
mysql -e "SHOW VARIABLES LIKE 'character_set%';"

# 5. 引擎
mysql -e "SHOW ENGINES;"

常見編譯錯誤對策

選項說明建議
CMAKE_INSTALL_PREFIX安裝根目錄/usr/local/mysql
MYSQL_DATADIR資料目錄 (與安裝目錄分離)/data/mysql
SYSCONFDIRmy.cnf 搜尋目錄/etc
WITH_*_STORAGE_ENGINE編譯進核心的引擎InnoDB/MyISAM/Partition=1,其餘=0
DEFAULT_CHARSET預設字符集utf8mb4 (支援 Emoji)
WITH_JEMALLOC使用 jemalloc 分配器1 (高併發顯著降低延遲)
CMAKE_BUILD_TYPERelease/Debug/RelWithDebInfoRelease

升級遷移建議

  • 編譯安裝升級:新版本安裝新前綴 (如 /usr/local/mysql-8.0),修改軟連結、my.cnf、systemd 指向新版
  • 資料遷移:mysqldump --all-databases --routines --triggers --events | 新版mysql
  • 就地升級風險高,生產環境建議藍綠部署
copyright © 萬盛學電腦網 all rights reserved
錯誤原因解決
Curses library not found缺 libncurses5-devapt-get install libncurses5-dev; rm CMakeCache.txt; 重跑 cmake
Boost not found (8.0)需指定 -DWITH_BOOST=wget boost_1_73_0.tar.gz; -DWITH_BOOST=/path/to/boost
ld: cannot find -laio缺 libaio-devapt-get install libaio-dev
CMakeCache.txt 殘留重跑 cmake 前必須刪除rm -rf build/* 或 rm CMakeCache.txt