Ранее я сохранил копию каталога / var / lib / mysql / ddms («ddms» - это имя схемы). Теперь я установил новый MySQL на только что установленную Ubuntu 10.04.3 LTS, запустив apt-get install mysql-server
версию 5.1. После того, как я скопировал каталог ddms в / var / lib / mysql, некоторые из его таблиц работают нормально, это таблицы с соответствующим набором из трех файлов: файл .frm, файл .MYD и файл .MYI.
Однако есть две таблицы с различным набором файлов: файл .frm и файл .ibd. Эти две таблицы не отображаются в списке таблиц в phpMyAdmin. Когда я смотрю на журнал ошибок, он говорит:
[ERROR] Cannot find or open table ddms/dictionary_item from
the internal data dictionary of InnoDB though the .frm file for the
table exists. Maybe you have deleted and recreated InnoDB data
files but have forgotten to delete the corresponding .frm files
of InnoDB tables, or you have moved .frm files to another database?
or, the table contains indexes that this version of the engine
doesn't support.
Пожалуйста, помогите с восстановлением этих двух таблиц. Спасибо.
Ответы:
Таблицы InnoDB не могут быть скопированы так же, как таблицы MyISAM.
Простое копирование файлов .frm и .ibd из одного места в другое вызывает проблемы. Копирование файлов .frm и .ibd таблицы InnoDB хорошо только тогда и только тогда, когда вы можете гарантировать, что идентификатор табличного пространства файла .ibd точно соответствует записи идентификатора табличного пространства в метаданных файла ibdata1 .
Я написал два сообщения в DBA StackExchange об этой концепции идентификатора табличного пространства
Вот отличная ссылка о том, как заново присоединить любой файл .ibd к ibdata1 в случае несовпадения идентификаторов табличного пространства: http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file . Прочитав это, вы должны сразу же понять, что копировать файлы .ibd просто безумие.
Вы можете применить предложения из ссылки на Календарь Chris, или вы можете вернуться к старой установке mysql, запустить mysql, а затем mysqldump
ddms
базу данных. Затем импортируйте этот mysqldump в ваш новый экземпляр mysql. Поверь мне, это будет намного проще.источник
How to Recover an InnoDB table whose files were moved around
буквально спас мне жизнь. Большое спасибо.Я недавно испытал эту же проблему. Вот шаги, которые я использовал, чтобы решить эту проблему без необходимости возиться с идентификатором табличного пространства, как упомянуто выше RolandoMySQLDBA. Я на Mac, и поэтому я использовал MAMP для восстановления базы данных до точки, где я мог бы экспортировать ее в дамп MySQL.
Вы можете прочитать полный пост в блоге об этом здесь: http://www.quora.com/Jordan-Ryan/Web-Dev/How-to-Recover-innoDB-MySQL-files-using-MAMP-on-a-Mac
Вы должны иметь:
-ibdata1
-ib_logfile0
-ib_logfile1
-FRM файлы из вашей папки mysql_database
-Установка MAMP / MAMP Pro, которую вы готовы уничтожить (при необходимости)
Скопируйте все папки и файлы, входящие в архив папки mysql, с рабочего сервера (в моем случае это среда mt Plesk), КРОМЕ ТОГО, ЧТОБЫ НЕ ПЕРЕЗАПИСАТЬ:
- / Applications / MAMP / дб / MySQL / MySQL /
- / Applications / MAMP / дб / MySQL / mysql_upgrade_info
- / Applications / MAMP / дб / MySQL / performance_schema
И вуаля, теперь вы должны иметь доступ к базам данных из phpMyAdmin, какое облегчение!
Но мы еще не закончили, теперь вам нужно выполнить mysqldump для восстановления этих файлов в вашей производственной среде, а время ожидания интерфейса phpmyadmin для больших баз данных истекло. Следуйте инструкциям здесь:
http://nickhardeman.com/308/export-import-large-database-using-mamp-with-terminal/
Скопировано ниже для справки. Обратите внимание, что при установке MAMP по умолчанию пароль является «root».
Как запустить mysqldump для MAMP с помощью терминала
База данных экспорта от MAMP [1]
Шаг первый: откройте новое окно терминала
Шаг второй: перейдите к установке MAMP, введя следующую строку в терминале cd / Applications / MAMP / library / bin. Нажмите клавишу ввода.
Шаг третий: Напишите команду дампа ./mysqldump -u [ИМЯ ПОЛЬЗОВАТЕЛЯ] -p [DATA_BASENAME]> [PATH_TO_FILE] Нажмите клавишу ввода
Пример:
Совет: чтобы быстро перейти к папке, вы можете перетащить папку в окно терминала, и она запишет местоположение папки. Это был замечательный день, когда кто-то показал мне это.
Шаг четвертый: эта строка текста должна появиться после того, как вы нажмете «Ввод пароля». Так что, угадайте, что, введите ваш пароль, помните, что буквы не появятся, но они есть.
Шаг пятый: Проверьте место, где вы сохранили свой файл, если он там есть, УСПЕХА Теперь вы можете импортировать базу данных, которая будет изложена далее.
Теперь, когда у вас есть экспорт базы данных mysql, вы можете импортировать его в производственную среду.
источник
Я восстановил свои файлы MySQL 5.5 * .ibd и * .frm с использованием MySQL Utilites и MariaDB 10.
1) Генерация Создать SQL.
Вы можете получить ваши создания sql из файла frm. Вы должны использовать: https://dev.mysql.com/doc/mysql-utilities/1.5/en/mysqlfrm.html
shell> mysqlfrm --server = root: pass @ localhost: 3306 c: \ MY \ t1.frm - -port = 3310
В противном случае вы можете создать свои sql.
2) Создайте свои таблицы
Создайте свои таблицы в базе данных.
3) alter table xxx сбросить табличное пространство
Откажитесь от ваших таблиц, которые вы хотите заменить ваши * .ibd файлы.
4) Скопируйте ваши * .ibd файлы (MySQL или MariaDB) в путь данных MariaDB.
Сначала я пытаюсь использовать MySQL 5.5 и 5.6 для восстановления, но база данных падает и немедленно останавливается из-за ошибки, связанной с идентификатором табличного пространства. ( ОШИБКА 1030 (HY000): Получена ошибка -1 от механизма хранения )
После того, как я использовал MariaDB 10.1.8 и успешно восстановил свои данные.
5) alter table xxx import tablespace
Когда вы запускаете этот оператор, MariaDB предупреждает о файле, но это не важно, чем восстанавливать ваши данные :) База данных все еще продолжается, и вы можете видеть ваши данные.
Я надеюсь, что эта информация будет полезна для вас.
источник
mysqlfrm
(пробовал версии 1.3.5 и 1.6.5 с MySQL 5.6 и 5.7) не дали правильногоCREATE
определения, даже при использовании MySQL 5.7 ( ROW_FORMAT по умолчанию изменился в MySQL 5.7.9 ), что привело кSchema mismatch (Expected FSP_SPACE_FLAGS=0x21, .ibd file contains 0x0.)
импорту табличного пространства. Вручную добавивROW_FORMAT=compact
в концеCREATE
заявления, добился цели .Manually adding ROW_FORMAT=compact at the end of the CREATE statement did the trick.
Это тоже сработало для меня. Благодарность! SyУ меня была та же проблема, только с файлами в качестве резервной копии.
Я решил скопировать файлы базы данных в / var / lib / mysql / yourdb и ibdata1, который находится в / var / lib / mysql.
Затем я смог убедиться, что могу получить доступ к таблицам mysql -u root -p dbname и запросить некоторые таблицы, которые были ранее повреждены.
Затем я сделал дамп базы данных с помощью mysqldump -u root -p [root_password] [database_name]> dumpfilename.sql
источник
Если вы используете MAMP и не можете запустить MySQL после того, как скопируете свои файлы, я вставил
innodb_force_recovery = 2
внутрь,my.ini
а затем смог запустить mysql и экспортировать мою базу данных.источник
Если вы можете восстановить файл * .ibd на исходном сервере MySQL, не забудьте также восстановить права доступа к файлу. В моем случае (MySQL8 на CentOS7) я восстановил файл в /var/lib/mysql/db/tablename.ibd и запустил:
Перед исправлением прав доступа доступ к таблице приводил к ошибке «Сервер MySQL 2006 пропал». После исправления прав доступа таблица работала (даже без перезапуска службы mysqld).
источник
Я собрал посты из похожих тем (чьи ответы здесь не публиковались):
Решение 1: https://dba.stackexchange.com/a/59978
Решение 2: https://dba.stackexchange.com/a/71785 (+ другой пост там)
Решение 3: комплект для восстановления таблиц: https://twindb.com/how-to-recover-innodb-dictionary/
Решение 4. Восстановите базу данных MySQL из папки данных без ibdata1 из файлов ibd.
Решение 5: с помощью
mysqlfrm
командыРешение 6: https://dba.stackexchange.com/a/159001
Решение 7: https://dba.stackexchange.com/a/144573
источник
Я просто хочу добавить еще одну вещь для пользователей Macos El Capitan. Утилиты MySQL не поддерживаются для этой версии, поэтому команда mysqlfrm не помогает. Я восстановил структуры таблиц с помощью dbsake, как показано на этой ссылке: https://www.percona.com/blog/2015/12/16/recovering-table-structure-from-frm-files-using-dbsake/
Все, что вам нужно сделать, это установить dbsake:
затем используйте команду frmdump и укажите путь к файлу .frm:
Вы получите заявление о создании. Сделав это, я просто выполнил шаги 2–5, уже упомянутые @Ecd. Надеюсь, это кому-нибудь поможет.
источник
Я действительно ценю Ecd. Что сработало для меня:
1.- У меня была резервная копия базы несколько месяцев назад, это помогло мне поднять эту резервную копию в xampp в Windows 10 и создать таблицы, имеющие структуру (конфигурация: Windows 10, xampp-windows-x64-7.1.30- 5-VC14) MySQL файл конфигурации my.ini в конце
2. После установки старой базы данных я приступил к выполнению команды alter table xxx discard tablespace для каждой таблицы в базе данных, которую я хотел восстановить, а затем к файлам .ibd папки данных в C: / xampp / mysql / data / system был удален (в данном случае именно этот путь)
3. Я приступил к копированию файлов .ibd из базы данных, которую я хотел восстановить, в папку xampp старой базы данных.
4. Скопировав файлы, запустите: alter table xxx import tablespace Для каждой таблицы в базе данных появится предупреждение, но мы его проигнорируем, данные будут загружены в таблицу и могут быть экспортированы позже.
5.- Экспортируйте всю базу данных в файл sql и приступайте к созданию ее в производстве и успешной работе!
Я надеюсь, что это помогает кому-то, кто имеет эту ситуацию, с уважением.
Английский предоставлен Google
источник
попробуйте запустить это с помощью утилит mysql
команда / командная строка
источник