必须配置≥10gb swap文件:树莓派3b/3b+物理内存小,编译mysql 8.0时cmake和make易触发oom killer,需用dd创建10g swapfile,chmod 600、mkswap、swapon并写入fstab持久化。

编译 MySQL 8.0 需要先开 swap,否则直接 OOM
树莓派(尤其是 3B/3B+)物理内存小,cmake 配置和 make 编译 MySQL 8.0 的过程极易触发 OOM killer,导致编译中途被杀。这不是磁盘空间问题,是内存不足的硬限制。
必须提前配置 swap 文件(即使你已启用过,也建议检查大小是否 ≥ 4G):
-
swapon --show确认当前 swap 是否启用、大小是否足够(推荐至少10240MB,即 10G) - 若未启用或太小:用
dd if=/dev/zero of=/var/swapfile bs=1M count=10240创建,再依次执行chmod 600 /var/swapfile、mkswap /var/swapfile、swapon /var/swapfile - 写入
/etc/fstab持久化:/var/swapfile none swap sw 0 0
docker 内编译 MySQL 8.0 要选对基础镜像和架构
在树莓派上用 Docker 编译 MySQL,不能直接拉 debian:bookworm 或 ubuntu:22.04 官方镜像——它们默认是 amd64 架构,运行会报 exec format error。
必须显式使用 ARM 兼容镜像:
- 优先选
debian:bullseye-slim或debian:bookworm-slim(二者均提供arm64/v8多平台 manifest) - 构建时加
--platform linux/arm64显式声明(Docker 20.10+ 支持) - 确认宿主机内核支持:
uname -m应输出aarch64;若为armv7l(如树莓派 3B),则需用arm32v7/debian:bullseye镜像
常见错误:standard_init_linux.go:228: exec user process caused: exec format error —— 就是镜像架构不匹配。
cmake 参数必须绕过部分 x86-only 特性
MySQL 8.0 默认启用一些仅 x86 支持的优化(如 WITH_ROCKSDB、WITH_LIBWRAP、某些 SIMD 指令检测),在 ARM 上 cmake 会失败或后续 make 报错。
关键参数组合(实测通过树莓派 4B/4GB):
-
-DWITH_SSL=system(避免自带 OpenSSL 编译失败) -
-DWITH_ZLIB=system(同理,用系统 zlib) -
-DDEFAULT_CHARSET=utf8mb4和-DDEFAULT_COLLATION=utf8mb4_0900_ai_ci(避免字符集相关 warning 升级为 error) -
-DENABLED_LOCAL_INFILE=ON(否则LOAD DATA INFILE不可用) - 务必禁用:
-DWITH_ROCKSDB=OFF -DWITH_LIBWRAP=OFF -DWITH_EDITLINE=system
完整 cmake 命令示例(在容器内执行):
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_0900_ai_ci \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_ROCKSDB=OFF \
-DWITH_LIBWRAP=OFF \
-DWITH_EDITLINE=system \
..
启动时遇到 caching_sha2_password 插件拒绝启动?
MySQL 8.0.4+ 默认认证插件是 caching_sha2_password,但旧数据目录(比如从 5.7 升级而来)或某些 ARM 编译环境里,该插件可能未正确加载,导致 mysqld 启动失败并报错:Plugin 'caching_sha2_password' is not loaded。
临时解决(仅用于首次初始化):
- 启动 mysqld 时加参数:
--default-authentication-plugin=mysql_native_password - 或在
my.cnf的[mysqld]段落中添加:default_authentication_plugin=mysql_native_password - 初始化完成后,可手动切换用户认证方式:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpass';
注意:这不是长期方案,生产环境应确保 caching_sha2_password 插件路径正确(通常位于 plugin_dir 下),且 mysqld 有读取权限。











