应使用 MariaDB 替代 MySQL 8.0:Raspberry Pi OS 默认以 mariadb-server-10.11 提供 mysql-server 虚拟包,完全兼容协议、命令与驱动;编译 MySQL 8.0 易因内存不足、依赖缺失、链接错误失败,耗时超两小时且不稳定。

mysql-8.0 在树莓派上本地编译运行,不是不能做,而是不推荐——尤其对 Raspberry Pi OS(Debian 11+)用户。你大概率会卡在内存不足、CMake 配置失败、ARM 架构依赖缺失、或启动时报 mysqld: error while loading shared libraries 这类链接错误。
真正该做的,是用系统原生支持的 MariaDB 替代方案,它完全兼容 MySQL 协议和客户端命令。
apt install mysql-server 实际装的是什么?
-
执行
sudo apt install mysql-server后,APT 会提示:Package mysql-server is a virtual package. You should install one of the following packages: mariadb-server-10.11 -
安装完成后运行
mysql --version,输出类似:mysql Ver 15.1 Distrib 10.11.8-MariaDB, for debian-linux-gnueabihf (armv7l) 这不是“被替换了”,而是 Debian 和 Raspberry Pi OS 的官方策略:MariaDB 是默认 drop-in 替代品,
mysql命令、mysqld服务名、SQL 语法、JDBC/Python 驱动全部无缝兼容。硬要编译
mysql-8.0.25(如知识库中树莓派3B+ Docker 内编译案例),需手动配 swap、装cmake-3.20+、ncurses、openssl、zlib等十余个依赖,且编译耗时超 2 小时(Pi 4B 也常因内存溢出中断)。
bind-address = 127.0.0.1 导致远程连不上怎么办?
MariaDB 默认只监听本地回环,这是安全设计,但新手最常因此以为“装失败了”。
正确配置路径是:
/etc/mysql/mariadb.conf.d/50-server.cnf(不是/etc/mysql/my.cnf,后者在新版中可能为空或仅作包含入口)-
修改前先确认文件存在:
ls -l /etc/mysql/mariadb.conf.d/50-server.cnf -
编辑该文件,找到这行:
bind-address = 127.0.0.1 -
改为:
bind-address = 0.0.0.0或直接注释掉(加
#) -
必须重启服务:
sudo systemctl restart mariadb -
验证是否生效:
sudo ss -tlnp | grep :3306输出中应含
*:3306或0.0.0.0:3306 仅
reload不生效,改错文件路径(比如误改50-client.cnf)也会白忙。
mysql_secure_installation 比手动设密码更可靠
不要用
sudo mysqladmin -u root password xxx——该命令在 MariaDB 10.4+ 已废弃,且无法处理unix_socket认证插件导致的 root 登录失败问题。-
正确做法是运行:
sudo mysql_secure_installation -
它会引导你:
- 设置 root 密码(支持强密码策略)
- 删除匿名用户
- 禁用远程 root 登录(可选)
- 删除 test 数据库
- 重载权限表(
FLUSH PRIVILEGES自动完成)
-
如果执行时报
Access denied for user 'root'@'localhost',说明 root 当前用的是unix_socket插件认证(无密码登录),此时先用sudo mysql进去,再执行:ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password;SET PASSWORD = PASSWORD('your_new_password');然后再运行
mysql_secure_installation。
树莓派上跑数据库,核心矛盾从来不是“能不能用 MySQL”,而是“要不要为一个协议兼容层付出 3 小时编译 + 5 类报错 + swap 配置 + 依赖降级的代价”。MariaDB 就是答案,不是妥协。真有 MySQL 8.0 特性强依赖(如JSON_TABLE、CHECK CONSTRAINT),建议换 x86 服务器部署,别在 ARM 小板子上硬扛。


















