源碼安裝可深度定制功能、優化指令集、去除無用模組,適合高性能場景、國產化適配、嵌入式部署。本文以 MySQL 5.7/8.0 為主,兼容 5.5 差異。
# 編譯工具鏈 yum install -y gcc gcc-c++ make cmake3 ncurses-devel bison openssl-devel libaio-devel # 5.7/8.0 額外依賴 yum install -y rpcgen # 8.0 需 # 創建專用用戶 groupadd -r mysql useradd -r -g mysql -s /sbin/nologin -M mysql
# 官網下載或鏡像 wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz # 5.7 含 Boost wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.36.tar.gz # 8.0 tar -xzf mysql-boost-5.7.44.tar.gz cd mysql-5.7.44
| 參數 | 說明 | 推薦值 |
|---|---|---|
-DCMAKE_INSTALL_PREFIX | 安裝根目錄 | /opt/mysql/5.7.44 |
-DMYSQL_DATADIR | 數據目錄 | /data/mysql |
-DWITH_BOOST | Boost 路徑(5.7 必須,8.0 內置) | /usr/local/boost 或源碼包內 boost 目錄 |
-DDEFAULT_CHARSET | 默認字符集 | utf8mb4 |
-DDEFAULT_COLLATION | 默認校對規則 | utf8mb4_general_ci |
-DWITH_INNOBASE_STORAGE_ENGINE | InnoDB(默認 ON) | 1 |
-DWITH_MYISAM_STORAGE_ENGINE | MyISAM | 1 |
-DWITH_ARCHIVE_STORAGE_ENGINE | Archive 引擎 | 1 |
-DWITH_BLACKHOLE_STORAGE_ENGINE | Blackhole 引擎 | 1 |
-DWITH_PARTITION_STORAGE_ENGINE | 分區支持 | 1 |
-DWITH_SSL | SSL 支持 | system(用系統 OpenSSL) |
-DWITH_ZLIB | 壓縮庫 | system |
-DENABLED_LOCAL_INFILE | LOAD DATA LOCAL | 1 |
-DWITH_DEBUG | 調試構建 | 0(生產必須關閉) |
-DCMAKE_C_FLAGS / CXX_FLAGS | 編譯優化 | -O3 -march=native(針對當前 CPU 優化) |
mkdir build && cd build cmake .. \ -DCMAKE_INSTALL_PREFIX=/opt/mysql/5.7.44 \ -DMYSQL_DATADIR=/data/mysql \ -DWITH_BOOST=../boost \ -DDEFAULT_CHARSET=utf8mb4 \ -DDEFAULT_COLLATION=utf8mb4_general_ci \ -DWITH_SSL=system \ -DWITH_ZLIB=system \ -DENABLED_LOCAL_INFILE=1 \ -DCMAKE_C_FLAGS="-O3 -march=native" \ -DCMAKE_CXX_FLAGS="-O3 -march=native" make -j$(nproc) # 並行編譯,根據 CPU 核心數 make install # 安裝到 prefix 目錄 # 權限修正 chown -R mysql:mysql /opt/mysql/5.7.44 /data/mysql
# 5.7 /opt/mysql/5.7.44/bin/mysqld --initialize --user=mysql --basedir=/opt/mysql/5.7.44 --datadir=/data/mysql # 8.0 /opt/mysql/8.0.36/bin/mysqld --initialize --user=mysql --basedir=/opt/mysql/8.0.36 --datadir=/data/mysql # 查看臨時密碼 grep 'temporary password' /data/mysql/error.log
/etc/my.cnf[mysqld] basedir = /opt/mysql/5.7.44 datadir = /data/mysql socket = /data/mysql/mysql.sock pid-file = /data/mysql/mysql.pid port = 3306 character-set-server = utf8mb4 collation-server = utf8mb4_general_ci default-storage-engine = InnoDB log-bin = /data/mysql/mysql-bin binlog-format = ROW server-id = 1 gtid-mode = ON enforce-gtid-consistency = ON innodb_buffer_pool_size = 4G innodb_log_file_size = 512M innodb_flush_log_at_trx_commit = 1 sync_binlog = 1 max_connections = 2000 skip-name-resolve [client] socket = /data/mysql/mysql.sock default-character-set = utf8mb4
cat > /etc/systemd/system/mysqld.service <<'EOF' [Unit] Description=MySQL Server After=network.target [Service] Type=forking User=mysql Group=mysql ExecStart=/opt/mysql/5.7.44/bin/mysqld_safe --defaults-file=/etc/my.cnf ExecStop=/opt/mysql/5.7.44/bin/mysqladmin shutdown TimeoutSec=600 Restart=on-failure LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable mysqld systemctl start mysqld
mysql_install_db 初始化-DWITH_INNOBASE_STORAGE_ENGINE 等同-DMYSQL_MAINTAINER_MODE=0:關閉維護者模式(更快)-DWITH_UNIT_TESTS=0:跳過單元測試編譯-DWITH_ASAN=0:關閉 AddressSanitizer-march=skylake -mtune=skylake(Intel)/ -march=zen3(AMD)-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITHOUT_FEDERATED_STORAGE_ENGINE=1源碼編譯賦予極致可控性,配合
-march=native釋放硬件紅利,是高性能、合規、嵌入式場景的最佳選擇。