mysql安装过程中磁盘空间不足的解决方案

来源:这里教程网 时间:2026-02-28 20:38:59 作者:

MySQL 安装时提示
No space left on device
怎么办

不是磁盘真的没空间,而是 MySQL 默认安装路径(如

/var/lib/mysql
)所在分区已满,或
tmpdir
临时目录空间不足。安装器在解压、初始化数据库、生成系统表时需要数 GB 临时空间,尤其启用
innodb_file_per_table=ON
或大页(
innodb_page_size=64k
)时更吃空间。

如何快速定位瓶颈分区

执行以下命令确认哪块挂载点快满了,重点关注

/var
/tmp
/usr

df -h | grep -E '(var|tmp|usr)'

同时检查 MySQL 安装过程中实际使用的临时路径:

Debian/Ubuntu 的
apt
安装会用
/tmp
解压 deb 包,再复制到目标路径
RPM 安装(CentOS/RHEL)默认使用
/var/tmp
,可通过
rpm --showrc | grep tmp
确认
源码编译安装则取决于
cmake -DCMAKE_INSTALL_PREFIX=...
-DINSTALL_SYSCONFDIR=...
指定的路径所在分区

绕过磁盘空间限制的实操方法

不重装系统、不扩容磁盘也能继续安装,关键是把临时操作和数据目录挪到有空间的地方:

安装前设置环境变量:
export TMPDIR=/path/to/large/partition/tmp
(确保该目录存在且权限为
mysql:mysql
APT 安装时指定临时目录:
sudo apt -o Dpkg::Options::="--force-confold" -o DPkg::Install::TempDir=/path/to/big/tmp install mysql-server
RPM 安装前创建符号链接:
sudo ln -sf /path/to/big/tmp /var/tmp
(注意:需在
rpm
执行前完成,且重启后可能失效)
安装完成后立即修改配置:编辑
/etc/mysql/my.cnf
/etc/my.cnf
,在
[mysqld]
下添加:
datadir = /path/to/big/partition/mysql_data

tmpdir = /path/to/big/partition/mysql_tmp

然后迁移数据并更新
systemd
启动项中的
ProtectHome
ProtectSystem
设置(否则服务可能因沙箱限制拒绝启动)

迁移 datadir 后必须做的三件事

很多人改完

datadir
就直接
systemctl start mysqld
,结果报错
Can't open and lock privilege tables
Table 'mysql.plugin' doesn't exist
——这是因为权限、SELinux 上下文或 socket 路径没同步更新:

递归修正权限:
sudo chown -R mysql:mysql /path/to/big/partition/mysql_data
SELinux 用户(RHEL/CentOS)必须恢复上下文:
sudo semanage fcontext -a -t mysqld_db_t "/path/to/big/partition/mysql_data(/.*)?"
,再运行
sudo restorecon -Rv /path/to/big/partition/mysql_data
检查
socket
路径是否仍指向旧位置(如
/var/run/mysqld/mysqld.sock
),若新
datadir
下无
run
目录,需在配置中显式指定:
socket = /path/to/big/partition/mysql_data/mysql.sock
,并确保
mysql
用户对该路径有写权限

最易被忽略的是 systemd 对

/tmp
/var/tmp
的自动清理策略:如果把
tmpdir
设在
/tmp
下,
systemd-tmpfiles
可能在下次重启时清空它,导致 MySQL 启动失败。建议始终使用独立、持久的路径,比如
/opt/mysql/tmp
/data/mysql/tmp

相关推荐