在 Linux 伺服器上從原始碼編譯安裝 MySQL,能最大化發揮硬體效能並精確控制功能模組。本文涵蓋取得原始碼、編譯前置檢查、關鍵 configure 參數、系統服務整合、root 建立專用用戶、啟停操作與基礎效能參數調校,適合 FreeBSD/Linux 環境的 DBA 與運維人員參考。
雖然套件管理器(apt、yum、ports)提供預編譯版本,但版本往往滯後。建議從 MySQL 官網 下載最新 GA 版原始碼 tarball(mysql-VERSION.tar.gz),確保獲得最新安全修補與效能改善。
| 項目 | 最低版本 | 檢查指令 |
|---|---|---|
| GCC | 2.81+ | gcc --version |
| GNU Make | 3.75+ | gmake --version 或 make --version |
| 記憶體 | 建議 512MB+ | free -m |
若記憶體有限,configure 時加入 --with-low-memory 降低編譯記憶體佔用。
./configure \
--prefix=/usr/local/mysql \
--with-charset=utf8mb4 \
--with-collation=utf8mb4_general_ci \
--with-extra-charsets=all \
--enable-thread-safe-client \
--with-named-thread-libs=-lc_r \ # FreeBSD 3.0+ 必須,使用原生執行緒庫
--with-big-tables \
--with-readline \
--with-ssl \
--with-zlib-dir=bundled \
--enable-local-infile \
--enable-assembler \
--enable-profiling
常用目錄參數:
--prefix:安裝根目錄(預設 /usr/local/mysql)--datadir:資料目錄(建議獨立磁碟分區)--sysconfdir:設定檔目錄(如 /etc)gmake clean # 清除舊編譯產物
gmake # 編譯(視 CPU 核心數可加 -j4 加速)
gmake install # 安裝
# 初始化系統資料庫(僅首次安裝)
/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql
重新 configure 前請執行 rm config.cache && gmake clean 避免舊快取干擾。
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /data/mysql # 資料目錄
# 啟動(背景執行)
/usr/local/mysql/bin/mysqld_safe --user=mysql &
# 或使用 service 腳本(需先複製)
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
service mysqld start
service mysqld stop
service mysqld restart
# SysVinit (CentOS 6 / Ubuntu 14)
chkconfig --add mysqld
chkconfig mysqld on
# systemd (CentOS 7+ / Ubuntu 16+)
cp /usr/local/mysql/support-files/mysql.server /etc/systemd/system/mysqld.service
systemctl daemon-reload
systemctl enable mysqld
systemctl start mysqld
# 設定 root 密碼
/usr/local/mysql/bin/mysqladmin -u root password 'StrongPass123!'
# 或執行安全腳本(移除匿名用戶、禁止遠端 root、移除 test db)
/usr/local/mysql/bin/mysql_secure_installation
[mysqld]
# 基礎路徑
basedir = /usr/local/mysql
datadir = /data/mysql
socket = /tmp/mysql.sock
port = 3306
# 連線設定
max_connections = 1000
back_log = 500
wait_timeout = 7200
interactive_timeout = 7200
# 緩衝區與快取 (假設 8GB 記憶體,InnoDB 專用)
innodb_buffer_pool_size = 6G
innodb_log_file_size = 512M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1
key_buffer_size = 64M # MyISAM 索引快取
sort_buffer_size = 4M
read_buffer_size = 2M
join_buffer_size = 4M
thread_cache_size = 100
table_open_cache = 2048
# 字元集
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
# 慢查詢日誌
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
# 二進制日誌(主從同步必備)
log_bin = /data/mysql/binlog/mysql-bin
binlog_format = ROW
expire_logs_days = 7
server_id = 1
# 檢查進程
ps -ef | grep mysqld
# 連線測試
/usr/local/mysql/bin/mysql -u root -p -e "SELECT VERSION(); SHOW VARIABLES LIKE 'char%';"
# 壓力測試(簡易)
mysqlslap --concurrency=50 --iterations=10 --number-int-cols=5 --number-char-cols=5 --auto-generate-sql
libncurses5-dev、openssl-devel 等開發套件chown -R mysql:mysql /data/mysqlbind-address、防火牆 3306 埠、skip-networking 是否關閉utf8mb4掌握原始碼安裝細節,不只能自訂功能模組,更能在效能調校時從根源掌控 MySQL 行為。建議將上述 my.cnf 範本納入基礎設施即代碼管理,實現環境一致性部署。