Мой журнал 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.
За MySQL работает ОЧЕНЬ медленно на CentOS 6x (не 5x), мой datadir находится на ext3 с параметром барьер = 0.
Что вызывает эту ошибку и как ее устранить?
Мне кажется, что ты datadir
находится в собственной файловой системе.
Файловые системы Ext, как и большинство файловых систем под Unix, имеют в своем корне каталог с именем lost+found
. Он существует для того, чтобы позволить файлам, которые становятся отсоединенными (то есть, у них есть контент, но нет связанной записи в каталоге), быть повторно присоединенным где-нибудь, когда несовместимая файловая система обнаружена (см., Например, https://unix.stackexchange.com/questions/18154/what-is-the-purpose-of-the-lostfound-folder-in-linux-and-unix Больше подробностей). Эта цель важна при аварийном восстановлении, поэтому не следует удалять каталог.
Проблема возникает, когда точка монтирования, в которой монтируется файловая система, содержащая этот каталог, полностью передается приложению, которое ожидает, что все в этой точке монтирования принадлежит ему. MySQL, будучи одним из таких, пытается интерпретировать lost+found
каталог как что-то связанное с базой данных, и (что небезосновательно) не работает.
Лучше всего никогда не выделять целую FS для приложения, а вместо этого монтировать FS в какую-то точку монтирования, не зависящую от приложения, например /data1
, создайте в нем подкаталог, например /data1/mysql
, и перенастройте приложение, чтобы использовать этот каталог в качестве своего каталога данных.
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/
Расположение 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
Поскольку наш MySQL еще не понимает ignore_db_dirs
, Я сделал
# chmod 0 lost+found
который решил (эту) проблему.
MariaDb - это ignore_db_dirs MySQL - ignore_db_dir - без "s"
Видеть https://mariadb.com/kb/en/library/server-system-variables/#ignore_db_dirs
У меня был скрытый каталог, как показано ниже
поэтому в etc / my.cnf --- для MariaDB это было
[mysqld] ignore_db_dirs = .local
и перезапустите сервер базы данных - затем проверьте, что база данных больше не находится в команде SHOW DATABASES или в MariaDB есть "mysqlshow" из командной строки
Затем вы можете удалить каталог и все, что находится под ним, в / var / lib / mysql, затем повторно отредактировать файл /etc/my.cnf и закомментировать команду или удалить ее и снова перезапустить сервер - проблема устранена.
НЕ ПРОСТО УДАЛЯЙТЕ НЕЖЕЛАТЕЛЬНЫЙ КАТАЛОГ, НЕ сделав этого выше FIRST =, поскольку хранилище данных, которое хранится на сервере, будет повреждено, и вы можете не перезапустить его снова, за исключением того, что вам придется удалить все базы данных и восстановить базы данных из резервной копии или хуже - и это БОЛЬШОЙ ОЙ.