奇怪的“/ var / lib / mysql太满了”的消息,几乎是空的分区

我刚刚在服务器上遇到一个奇怪的问题:这是我刚安装的一个基本的LAMP服务器,当我尝试重新启动MySQL时,出现以下错误。

/etc/init.d/mysql: ERROR: The partition with /var/lib/mysql is too full! 

非常奇怪的是我没有为/ var /设置一个特殊的分区,我用df和mount来看看这个,但是我的分区几乎都是空的!

 >> df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 254G 8.8G 232G 4% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 3.9G 4.0K 3.9G 1% /dev tmpfs 798M 452K 797M 1% /run none 5.0M 0 5.0M 0% /run/lock none 3.9G 0 3.9G 0% /run/shm none 100M 0 100M 0% /run/user /dev/sda1 180M 35M 133M 21% /boot /dev/sda3 656G 70M 623G 1% /home 

所以我谷歌周围,看着那里的老问题,但我找不到任何东西,除了在MySQL中的一个“错误报告”,这是没有证实(和他的解决方法不适用于我)。

所以我在那里亏本

现在,我的服务器开始做一些奇怪的事情:当我用一个非常大的文件(〜1Go)做了一个LOAD DATA INFILE时,它加载了一个小时,然后它只是清空了我正在加载它的表…就像如果因为空间不足而拒绝了数据。

注意:我也做了一个df -i,他们都在1%…注意:当试图用“sudo”来做到这一点,作为根,我得到以下

 sudo /etc/init.d/mysql restart * Stopping MySQL database server mysqld [ OK ] * Starting MySQL database server mysqld [fail] 

这更糟糕,因为我不知道为什么…但我想这是“太满”的问题了。

[编辑:]我的文件系统:

 >> df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/sda2 ext4 254G 8.9G 232G 4% / none tmpfs 4.0K 0 4.0K 0% /sys/fs/cgroup udev devtmpfs 3.9G 4.0K 3.9G 1% /dev tmpfs tmpfs 798M 460K 797M 1% /run none tmpfs 5.0M 0 5.0M 0% /run/lock none tmpfs 3.9G 0 3.9G 0% /run/shm none tmpfs 100M 0 100M 0% /run/user /dev/sda1 ext4 180M 35M 133M 21% /boot /dev/sda3 ext4 656G 70M 623G 1% /home 

这里是“ps aux | grep mysql”的结果:

 mysql 851 0.2 2.1 619960 177832 ? Sl Apr14 2:53 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 mysql 20977 0.1 0.4 380728 34228 ? Ssl 11:28 0:00 /usr/sbin/mysqld ruuser 21111 0.0 0.0 11696 936 pts/1 S+ 11:29 0:00 grep --color=auto mysql root 32425 0.0 0.0 4440 748 ? S Apr14 0:00 /bin/sh /usr/bin/mysqld_safe 

你有没有检查MySQL是否已经启动? 出于某种原因,有时会说分区太满了,只是因为一个mysql deamon已经启动了。

你可以用“ps aux | grep mysql”来检查。 如果你看到一些mysql进程正在运行,试着用“service mysql stop”来停止它们。 如果还有mysql进程,用“kill $ PID”replace它们各自的PID来取代$ PID。

尝试用“服务mysql启动”再次启动mysql。

消息的原因是(我怀疑)一个​​MySQL实例打开一个临时文件,并删除它,同时保留一个句柄。 这样,当进程死亡时,文件将被自动删除,因为引用计数将会达到0。

您可以使用lsof(作为root用户,或作为mysql服务用户)来validation。 如果出现这种情况,您会在输出中看到(deleted)提及。 它创build的临时文件将是一个有用的方式来预先预定一些空间(它可能会产生一个相当大的稀疏文件),这将解释原因。 “空间不足”types消息的另一个可能原因可能是缺lessinode( df -hi会显示它),但是通常只有在处理大量小文件(如代理caching)时才会遇到。

正如其他人所指出的,这可能是另一个MySQL进程运行的症状。 在这种情况下,使用脚本停止服务; 确认没有服务正在运行; 如果有的话,杀死任何剩余的; 并开始使用脚本; validation一下。