Ответ 1
Я бы попробовал:
- Резервное копирование/сохранение любых баз данных, имеющих важные данные.
- Удалить mySQL
- Переустановите mySQL
- Восстановить все резервные базы данных.
Я запускаю MySQL 5.5.23 на Mac OS 10.8.2, и я не могу удалить конкретную базу данных, но могу оставить другие.
Когда я пытаюсь удалить конкретную таблицу, я получаю эту ошибку:
#1548 - Cannot load from mysql.proc. The table is probably corrupted
$ sudo /usr/local/mysql/support-files/mysql.server stop
ERROR! MySQL server PID file could not be found!
REPAIR TABLE mysql.proc
REPAIR TABLE mysql.proc USE_FRM
REPAIR TABLE mysql.*
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
Я все еще не могу отказаться от исходной конкретной базы данных, но могу оставить другие.
Журналы и обратная связь (за @Thomas в комментариях) Чтобы найти все журналы, я запустил (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
.
Я запустил это:
sudo /usr/local/mysql/support-files/mysql.server stop
И получил эту ошибку:
ERROR! MySQL server PID file could not be found!
Обновление [2.1] 2013-01-05 17: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
Я бы попробовал:
У меня это случилось со мной на 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
устранит проблему (но проверьте внутри каталог, чтобы убедиться, что там тоже разрешений, а владельцы коаксиально).
В конце концов, я применил следующий уродливый взломать (после попытки остановки, перезапуска и восстановления того, что может быть нацелено на REPAIR
):
Мое объяснение заключается в том, что при обращении к базе данных MySQL Server сначала выполняет некоторые проверки файлов в каталоге базы данных. Если эти проверки не выполняются, падение также не выполняется. Эти проверки должны быть существенно отличны от тех, которые выполняются с помощью 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
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) занимали слишком много времени, и это вообще не будет. Я выполнил следующие шаги ниже, и он исправил мою проблему:
Убейте все процессы, связанные с caloriecalculator, поскольку это блокирует выполнение моих следующих запросов. mysqladmin -u root -p kill 4
Теперь запустите: drop caloriecalculator базы данных;
Если вы используете XAMPP в Windows
Вы также можете удалить свою базу данных вручную
перейдите в xampp → mysql → data → [имя базы данных]
удалите свое [имя базы данных] сейчас.
У меня была та же проблема, и все, что я сделал, это удалил каталог базы данных из каталога данных mysql.