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

CentOS 7 從源碼編譯安裝 MySQL 5.6 完整指南

     編輯:MySQL 綜合教學

CentOS 7 從源碼編譯安裝 MySQL 5.6 完整指南

本文詳細記錄了在 CentOS 7 最小化安裝環境下,從源碼編譯安裝 MySQL 5.6.25 的全過程,涵蓋環境準備、源碼獲取、編譯參數配置、單實例與多實例部署、防火牆設置及常見問題排查,適合需要自定義編譯選項或學習 MySQL 底層部署的運維與開發人員。

一、 環境準備與版本確認

1. 運行環境

  • 作業系統:CentOS 7 最小化安裝 (Linux 3.10.0-123.el7.x86_64)
  • 目標版本:MySQL 5.6.25 (GA 穩定版)

2. 版本選擇說明

MySQL 版本號格式如 mysql-5.6.1-m1,其中 m1 表示里程碑開發版,GA (General Availability) 則代表經過長時間測試的穩定版。生產環境強烈建議選擇 GA 版本。若需自定義存儲引擎、字符集或路徑,源碼安裝是最佳選擇。

3. 下載與校驗

官方下載頁:MySQL Community Server

下載 mysql-5.6.25.tar.gz 後,務必校驗 MD5:

[root@localhost src]# md5sum mysql-5.6.25.tar.gz
37664399c91021abe070faa700ecd0ed  mysql-5.6.25.tar.gz

若與官網不符,請更換鏡像源重新下載。

二、 安裝前置依賴與清理舊版本

1. 移除系統自帶或舊版 MySQL

# 查詢已安裝包
rpm -qa | grep mysql
# 強制卸載 (xxx 為包名)
rpm -e --nodeps xxx
# 刪除殘留配置
rm -f /etc/my.cnf

2. 安裝編譯工具鏈與依賴庫

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

三、 源碼編譯安裝核心步驟

# 1. 解壓並進入目錄
tar xvf mysql-5.6.25.tar.gz
cd mysql-5.6.25

# 2. CMake 配置 (關鍵參數解釋見下)
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci

# 3. 編譯安裝 (視服務器性能耗時 10-30 分鐘)
make && make install

關鍵 CMake 參數說明

參數作用
CMAKE_INSTALL_PREFIX安裝根目錄
MYSQL_DATADIR數據文件存放目錄
DEFAULT_CHARSET默認字符集 (強烈建議 utf8)
WITH_INNOBASE_STORAGE_ENGINE啟用 InnoDB 引擎
SYSCONFDIR配置文件 my.cnf 搜索目錄

四、 實例配置與啟動

1. 創建專用用戶與權限

# 檢查用戶/組是否存在
cat /etc/passwd | grep mysql
cat /etc/group | grep mysql

# 創建無登錄權限的 mysql 用戶組與用戶
groupadd mysql
useradd -g mysql -s /sbin/nologin mysql

# 授權安裝目錄
chown -R mysql:mysql /usr/local/mysql

2. 單實例部署 (適合簡單場景)

  1. 初始化系統表:
    cd /usr/local/mysql
    scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
  2. 處理配置文件衝突:CentOS 7 /etc 下默認有 my.cnf,必須重命名 (如 my.cnf.bak),否則會干擾源碼安裝實例的配置加載。
  3. 啟動腳本與防火牆:
    cp support-files/mysql.server /etc/init.d/mysql
    chkconfig mysql on
    service mysql start
    
    # 開放 3306 端口
    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    firewall-cmd --reload
  4. 驗證啟動:netstat -lntp | grep 3306

3. 多實例部署 (推薦生產/主從架構)

多實例即一套二進制、多套配置/數據/端口,邏輯隔離、資源共享。以下以雙實例 (3306、3307) 為例:

目錄結構規劃
mkdir -p /data/{3306,3307}/{data,log}
實例配置文件 (/data/3306/my.cnf)
[client]
port = 3306
socket = /data/3306/mysql.sock

[mysqld]
port = 3306
socket = /data/3306/mysql.sock
pid-file = /data/3306/data/mysql.pid
basedir = /usr/local/mysql
datadir = /data/3306/data
server-id = 1
# log-bin=mysql-bin
log_error = /data/3306/log/mysql-error.log
slow_query_log_file = /data/3306/log/mysql-slow.log
slow_query_log = 1

/data/3307/my.cnf 同理修改端口為 3307、server-id=3、路徑指向 3307 目錄。

管理腳本 (/data/3306/mysql)
#!/bin/bash
port=3306
mysql_user="root"
mysql_pwd=""
CmdPath="/usr/local/mysql/bin"

function_start_mysql() {
    printf "Starting MySQL...\n"
    /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
}
function_stop_mysql() {
    printf "Stoping MySQL...\n"
    ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown
}
function_restart_mysql() {
    printf "Restarting MySQL...\n"
    function_stop_mysql
    sleep 2
    function_start_mysql
}

case $1 in
    start) function_start_mysql ;;
    stop) function_stop_mysql ;;
    restart) function_restart_mysql ;;
    *) printf "Usage: /data/${port}/mysql {start|stop|restart}\n" ;;
esac

3307 實例腳本修改 port=3307 即可。隨後授權:

chown -R mysql:mysql /data
find /data -name mysql -exec chmod 700 {} \;
初始化數據目錄
cd /usr/local/mysql/scripts
./mysql_install_db --defaults-file=/data/3306/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data
./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data
防火牆與啟動
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=3307/tcp --permanent
firewall-cmd --reload

/data/3306/mysql start
/data/3307/mysql start
netstat -lntp | grep 330
安全設置密碼
# 登錄無密碼實例
mysql -S /data/3306/mysql.sock

# 修改 root 密碼 (建議在客戶端內執行,避免歷史記錄洩露)
UPDATE mysql.user SET password=PASSWORD('YourStrongPass') WHERE user='root';
FLUSH PRIVILEGES;

# 將密碼寫入管理腳本 (避免每次輸入)
sed -i 's/mysql_pwd=""/mysql_pwd="YourStrongPass"/g' /data/3306/mysql
sed -i 's/mysql_pwd=""/mysql_pwd="YourStrongPass"/g' /data/3307/mysql

五、 常見問題排查

  • 啟動失敗:查看 /data/3306/log/mysql-error.log 或 /usr/local/mysql/data/主機名.err。
  • my.cnf **被覆蓋**:執行 yum update 後檢查 /etc/my.cnf 是否重現,若出現立即重命名。
  • 端口衝突:確保 3306/3307 未被佔用 (netstat -lntp)。

六、 總結與擴展

源碼安裝雖步驟較多,但能精確控制編譯選項、路徑佈局與多實例架構,是掌握 MySQL 部署細節的最佳實踐。生產環境建議結合 GTID 主從複製、備份策略 (xtrabackup) 及 監控告警 構建高可用集群。

項目地址:一鍵安裝腳本 (持續完善中)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved