MySQL安装报“No space left on device”时,应优先执行df -h | grep -E '(var|tmp|usr|home)'定位瓶颈分区,再通过export TMPDIR或rpm --root等方法将临时目录或datadir提前指向大空间路径,避免安装中断。

直接改 TMPDIR 或换 datadir 路径,别等安装完再折腾——MySQL 8.0 安装过程本身就要在临时目录解压、初始化、生成系统表,卡在“No space left on device”时,90% 是 /tmp 或 /var/lib/mysql 所在分区撑爆了,不是磁盘真没空间,而是默认路径选错了。
怎么快速定位到底是哪个分区扛不住了
别猜,执行这行命令看真实瓶颈:
df -h | grep -E '(var|tmp|usr|home)'
重点关注三处:
-
/tmp:APT/RPM 安装时默认用它解包,CentOS 的/tmp常是 tmpfs(内存盘),默认才 1–2GB -
/var/lib/mysql:哪怕还没装完,初始化脚本也会往这里写ibdata1、mysql.ibd等,5.7+ 还会立即建ibtmp1 -
/usr:源码编译安装时,cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql若指向/usr分区,而该分区已满,也会中断
顺手查下 MySQL 实际打算用哪:
sudo mysql --verbose --help | grep "Default options" -A 1 | grep "my.cnf"
看到的配置文件路径,才是它读取 tmpdir 和 datadir 的依据。
安装中途卡住,不重装怎么续上
核心就一条:把临时操作和目标数据目录挪到有空间的地方。方法按安装方式分:
- APT(Ubuntu/Debian):
执行前设环境变量:export TMPDIR=/path/to/big/partition/tmp,确保该目录存在且chmod 1777 - RPM(CentOS/RHEL):
不改系统/var/tmp,直接加参数:sudo rpm -ivh --root /path/to/big/partition mysql-community-server-8.0.x-1.el8.x86_64.rpm - 宝塔面板:
进面板 → 软件商店 → MySQL 8.0 → 右侧“设置” → 修改“数据库目录”为挂载了大硬盘的路径(如/data/mysql),再点安装
注意:apt 安装若已中断,先 sudo apt clean 清缓存,否则它可能复用坏掉的临时包。
装完启动失败,常见报错和对应动作
装完一启动就崩,典型现象和处理:
-
Can't open and lock privilege tables:
说明datadir改了但权限没同步——执行sudo chown -R mysql:mysql /path/to/new/datadir -
Table 'mysql.plugin' doesn't exist:
大概率是ibtmp1占满新分区又没收缩,删掉它:sudo rm /path/to/new/datadir/ibtmp1,然后重启服务(MySQL 会自动重建) - SELinux 拒绝访问(RHEL/CentOS):
执行sudo semanage fcontext -a -t mysqld_db_t "/path/to/new/datadir(/.*)?",再sudo restorecon -Rv /path/to/new/datadir - socket 连不上:
检查my.cnf里socket路径是否还指向旧位置(如/var/run/mysqld/mysqld.sock),改成新datadir下的路径或统一挪到/tmp/mysql.sock
真正容易被忽略的是:改完 datadir 后,systemd 的 ProtectHome=true 或 ProtectSystem=full 会拦截对新路径的写入,得手动编辑 /usr/lib/systemd/system/mysqld.service,删掉或注释这两行,再 sudo systemctl daemon-reload。


















