MySQL 官方二進制包為通用編譯,無法充分發揮特定硬體效能。生產環境強烈建議原始碼編譯安裝,核心優化點有二:
--without-debug 參數移除。--with-mysqld-ldflags=-all-static 與 --with-client-ldflags=-all-static,消除動態鏈接開銷,實測效能提升 5%-10%。./configure \
--prefix=/usr/local/mysql \
--without-debug \
--without-bench \
--enable-thread-safe-client \
--enable-assembler \
--enable-profiling \
--enable-community-features \
--with-mysqld-ldflags=-all-static \
--with-client-ldflags=-all-static \
--with-charset=utf8 \
--with-extra-charset=all \
--with-innodb \
--with-csv-storage-engine \
--with-federated-storage-engine \
--with-mysqld-user=mysql \
--without-embedded-server \
--with-server-suffix=-community \
--with-unix-socket-path=/usr/local/mysql/sock/mysql.sock
| 參數 | 作用 | 建議 |
|---|---|---|
--without-debug | 禁用調試模式,減小二進制體積、提升執行速度 | 生產必加 |
-all-static | 靜態鏈接 libstdc++、libgcc 等,避免運行時動態加載開銷 | 高效能場景必加 |
--enable-assembler | 啟用匯編優化路徑(特定 CPU 指令集) | x86_64 環境建議開啟 |
--with-charset=utf8 | 設定預設字符集 | 新專案建議 utf8mb4 |
--with-innodb | 編譯 InnoDB 引擎 | 事務業務必選 |
--without-embedded-server | 不編譯嵌入式伺服器庫 | 減小安裝體積 |
MySQL 5.7+ 改用 CMake 建構,對應參數如下:
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DWITH_DEBUG=OFF \
-DCMAKE_C_FLAGS="-O3" \
-DCMAKE_CXX_FLAGS="-O3" \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_INNODB=ON \
-DWITH_MYISAM=ON \
-DWITH_MEMORY=ON \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_SSL=system \
-DWITH_ZLIB=system
yum install -y gcc gcc-c++ cmake ncurses-devel openssl-devel bisonuseradd -r -s /sbin/nologin mysqlmake -j$(nproc) && make installmysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqlmy.cnf、建立 systemd 服務、啟動驗證提醒: 靜態編譯會增加二進制檔案體積(約 2-3 倍),但在 CPU 密集型 OLTP 負載下效能收益顯著。若環境頻繁升級 OpenSSL 等庫,動態鏈接更利於安全修補,需權衡取捨。