Почему я не могу удалить базу данных MySQL?
4 ответов
Я бы попробовал:
- резервное копирование / сохранение любых баз данных, имеющих важные данные.
- удалить mySQL
- переустановить mySQL
- восстановить все резервные копии баз данных.
это случилось со мной на сервере Linux, и причиной был поврежденный каталог базы данных.
обновление: одна вещь, которую нужно сделать, это войти в каталог базы данных MySQL и выполнить ls -la
, чтобы убедиться, что злой БД такой же, как и другие в отношении разрешений, владения и так далее. Например, здесь "исходная" база данных не может быть удалена (она была создана глупым инструментом, запущенным как root):
drwx------ 2 mysql mysql 4096 Aug 27 2015 _db_graph
drwx------ 2 mysql mysql 4096 Jul 13 11:58 _db_xatex
drwxrw-rw- 2 root root 12288 May 18 14:27 _db_xatex_original
drwx------ 2 mysql mysql 12288 Jun 9 08:23 _db_xatex_contab
drwx------ 2 mysql mysql 12288 May 18 17:58 _db_xatex_copy
drwx------ 2 mysql mysql 4096 Nov 24 2016 _db_xatex_test
под управлением chown mysql:mysql _db_xatex_original; chmod 700 _db_xatex_original
будет исправить проблема (но проверьте внутри каталог для проверки там тоже разрешения и владения являются copacetic).
в конце концов, я использовал следующий уродливый Хак (после попытки остановки, перезапуска и ремонта всего, что может быть нацелено на REPAIR
):
- создана база данных "козел отпущения"
- остановлен сервер MySQL
- скопировал каталог, созданный MySQL Server, /var / lib / mysql / scapegoat, в в /tmp
- перезапустил сервер MySQL, сбросил базу данных "козел отпущения", остановил сервер
- теперь у меня была копия чистого, пустого DB dir, о котором MySQL больше ничего не знал.
- переместил каталог" evildb " в /tmp (так что, если что-то пошло не так, я мог бы вернуть его)
- переместил каталог "козел отпущения" в /var/lib / mysql, переименовав его в "evildb"
- запущен сервер MySQL
- не уверен, что я побежал еще ремонт в этот момент
- и база данных "evildb" стала сбрасываемой!
мое объяснение заключается в том, что при запросе на удаление базы данных сервер MySQL сначала выполняет некоторые проверки файлов в каталоге базы данных. Если эти проверки завершаются неудачей, то и падение также завершается неудачей. Эти проверки должны незначительно отличаться от проверок, выполняемых REPAIR
. Возможно, в затронутом каталоге есть что-то неожиданное.
я думаю, что это был на MySQL 5.1 или 5.2 на дистрибутиве SUSE 11.2 Linux. Надеюсь, это поможет.
обновление
вспоминая, я не помню, чтобы получал ошибки о "proc". Поэтому я менее уверен, что проблема заключается в каталог. Это может быть связано с proc
стол, без будучи коррупцией таблицы. Вы пробовали визуально проверять proc
таблица базы данных, чтобы найти там что-то, что принадлежит злу ДБ?
USE mysql;
SELECT * FROM proc;
это или любые ошибки из этого могут помочь в решении проблемы. Вы можете, кто знает, иметь некоторые строки с неправильным . В крайнем случае, вы можете экспортировать proc
таблица и перезагрузите ее после очистки (либо через SQL, либо через дисковый файл).
тест
у меня есть частичная проверка для вышеуказанного обновления. By намеренно вставка мусора в proc
таблица по поводу недавно созданной базы данных evil
, я частично воспроизвел ваши симптомы (undroppable база данных, MySQL connection сбой при попытке). Номер ошибки не 1548, хотя; но, возможно, это было бы, если бы я вставил право мусор в этой таблице... в любом случае, полезным, что удаление все ссылки на evil
db, последний снова стал сбрасываемым:
mysql> drop database evil;
ERROR 2013 (HY000): Lost connection to MySQL server during query
mysql> use mysql;
No connection. Trying to reconnect...
Connection id: 1
Current database: *** NONE ***
Database changed
mysql> DELETE FROM proc WHERE db = 'evil';
Query OK, 2 rows affected (0.00 sec)
mysql> drop database evil;
Query OK, 0 rows affected (0.00 sec)
Я столкнулся с проблемой, что запросы к моим базам данных (с именем: caloriecalculator) занимали слишком много времени, и он не будет падать вообще. Я выполнил следующие шаги ниже, и это исправило мою проблему:
- см. все процессы MySQL: mysqladmin processlist-u root-p
убить все процессы, связанные с caloriecalculator, поскольку он блокировал мои следующие запросы для выполнения. mysqladmin-u root-p убить 4
Теперь запустите: drop database caloriecalculator;
Если вы используете xampp в windows
вы также можете удалить свою базу данных вручную
перейти к xampp - > mysql - > данные - > [имя базы данных]
удалить [имя базы данных] сейчас.