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

MySQL 源碼編譯安裝全流程指南與常見坑點解決

     編輯:MySQL 綜合教學

MySQL 源碼編譯安裝全流程指南與常見坑點解決

源碼編譯安裝可深度定製 MySQL 功能、優化性能(靜態編譯、禁用 Debug),但依賴處理、參數選擇極易踩坑。本文匯總實戰經驗,覆蓋依賴解決、CMake 參數、登錄崩潰修復。

一、 系統依賴預裝(以 Ubuntu/Debian 為例)

apt-get update
apt-get install -y build-essential cmake libncurses5-dev libssl-dev bison pkg-config

關鍵點: libncurses5-dev 提供 curses.h,缺失會報 curses library not found。若 find / -name *curses* 找到庫在 /usr/lib/x86_64-linux-gnu/,需指定路徑:

cmake . -DCURSES_LIBRARY=/usr/lib/x86_64-linux-gnu/ -DCURSES_INCLUDE_PATH=/usr/include/

二、 核心 CMake 參數模板(生產環境優化版)

cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNODB_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_ZLIB=system \
-DWITH_SSL=system \
-DWITH_LIBEVENT=system \
-DCURSES_LIBRARY=/usr/lib/x86_64-linux-gnu/libncurses.so \
-DCURSES_INCLUDE_PATH=/usr/include/ncurses \
-DCMAKE_BUILD_TYPE=Release \
-DCOMPILATION_COMMENT="Custom Build" \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock

核心優化參數說明:

  • -DCMAKE_BUILD_TYPE=Release:釋出版本,禁用 Debug 符號,性能提升 5-10%。
  • -DWITH_SSL=system:使用系統 OpenSSL,避免捆綁舊版本漏洞。
  • -DDEFAULT_CHARSET=utf8mb4:默認支持 Emoji/生僻字。

三、 編譯安裝與初始化

make -j$(nproc)  # 多核並行編譯
make install

# 初始化數據目錄 (MySQL 5.7+)
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

# 生成 SSL 文件
/usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data

四、 經典坑點:客戶端登錄段錯誤 (Segmentation Fault)

現象: 執行 mysql -uroot -p 直接段錯誤退出。
原因: MySQL 5.6/5.7 捆綁的 libedit 與系統 ncurses 版本不兼容,導致 terminal.c 中緩衝區處理缺陷。
修復: 編輯源碼 cmd-line-utils/libedit/terminal.c:

// 找到第 869 行左右
// char buf[TC_BUFSIZE];  // 註釋掉
char *area = NULL;       // 修改為 NULL,原為 area = buf;

保存後重新 make && make install。

五、 系統服務註冊與啟動

cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start

六、 根用戶密碼設置與遠程授權

/usr/local/mysql/bin/mysqladmin -u root password 'NewPass123!'
/usr/local/mysql/bin/mysql -uroot -p -e "GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'NewPass123!' WITH GRANT OPTION; FLUSH PRIVILEGES;"

七、 避坑清單

  1. Boost 依賴: MySQL 5.7+ 需 Boost,CMake 參數 -DWITH_BOOST=/path/to/boost 或 -DDOWNLOAD_BOOST=1 自動下載。
  2. 目錄權限: chown -R mysql:mysql /usr/local/mysql /usr/local/mysql/data。
  3. 防火牆/SELinux: 放行 3306 端口,或設置 setsebool -P mysql_connect_any 1。
  4. 大頁內存: 物理機建議開啟 echo never > /sys/kernel/mm/transparent_hugepage/enabled。

源碼編譯雖繁瑣,但能構建最貼合業務、性能最優的 MySQL 實例。掌握依賴鏈、CMake 參數、已知 Bug 修復,是 DBA 進階的必修課。

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