Назад | Перейти на главную страницу

Странно «/ var / lib / mysql too full!» сообщение, с почти пустыми разделами

Я только что столкнулся со странной проблемой на моем сервере: это базовый сервер 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, который не был подтвержден (и обходной путь которого не сработал для меня).

Так что я в растерянности.

И теперь мой сервер начал делать странные вещи: когда я выполнял ЗАГРУЗИТЬ ДАННЫЕ INFILE с довольно большим файлом (~ 1Go), он загружался в течение хорошего часа, а затем просто очищал таблицу, в которую я загружал его ... это было бы, если бы он отклонил данные из-за нехватки места.

N.B: Я также сделал df -i, и все они равны 1% ... N.B: При попытке сделать это с помощью "sudo", как root, я получаю следующее

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

Что еще хуже, потому что я не знаю почему ... Но я думаю, это снова проблема "слишком полной".

[EDIT:] Мои файловые системы:

>> 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», заменив $ PID на их соответствующий PID.

Попробуйте снова запустить mysql с "запуском службы mysql".

Причина сообщения в том, что (я подозреваю) экземпляр mysql открывает временный файл и удаляет его, сохраняя дескриптор к нему. Таким образом, файл будет автоматически удален, когда процесс завершится, поскольку счетчик ссылок достигнет 0.

Вы можете проверить это с помощью lsof (от имени пользователя root или пользователя службы mysql). Вы увидите упоминания о (deleted) в выводе, если это так. Временный файл, который он создает, будет полезным способом для mysql предварительно зарезервировать некоторое пространство (вероятно, он сделает разреженный файл достаточно большого размера), что объяснит причину. Другой возможной причиной сообщений типа «недостаточно места» может быть отсутствие inodes (df -hi покажет это), но обычно это встречается только при работе с большим количеством небольших файлов, таких как прокси-кеш.

Как указывали другие, это может быть симптомом выполнения другого процесса MySQL. В этом случае остановите службу с помощью сценария; убедитесь, что служба не запущена; убейте всех оставшихся, если они есть; и начинаем пользоваться скриптом; убедитесь, что его вверх.