LINUX.ORG.RU
решено ФорумAdmin

MySQL распознаёт пустую директорию как базу данных

 


0

1

Всем привет.

Столкнулся с такой проблемой. Выделил отдельный жесткий диск под файлы баз данных, примонтировал его. Он был пуст, за исключением стандартной директории lost+found На нём я создал служебные базы MySQL (mysql_install_db) и успешно запустил сервер.

Набираю SHOW DATABASES и вижу:

+---------------------+
| Database            |
+---------------------+
| #mysql50#lost+found |
| information_schema  |
| mysql               |
| performance_schema  |
+---------------------+

Лол! Пустая директория lost+found распозналась как база данных. Проблема в том, что её нельзя удалить:

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

Но можно заюзать:

USE `#mysql50#lost+found`;
Database changed

Вопрос: как её удалить? При этом не удаляя директории, так как всё равно директория будет создана заново после следующего ребута.


На MySQL это уже старый вопрос. Там предлагают решить проблему либо патчем:
http://lists.mysql.com/internals/34630

if (!strcmp(file->name,"lost+found"))
    continue; /* #22615: Ignore lost+found directory */
Что как бы намекает на очередной костыль :)
Либо запуском сервера с параметром --ignore-db-dir. Лучшего решения я, к сожалению, не знаю.

znenyegvkby
()

Оу. Спасибо :)

sorc17
() автор топика

А еще можно монтировать этот раздел куда нибудь в /mnt/data. Создать там директорию mysql и засимлинкать ее в /var/lib/, ну или где там у тебя мускул данные хранит. И ни каких костылей тогда не надо.

ubiquitine
()
Ответ на: комментарий от ubiquitine

А еще можно монтировать этот раздел куда нибудь в /mnt/data. Создать там директорию mysql и засимлинкать ее в /var/lib/, ну или где там у тебя мускул данные хранит.
И ни каких костылей тогда не надо.

Симлинк - это тоже костыль, еслишо.

tazhate ★★★★★
()
Ответ на: комментарий от ubiquitine

Именно поэтому --ignore-db-dir - only-way. Даже святая святых, офф. документация мускула в описании этого параметра использует именно этот случай :)

--ignore-db-dir=dir_name

This option tells the server to ignore the given directory name for purposes of the SHOW DATABASES statement or INFORMATION_SCHEMA tables. For example, if a MySQL configuration locates the data directory at the root of a file system on Unix, the system might create a lost+found directory there that the server should ignore. Starting the server with --ignore-db-dir=lost+found causes that name not to be listed as a database.

Поэтому я и написал что лучшего решения (без костылей) не знаю.

znenyegvkby
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.