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

  1. см. все процессы MySQL: mysqladmin processlist-u root-p

mysql processes

  1. убить все процессы, связанные с caloriecalculator, поскольку он блокировал мои следующие запросы для выполнения. mysqladmin-u root-p убить 4

  2. Теперь запустите: drop database caloriecalculator;

enter image description here


Если вы используете xampp в windows

вы также можете удалить свою базу данных вручную

перейти к xampp - > mysql - > данные - > [имя базы данных]

удалить [имя базы данных] сейчас.