mysql_secure_installation必须运行,否则mariadb将裸奔暴露root账号、匿名用户和test库;需依次设置密码、删除匿名用户和test库、禁用远程root登录并重载权限表,全部选y;socket路径不一致或bind-address未配合防火墙开放会导致连接失败;libaio.so.1缺失会致服务启动失败,需手动安装对应依赖;所有配置更改后必须执行systemctl restart mariadb才生效。

mysql_secure_installation 必须运行,不能跳过
这步不是“设个密码就完事”,它直接决定 MariaDB 是否裸奔。漏掉等于把 root 账号、匿名用户、test 库全暴露在外,连本地连接都可能被恶意利用。
常见错误现象:ERROR 1045 (28000): Access denied for user 'root'@'localhost',往往不是密码错,而是 mysql_secure_installation 没跑完,root 还没初始化成功。
- 运行前确认服务已启动:
systemctl start mariadb - 执行时会依次问你:设 root 密码、删匿名用户、删 test 库、禁远程 root 登录、重载权限表——全部选
y(除非你明确需要某项) - 如果中途中断或报错,别硬重启服务,先
systemctl stop mariadb,再清空/var/lib/mysql下的残留文件(备份好数据),重新初始化
socket 路径不一致是连接失败的头号原因
客户端默认连 /tmp/mysql.sock 或 /var/run/mysqld/mysqld.sock,但服务端实际监听的可能是 /var/lib/mysql/mysql.sock。不匹配就报 Can't connect to local MySQL server through socket。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
查服务端路径:sudo grep "socket" /etc/my.cnf /etc/mysql/my.cnf 2>/dev/null
查客户端默认路径:mariadb --help | grep "Default options"
- 临时解决:建软链,比如服务端在
/var/lib/mysql/mysql.sock,就执行sudo ln -sf /var/lib/mysql/mysql.sock /tmp/mysql.sock - 长期解决:统一改到
/var/run/mysqld/mysqld.sock,并在配置文件的[client]和[mysqld]段都写明socket = /var/run/mysqld/mysqld.sock - 改完必须重启服务:
systemctl restart mariadb,否则配置不生效
bind-address 设成 0.0.0.0 前先关防火墙或开端口
想让外部机器连进来?光改 bind-address = 0.0.0.0 不够,ufw 或 firewalld 默认拦 3306 端口,连本机 telnet 都通不过。
- Debian/Ubuntu:
sudo ufw allow 3306 - RHEL/CentOS/Rocky:
sudo firewall-cmd --permanent --add-port=3306/tcp && sudo firewall-cmd --reload - 改完配置后必须重启服务:
systemctl restart mariadb,否则 bind 不生效 - 别忘了给远程用户授权:
CREATE USER 'user'@'%' IDENTIFIED BY 'pass'; GRANT ALL ON *.* TO 'user'@'%'; FLUSH PRIVILEGES;,否则连上也进不去库
libaio.so.1 缺失会导致服务起不来
手动部署或某些最小化系统装完 mariadb-server 后,systemctl start mariadb 直接失败,日志里出现 libaio.so.1: cannot open shared object file。
- RHEL/CentOS/AlmaLinux:
yum install -y libaio - Debian/Ubuntu:
apt install -y libaio1 - 装完不用重启系统,直接
systemctl start mariadb就能起来 - 这个依赖不显式报在安装阶段,只在服务启动时才暴露,容易卡在“装完了却起不来”的死循环里
配置真正生效的临界点,往往不在改完配置文件那一刻,而是在 systemctl restart mariadb 之后——服务没重启,所有改动都是纸上谈兵。尤其 socket 和 bind-address 这类底层参数,改了不重启等于没改。










