Почему я не могу удалить базу данных 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.procREPAIR 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
Статьи консультировались
MySQL дублирует с ошибкой CONCAT 1548-не может загрузиться из mysql.процесс. Таблица, вероятно, повреждена
ошибка SQL: BIGINT UNSIGNED value находится вне диапазона в ( ... ), но это не имеет смысла
как восстановить поврежденную таблицу
диспетчер MySQL или файл PID сервера не удалось найти
проблема PHP / MySQL после обновления безопасности 2010-005
проблемы с mysql после обновления программного обеспечения Mac OS X
Как удалить MySQL полностью Mac OS X Leopard
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) занимают слишком много времени, и он не будет падать вообще. Я последовал этим шагам ниже, и это исправило мою проблему:
- Смотрите все процессы MySQL: mysqladmin processlist - u root-p
Убейте все процессы, связанные с caloriecalculator, так как он блокирует мои следующие запросы, которые будут выполняться. mysqladmin-u root-p kill 4
Теперь запускаем: drop database caloriecalculator;
Если вы используете xampp в windows
Вы также можете удалить базу данных вручную
Перейдите в xampp - > mysql - > data - > [имя базы данных]
Теперь удалите [имя базы данных].


Comments