首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

CentOS 7/8 從原始碼編譯安裝 MySQL 完整教學:目錄規劃、參數調優、安全初始化與服務管理

     編輯:MySQL 資料庫相關知識

CentOS 原始碼編譯安裝 MySQL 核心流程

雖然現代部署多使用官方 RPM、Docker 或包管理器,但原始碼編譯安裝仍具備不可替代的優勢:完全掌控安裝路徑、編譯參數、版本選擇,適合對效能、安全、合規有嚴格要求的生產環境。本文以 MySQL 4.0.16 為例(現代版本流程一致),詳細記錄解壓、配置、編譯、安裝、配置、初始化、啟動與安全加固的完整步驟。

環境準備與目錄規劃

  • 作業系統:CentOS(建議 7/8/Stream)
  • 安裝基礎路徑:/usr/local/mysql(遵循 FHS,便於多版本共存)
  • 資料目錄:/usr/local/mysql/var
  • Socket 檔:/usr/local/mysql/var/mysql.sock
  • 執行使用者:mysql(專用系統帳號,非 root)

步驟 1:解壓與進入原始碼目錄

cd /usr/local/mysql/software
tar zxvf mysql-4.0.16.tar.gz
cd mysql-4.0.16

步驟 2:配置編譯參數(核心環節)

./configure \
  --prefix=/usr/local/mysql/mysql \
  --with-mysqld-user=mysql \
  --with-extra-charsets=all \
  --with-unix-socket-path=/usr/local/mysql/mysql/var/mysql.sock
參數作用現代版本對應
--prefix 指定安裝根目錄 -DCMAKE_INSTALL_PREFIX=... (CMake)
--with-mysqld-user 指定 mysqld 執行使用者,增強安全性 -DWITH_MYSQLD_USER=mysql
--with-extra-charsets 字元集支援範圍,all 含所有 -DDEFAULT_CHARSET=utf8mb4 -DWITH_EXTRA_CHARSETS=all
--with-unix-socket-path Unix socket 檔路徑,客戶端連線依賴 -DMYSQL_UNIX_ADDR=...

關鍵安全原則:絕不可用 root 執行 mysqld。專用使用者程序異常時會自動退出,避免殭屍進程佔用資源且難以清理。

步驟 3:編譯與安裝

make
make install

現代版本(5.7+)改用 CMake:cmake .. && make && make install。編譯時間視 CPU 核心數與記憶體而定,可加 -j$(nproc) 並行加速。

步驟 4:配置檔 my.cnf 部署

# 複製預設配置範本
cp /usr/local/mysql/mysql/share/mysql/my-medium.cnf /etc/my.cnf

# 或建立自訂最小配置
cat > /etc/my.cnf <<'EOF'
[mysqld]
datadir=/usr/local/mysql/mysql/var
socket=/usr/local/mysql/mysql/var/mysql.sock
user=mysql
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[client]
socket=/usr/local/mysql/mysql/var/mysql.sock
EOF

步驟 5:初始化系統資料庫(關鍵步驟)

/usr/local/mysql/mysql/bin/mysql_install_db --user=mysql
  • 建立 mysql 系統資料庫(權限表、時區表、幫助表等)
  • 在 datadir 下建立 var 目錄與各系統表檔案
  • 若報錯檢查:目錄權限、使用者存在、配置檔路徑正確

步驟 6:啟動服務與設定密碼

# 方式一:使用啟動腳本
/usr/local/mysql/mysql/share/mysql/mysql.server start

# 方式二:直接啟動(除錯用)
/usr/local/mysql/mysql/bin/mysqld_safe --user=mysql &

# 設定 root 密碼
/usr/local/mysql/mysql/bin/mysqladmin -u root password '強密碼123!'

# 驗證登入
/usr/local/mysql/mysql/bin/mysql -u root -p

systemd 服務整合(CentOS 7/8 建議)

cat > /etc/systemd/system/mysqld.service <<'EOF'
[Unit]
Description=MySQL Server
After=network.target

[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/mysql/share/mysql/mysql.server start
ExecStop=/usr/local/mysql/mysql/share/mysql/mysql.server stop
PIDFile=/var/run/mysqld/mysqld.pid
TimeoutSec=300

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now mysqld

常見問題排查

現代版本(MySQL 8.0/5.7)關鍵差異提醒

  • 建構系統:CMake 取代 autotools,參數前綴變為 -D
  • 預設認證:caching_sha2_password,舊客戶端需指定 --default-auth=mysql_native_password 或建立相容帳號
  • 資料字典:系統表改為 InnoDB 內部儲存,mysql_install_db 改為 mysqld --initialize 或 --initialize-insecure
  • 最低需求:glibc 2.17+、C++17 編譯器、CMake 3.4+

原始碼編譯安裝雖步驟較多,但能建立最乾淨、最可控的 MySQL 運行環境。配合 Ansible、Chef 等自動化工具,可將上述流程封裝為可重複執行的部署劇本,實現基礎設施即代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
現象可能原因解決方案
啟動失敗,無 socket 檔 datadir 權限錯誤、配置路徑不一致、未執行 mysql_install_db 檢查 /var/log/mysqld.log、確認 my.cnf 路徑、重新初始化
連線被拒 防火牆阻擋 3306、bind-address=127.0.0.1、skip-networking 開放防火牆、設定 bind-address=0.0.0.0
中文亂碼 字元集未設為 utf8mb4 my.cnf 設定 character-set-server=utf8mb4、collation-server=utf8mb4_unicode_ci