嵌入式 Linux 通常面臨:CPU 資源受限(ARM/MIPS)、記憶體 64MB-512MB、儲存空間緊張、無 MMU 或 uClibc/musl libc。MySQL 須大幅裁剪以適應邊緣網關、工控機、車載終端等場景。
arm-linux-gnueabihf-gcc、aarch64-linux-gnu-gcc 等。zlib、openssl、libaio、ncurses、protobuf、rapidjson(8.0+)。export CC=arm-linux-gnueabihf-gcc
export CXX=arm-linux-gnueabihf-g++
export STRIP=arm-linux-gnueabihf-strip
export CFLAGS="-Os -pipe -fomit-frame-pointer"
export CXXFLAGS="-Os -pipe -fomit-frame-pointer"
在源碼目錄建立 build_embedded,執行 cmake .. -DCMAKE_TOOLCHAIN_FILE=arm.cmake -D... ,核心裁剪參數:
| 選項 | 建議值 | 說明 |
|---|---|---|
| CMAKE_BUILD_TYPE | MinSizeRel | 優化體積而非速度 |
| WITH_SERVER | ON | 嵌入式通常需 server;純客戶端可 OFF |
| WITH_EMBEDDED_SERVER | ON | 生成 libmysqld,應用鏈接嵌入式庫,無獨立進程 |
| WITHOUT_SERVER | OFF | 保留 server |
| DISABLE_SHARED | ON | 靜態鏈接,減少依賴部署 |
| WITH_SSL | system | 使用交叉編譯的 OpenSSL |
| WITH_ZLIB | system | 使用交叉編譯的 zlib |
| DEFAULT_CHARSET | utf8mb4 | 僅保留必要字元集 |
| DEFAULT_COLLATION | utf8mb4_general_ci | 簡單排序規則,節省體積 |
| WITH_EXTRA_CHARSETS | none | 禁用所有額外字元集 |
| WITH_UNIT_TESTS | OFF | 移除測試代碼 |
| WITH_DEBUG | OFF | 釋出版 |
| WITH_INNODB_MEMCACHED | OFF | 禁用 Memcached 介面 |
| WITHOUT_EXAMPLE_STORAGE_ENGINE | ON | 移除示例引擎 |
| WITHOUT_FEDERATED_STORAGE_ENGINE | ON | 移除 Federated |
| WITHOUT_PARTITION_STORAGE_ENGINE | ON | 不需要分區表可移除 |
| WITH_ARCHIVE_STORAGE_ENGINE | OFF | 唯讀場景可關 |
| WITH_BLACKHOLE_STORAGE_ENGINE | OFF | 移除 Blackhole |
| WITH_CSV_STORAGE_ENGINE | OFF | 不需要 CSV 引擎 |
| WITH_MYISAM_STORAGE_ENGINE | OFF | 僅保留 InnoDB |
innodb_file_per_table=OFF、innodb_log_file_size 小值、innodb_buffer_pool_size 極小(8-16MB)壓縮記憶體佔用。[mysqld]
# 極簡配置範例(64MB RAM 設備)
loose_innodb_buffer_pool_size = 8M
loose_innodb_log_file_size = 4M
loose_innodb_log_buffer_size = 256K
loose_innodb_flush_log_at_trx_commit = 2
loose_innodb_file_per_table = 0
loose_max_connections = 20
loose_thread_stack = 192K
loose_sort_buffer_size = 64K
loose_read_buffer_size = 16K
loose_read_rnd_buffer_size = 16K
loose_join_buffer_size = 16K
loose_tmp_table_size = 64K
loose_max_heap_table_size = 64K
skip-networking # 僅本地 Unix Socket
skip-name-resolve
skip-host-cache
disable_log_bin
loose_innodb_flush_method = O_DIRECT
performance_schema = OFF
information_schema_stats_expiry = 0
make install DESTDIR=/tmp/mysql_embedded 收集安裝檔案。arm-linux-gnueabihf-strip 二進制檔(mysqld、libmysqlclient.so)。bin/mysqld、lib/libmysqlclient.*、share/mysql/english/errmsg.sys、support-files/mysql.server。mysqld --initialize-insecure --datadir=/data/mysql --basedir=/usr/local/mysql。mysqld --defaults-file=/etc/my.cnf &,mysql -u root -e "SHOW ENGINES; SHOW VARIABLES LIKE 'version';"。通過激進裁剪編譯選項、精簡存儲引擎、極限運行參數,MySQL 可在 32MB+ RAM 的嵌入式 Linux 上穩定運行,為邊緣計算提供關係型資料能力。