我刚刚在我的服务器上遇到一个奇怪的问题:这是一个我刚刚设置的基本 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
因此我在 Google 上搜索并查看了那里的旧问题,但除了 MySQL 中未经确认的“错误报告”(并且其解决方法对我来说不起作用)之外,我什么也没找到。
所以我很茫然。
现在我的服务器开始出现奇怪的事情:当我对一个相当大的文件(~1Go)执行 LOAD DATA INFILE 时,它加载了一个小时,然后清空了我正在加载它的表...就像它因为空间不足而拒绝数据一样。
注意:我还执行了 df -i,它们都在 1%...注意:当我尝试以 root 身份使用“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
答案1
您是否检查过 MySQL 是否尚未启动?出于某种原因,它有时会说分区太满,只是因为 mysql 守护进程已启动。
您可以使用“ps aux | grep mysql”进行检查。如果您看到一些 mysql 进程正在运行,请尝试使用“service mysql stop”停止它们。如果仍有 mysql 进程,请使用“kill $PID”终止它们,将 $PID 替换为其各自的 PID。
尝试使用“service mysql start”再次启动 mysql。
答案2
出现该消息的原因是(我怀疑)mysql实例打开了一个临时文件,并在保留其句柄的同时将其删除。 这样,当进程终止时,该文件将自动被删除,因为引用计数将达到0。
您可以使用 lsof(以 root 或 mysql 服务用户身份)验证这一点。(deleted)
如果是这种情况,您将在输出中看到提及。它创建的临时文件将是 mysql 预订一些空间的有效方法(它可能会生成一个相当大的稀疏文件),这可以解释原因。“空间不足”类型消息的另一个可能原因可能是缺少 inode(df -hi
将显示它)——但这通常仅在处理大量小文件(例如代理缓存)时才会遇到。
正如其他人所指出的,这可能是另一个 MySQL 进程正在运行的症状。在这种情况下,使用脚本停止服务;验证没有服务正在运行;如果有,请终止任何剩余的服务;然后开始使用脚本;验证它是否启动。