Причина ошибки: неверное (старое?) Имя таблицы или базы данных «lost + found»

8

Мой журнал MySQL показывает дублированные ошибки:

141223  5:47:21 [ERROR] Invalid (old?) table or database name 'lost+found'

У меня есть база данных с именем, #mysql50#lost+foundно я не могу удалить ее.

mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| maindatabas         |
| maindatabas_help    |
| maindatabas_tracker |
| gitlabhq_production |
| locations           |
| #mysql50#lost+found |
| mysql               |
| osticket            |
| performance_schema  |
+---------------------+
10 rows in set (0.00 sec)

mysql> DROP DATABASE `#mysql50#lost+found`;
ERROR 1008 (HY000): Can't drop database '#mysql50#lost+found'; database doesn't exist
mysql>

Я работаю с версией сервера: 5.5.40 Распространено проектом сообщества IUS на Centos 6.

Per MySQL работает ОЧЕНЬ медленно на CentOS 6x (не 5x) , мой каталог данных находится на ext3 с параметром барьер = 0.

В чем причина этой ошибки и как ее можно устранить?

user1032531
источник

Ответы:

14

Мне кажется, что вы datadirнаходитесь в собственной файловой системе.

Файловые системы Ext, как и большинство FS в Unix, имеют в своей основе каталог с именем lost+found. Он существует для того, чтобы позволить файлам, которые стали отсоединенными (то есть имеют контент, но не связаны с записью каталога), чтобы они были присоединены где-нибудь еще при несовместимой файловой системе (см., Например, https://unix.stackexchange.com/). Вопросы / 18154 / что такое цель потерянных найденных папок в linux-and-unix для получения более подробной информации). Эта цель важна при аварийном восстановлении, поэтому не следует удалять каталог.

Ваша проблема возникает, когда точка монтирования, в которой монтируется файловая система, содержащая этот каталог, целиком передается приложению, которое ожидает, что все в этой точке монтирования принадлежит ему. MySQL, являясь одним из таких, пытается интерпретировать lost+foundкаталог как нечто, связанное с БД, и (не без оснований) терпит неудачу.

Лучше всего никогда не выделять целую ФС для приложения, а вместо этого монтировать ФС в какой-либо точке монтирования, не зависящей от приложения, например /data1, создать в ней подкаталог, например /data1/mysql, и перенастроить приложение для использования этого каталога в качестве своего. каталогу_данный.

Безумный Шляпник
источник
12

MadHatter хорошо объяснил ошибку. Но с тех пор времена изменились, и теперь MySQL ( начиная с 5.6.3 ) имеет возможность игнорировать этот каталог. Просто добавьте это утверждение в ваш /etc/mysql/my.cnfфайл:

ignore-db-dir=lost+found

После перезагрузки MySQL вы можете проверить это командой:

show global variables like 'ignore_db_dirs';

Если вы хотите игнорировать несколько каталогов, вам нужно указать опцию для каждого из них отдельно.

Источник: http://www.chriscalender.com/ignoring-the-lostfound-directory-in-your-datadir/

Marki555
источник
3

Расположение my.cnf под CentOS 7.2, если вы используете MariaDB находится в

/etc/my.cnf

Вы можете перезапустить сервис с

systemctl restart mariadb.service

ignore-db-dir следует поместить в раздел [mysqld], а не в раздел [mysqld_safe].

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

ignore-db-dir=lost+found

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
Страхиня Радман
источник
1

Как наш MySQL еще не понимает ignore_db_dirs, я сделал

# chmod 0 lost+found

который решил (эту) проблему.

Геррит А. Смит
источник
0

MariaDb is ignore_db_dirs MySQL is ignore_db_dir - без "s"

См. Https://mariadb.com/kb/en/library/server-system-variables/#ignore_db_dirs

У меня был скрытый каталог, как показано ниже

mysql50 # .local

так в etc / my.cnf --- для MariaDB это было

[mysqld] ignore_db_dirs = .local

и перезапустите сервер базы данных - затем проверьте, что базы данных больше нет в команде SHOW DATABASES или в MariaDB есть «mysqlshow» из командной строки

Затем вы можете удалить каталог и все, что находится в нем, в / var / lib / mysql, затем заново отредактируйте файл /etc/my.cnf и закомментируйте команду или удалите ее и перезапустите сервер снова - проблема исправлена

НЕ ПРОСТО УДАЛЯЙТЕ НЕДОПУСТИМЫЙ ДИРЕКТОР БЕЗ выполнения вышеупомянутого FIRST =, так как хранилище данных, которое хранится на сервере, будет повреждено, и вы не сможете заставить его перезапустить снова, за исключением необходимости удалять все базы данных и восстанавливать базы данных из резервной копии или хуже - и это ОГРОМНОЕ.

wilburunion
источник