#mysql #windows #xampp
#mysql #Windows #xampp
Вопрос:
Я запускаю Windows 10 с XAMPP и несколькими десятками сайтов Drupal, установленных на localhost. Все работает нормально в течение нескольких месяцев.
Сегодня утром я выполнил восстановление Windows из точки восстановления два дня назад, чтобы избавиться от нежелательного обновления Windows. После того, как я это сделал, мой MySQL перестал работать. Я попытался удалить файл ibdata1
(теперь я знаю, что это была плохая идея), но когда ситуация ухудшилась, я восстановил исходный ibdata1
файл, который я удалил. Все данные таблицы ( .frm
и .ibd
файлы) все еще находятся в C:xamppmysqldata
. Теперь MySQL, по крайней мере, запустится, но все таблицы «исчезли»… Я могу загрузить phpMyAdmin в браузере, и когда я открываю базы данных слева, отображаются все таблицы… но когда я пытаюсь щелкнуть по одному, он сообщает мне «таблица не найдена».
В mysql_error.log
есть несколько ошибок, таких InnoDB: Cannot open table mysql/slave_master_info from the internal data dictionary of InnoDB though the .frm file for the table exists.
как URL, упомянутый в сообщении об ошибке, который предположительно сообщает вам, как решить эту проблему, но он неинформативен.
Я не думаю ibdata1
, что он поврежден … и все статьи, касающиеся восстановления данных, сложны до такой степени, что безумно несоразмерны проблеме. Ни у кого нет простого прописанного решения. Я неправильно гуглю? Это случалось со мной по крайней мере дважды раньше, и каждый раз проблема самопроизвольно разрешалась, прежде чем я мог начать следовать 10-часовым процедурам, которые я нашел в Интернете. К сожалению, не в этот раз. Конечно, я упускаю что-то простое. У меня были сотни и сотни таблиц в нескольких десятках баз данных, и кажется безнадежным пытаться найти схему для каждой из них и вручную подключить ее, что, похоже, предлагает большинство статей о восстановлении.
Разве база данных не должна просто знать, как читать файлы .frm
и .ibd
, и, вы знаете… работает? Кажется, что где-то неуместно только одно значение, и если бы я мог просто найти его, все просто «встало» бы на свои места.
Комментарии:
1. Так как подобные вещи происходили раньше, вы, конечно, должны были убедиться, что вы делали регулярные резервные копии всех этих ценных ресурсов (баз данных), верно ?
2. Никогда не знал, как это сделать. Проблема в том, что все данные находятся прямо там… почему он не может ее увидеть?
3. Я не могу отделаться от мысли, что после 2 предупреждений о том, что вы почти пропустили ГРОМКИЕ предупреждения, вы заслуживаете того, чтобы потерять лот, но давайте начнем с того, что вы опубликуете соответствующий раздел, то есть конец вашего
mysql error log
, чтобы мы могли видеть, о каких ошибках сообщает MYSQL4. dl.dropboxusercontent.com/u/6621447/mysql.txt
5. Вы сказали, что у вас много баз данных. Только один из них сообщает об этих ошибках или все из них?
Ответ №1:
Что для нас сработало, так это эта ссылка (восстановление потерянных файлов ibd для каждой таблицы).
Короче говоря, вы делаете:
ALTER TABLE ..... DISCARD TABLESPACE;
Для каждой затронутой таблицы.
Затем для каждой затронутой таблицы:
ALTER TABLE .... IMPORT TABLESPACE; SHOW WARNINGS;
Вы могли бы сделать это на той же схеме или создать новую схему в другой базе данных и скопировать все файлы *.ibd. В этом случае:
- Создайте новую схему с определениями таблиц.
- Удалите табличное пространство для всех таблиц.
- Скопируйте новые файлы *.ibd в нужную папку новой схемы.
- Удалите табличное пространство для всех таблиц.
ВАЖНО! Лучше, чтобы новая схема имела то же имя, что и старая.
Ответ №2:
Что сработало для меня:
https://dba.stackexchange.com/a/42932
Моей базой данных была InnoDB, поэтому возникла проблема с идентификатором, и при обновлении macos я получил это. Я процитирую основную часть:
У вас должен быть:
-ibdata1
-ib_logfile0
-ib_logfile1
-файлы.FRM из вашей папки mysql_database
-Новая установка MAMP / MAMP Pro, которую вы готовы уничтожить (при необходимости)
- Подключитесь по SSH к вашему веб-серверу (dev, production, без разницы) и перейдите в вашу папку mysql (моя была в / var / lib / mysql для установки Plesk в Linux)
- Сжать папку mysql
- Загрузите архивную папку mysql, которая должна содержать все базы данных MySQL, будь то MyISAM или InnoDB (вы можете удалить этот файл или переместить его в загружаемый каталог, если это необходимо)
- Установите MAMP (Mac, Apache, MySQL, PHP)
- Перейдите в /Applications/MAMP/db/mysql/
- Резервное копирование /Applications/MAMP/db/ mysql в zip-архив (на всякий случай)
Скопируйте во все папки и файлы, включенные в архив папки mysql с рабочего сервера (среда mt Plesk в моем случае) ЗА ИСКЛЮЧЕНИЕМ ТОГО, ЧТО НЕ ПЕРЕЗАПИСЫВАТЬ:
-/Приложения/MAMP/db/mysql/mysql/
-/Applications/MAMP/db/mysql/mysql_upgrade_info
-/Applications/MAMP/db/mysql/performance_schema
Ответ №3:
В моем случае я восстанавливал резервную копию (выполненную galera-arbitrator и xtrabackup. Используя первый, мы сделали снимок состояния, а с помощью последнего мы создали резервную копию физических данных) для Percona_XtraDB_Cluster. Итак, после размещения резервных копий данных в каталог /var/lib/mysql
нового сервера mysql, мы выполнили следующий select
запрос и получили ошибку.
$ mysql -uroot -p$MYSQL_ROOT_PASSWORD -h<NEW_SERVER_HOST_NAME> -e 'show columns from <MY_DB>.<MY_TABLE>'
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1146 (42S02) at line 1: Table 'playground.equipment' doesn't exist
И журнал сервера был:
[Warning] InnoDB: Cannot open table <MY_DB>/<MY_TABLE> from the internal data dictionary of InnoDB though the .frm file for the table exists. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html for how to resolve the issue.
Мы просто перезапустили контейнер с новыми данными. Вот и все
Ответ №4:
Просто переименуйте slave_master_info.frm в slave_master_info.BAK и все. Перезапустите службу mysql.