Почему я не могу удалить базу данных MySQL?



Задача



Я запускаюMySQL 5.5.23 наMac OS 10.8.2 и не могу удалить определенную базу данных, но я могу удалить другие.



Когда я пытаюсь удалить конкретную таблицу, я получаю эту ошибку:



#1548 - Cannot load from mysql.proc. The table is probably corrupted


Попытка Исправления




  • я перезапустил систему

  • я попытался перезапустить MySQL через CLI


    • $ sudo /usr/local/mysql/support-files/mysql.server stop

    • но получил эту ошибку ERROR! MySQL server PID file could not be found!



  • я отремонтировал mysql.таблица тез.Докл.


    • REPAIR TABLE mysql.proc

    • REPAIR TABLE mysql.proc USE_FRM



  • я починил весь mysql.* столы.


    • REPAIR TABLE mysql.*



  • при запуске mysqlcheck из командной строки


    • mysqlcheck --repair --all-databases


    • mysqlcheck --repair specific-db


      • я получил эту ошибку: mysqlcheck: Got error: 2002: Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (2) when trying to connect






Текущее Состояние



Я все еще не могу удалить исходную конкретную базу данных, но могу удалить другие.



Обновление[1] 2013-01-05 11: 15 утра [Новый Йорк]



Журналы и обратная связь (per @Thomas in comments)
Чтобы найти все журналы, я запустил (cli):



$(ps auxww|sed -n '/sed -n/d;/mysqld /{s/.* ([^ ]*mysqld) .*/1/;p;}') --verbose --help|grep '^log'


я получил такую обратную связь:



130105 11:35:21 [Warning] Can't create test file /usr/local/mysql-5.5.23-osx10.6-x86_64/data/wills-mbp.lower-test
130105 11:35:21 [Warning] Can't create test file /usr/local/mysql-5.5.23-osx10.6-x86_64/data/wills-mbp.lower-test
130105 11:35:21 [Note] Plugin 'FEDERATED' is disabled. /usr/local/mysql/bin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
130105 11:35:21 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.


Я смотрю в mysql_upgrade.



Обновление[2] 2013-01-05 4: 04 вечера [Нью-Йорк]



Я прогнал это :



sudo /usr/local/mysql/support-files/mysql.server stop


И получил такую ошибку:



ERROR! MySQL server PID file could not be found!


Обновление[2.1] 2013-01-05 5: 37 вечера [Нью-Йорк]



Я запустил ps auxww | grep mysql, нашел процесс mysqld и убил его (sudo kill [process id]). Я был затем успешно перезапустить mysql. Тем не менее, мне все еще не удается удалить эту конкретную базу данных, упомянутую выше.

Решено



После попытки вручную исправить повреждение и многие из предложений и других ответов, перечисленных здесь, переустановка mySQL была единственной вещью, которая решила мою проблему.



На Mac (под управлением 10.8.2) мне также пришлось сделать несколько ручных удалений для чистой установки:



sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm /etc/my.cnf




Статьи консультировались



812   4  

4 ответов:

Я бы попробовал:

  • резервное копирование / сохранение любых баз данных, содержащих важные данные.
  • Удалить mySQL
  • переустановить mySQL
  • восстановление всех резервных копий баз данных.

Это случилось со мной на сервере Linux, и причиной был поврежденный каталог базы данных.

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


В конце концов, я использовал следующий уродливый Хак (после попытки остановить, перезапустить и восстановить все, что может быть нацелено на a REPAIR):

  • создана база данных "козел отпущения"
  • остановлен сервер MySQL
  • скопировал каталог, созданный сервером MySQL, /var / lib / mysql / scapegoat, в /tmp
  • перезапустил сервер MySQL, сбросил базу данных " козел отпущения", остановил сервер
  • Теперь у меня была копия чистой, пустой DB dir, о которой MySQL больше ничего не знал.
  • переместил каталог" evildb " в /tmp (чтобы, если что-то пойдет не так, я мог вернуть его обратно)
  • переместил каталог" scapegoat "в /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;
Это, или любые ошибки из этого, может помочь в решении проблемы. Вы можете, кто знает, иметь некоторые строки с неправильным столбцом db. В крайнем случае, вы можете экспортировать таблицу proc и перезагрузить ее после очистки (либо через SQL, либо через дисковый файл).

Тест

У меня есть частичная проверка для вышеупомянутого обновления. Путем преднамеренной вставки мусора в таблицу proc по поводу недавно созданной базы данных evil, ячастично воспроизвел ваши симптомы (неуправляемая база данных, сбой соединения MySQL при попытке). Хотя номер ошибки не 1548; но, возможно, он был бы, если бы я вставил правильно мусор в этом столе... во всяком случае, полезный бит состоит в том, что путем удаления всех ссылок на БД evil, последняя снова стала droppable:

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 обрабатывает

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

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

Введите описание изображения здесь

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

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

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

Теперь удалите [имя базы данных].

Comments

    Ничего не найдено.