[MYSQL] Восстановление данных, без резервной копии, остался только один файл ibd Как восстановить данные?
[MYSQL] Восстановление данных, без резервной копии, остался только один файл ibd Как восстановить данные?

фон

Среда: MySQL 8.0.

Случайно удалил каталог данных MySQL, Но все жеОстался один файл .ibdсуществовать. Резервное копирование не требуется, Нет бинлога , Чтобы восстановить данные в этом файле ibd.

ах. этот..... Сначала избили администратора базы данных, который не сделал резервную копию

анализировать

Обычно мы используемРезервное копирование+бинлогПриходить Восстановить данные, Но на этот раз существует только один файл ibd.

мы знаем MySQL 8.0 Файл ibd также содержит информацию о метаданных (откуда я это знаю,спросите вы?). Итак, мы сначала Восстановить структуру таблицы,Снова Восстановить данные.

Восстановить структуру таблицы

Будет лучше, если в разработке будет соответствующий DDL. Если нет — разберем сами.

В файле ibd mysql 8.0 есть страница sdi, которая записывает информацию метаданных в сжатом формате json. Мы можем использовать официальный ibd2sdi для анализа этой информации json.

Язык кода:shell
копировать
ibd2sdi /data/mysql_3314/mysqldata/ibd2sql/ddcw_alltype_table.ibd 

Но склеить DDL самостоятельно слишком хлопотно.

Поэтому мы используем другие инструменты для извлечения DDL, Используйте это здесь ibd2sql извлечь (зачем использовать это? Потому что я это написал -_- Легко использовать)

Язык кода:shell
копировать
python3 main.py /tmp/ddcw_alltype_table.ibd --ddl

Теперь DDL извлечен. Сначала мы создаем тестовую среду, создаем ту же библиотеку, а затем используем приведенный выше DDL для восстановления соответствующей структуры таблицы.

Язык кода:sql
копировать
CREATE TABLE IF NOT EXISTS `ibd2sql`.`ddcw_alltype_table`(
    `id` int NOT NULL AUTO_INCREMENT,
    `int_col` int NULL,
    `tinyint_col` tinyint NULL DEFAULT '1',
    `smallint_col` smallint NULL,
    `mediumint_col` mediumint NULL,
    `bigint_col` bigint NULL,
    `float_col` float NULL,
    `double_col` double NULL,
    `decimal_col` decimal(10,2) NULL,
    `date_col` date NULL,
    `datetime_col` datetime NULL,
    `timestamp_col` timestamp NULL,
    `time_col` time NULL,
    `year_col` year NULL,
    `char_col` char(100) NULL,
    `varchar_col` varchar(200) NULL DEFAULT 'aa',
    `binary_col` binary(10) NULL,
    `varbinary_col` varbinary(20) NULL,
    `bit_col` bit(4) NULL,
    `enum_col` enum('A','B','C') NULL,
    `set_col` set('X','Y','Z') NULL,
    `josn_type` json NULL,
    `newcol` varchar(200) NULL DEFAULT 'aa',
    `newcol2` varchar(200) NULL DEFAULT 'aa',
    `newcoldasdas2` varchar(300) NULL DEFAULT 'bbaa',
    PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ;

Восстановить данные

После восстановления структуры таблицы Должно Восстановить данные Понятно.

Способ 1 (рекомендуется)

MySQL может использовать сброс table для удаления табличного пространства, Затем используйте импорт tablespace для импорта табличного пространства. Вот как мы его используем данные.

Официальный сайт: введение: https://dev.mysql.com/doc/refman/8.0/en/innodb-table-import.html

Язык кода:sql
копировать
-- Удалить табличное пространство
alter table ddcw_alltype_table discard tablespace;

-- Скопируйте табличное пространство, которое нужно восстановить.
system cp -ra /tmp/ddcw_alltype_table.ibd /data/mysql_3314/mysqldata/ibd2sql

-- Импортируйте табличное пространство, которое нужно восстановить.
alter table ddcw_alltype_table import tablespace;

-- Проверка данных
select count(*) from ddcw_alltype_table;

Этот метод очень прост и удобен, поэтому рекомендуется.

Но можно потерпеть неудачу (жизнь не всегда легка)

Способ 2

Если табличное пространство невозможно импортировать, Мы также можем проанализировать этот файл ibd, чтобы получить соответствующие данные. На рынке мало таких инструментов Я все еще использую его здесь ibd2sql (Частные товары включены-_-)

Страницы переполнения в настоящее время не поддерживаются (по умолчанию NULL). Также не рекомендуется хранить большие данные в MySQL.

В основном поддерживаются все типы данных, но не поддерживаются поля пространственных координат (почему? Потому что это слишком сложно и какое-то время не будет анализироваться...)

Язык кода:shell
копировать
python3 main.py /tmp/ddcw_alltype_table.ibd --sql > /tmp/ddcw_alltype_table.sql

Затем мы можем импортировать разобранный sql в базу данных. Конечно, мы также можем записать его напрямую в базу данных через конвейер во время разбора.

Язык кода:bash
копировать
mysql -h127.0.0.1 -P3314 -p123456 < /tmp/ddcw_alltype_table.sql

Подвести итог

Хотяостался только одинibdдокумент Также Но Восстановить данные, Но вам все равно нужно сделать резервную копию. Ведь эти инструменты могут не сработать. (У большинства есть резервные копии, Есть несколько примеров использования этих инструментов. Диапазон поддержки небольшой)

Если при использовании инструмента ibd2sql возникли проблемы, пожалуйста, придиgithubУпоминание актуальногоissue, Прикреплены версия ibd2sql и версия mysql, Лучше всего прикрепить лог отладки.

Адрес загрузки здесь не указан. Последняя версия не упакована. Чтобы использовать ее, необходимо загрузить исходный код (написан на python3, без пакетов зависимостей, просто используйте его напрямую).

Прилагается использование ibd2sql:

Язык кода:bash
копировать
14:20:37 [root@ddcw21 ibd2sql_v1.1]#python3 main.py --help
usage: main.py [-h] [--version] [--ddl] [--sql] [--delete] [--complete-insert] [--force] [--set] [--multi-value] [--replace]
               [--table TABLE_NAME] [--schema SCHEMA_NAME] [--sdi-table SDI_TABLE] [--where-trx WHERE_TRX]
               [--where-rollptr WHERE_ROLLPTR] [--where WHERE] [--limit LIMIT] [--debug] [--debug-file DEBUG_FILE]
               [--page-min PAGE_MIN] [--page-max PAGE_MAX] [--page-start PAGE_START] [--page-count PAGE_COUNT]
               [--page-skip PAGE_SKIP] [--parallel PARALLEL]
               [FILENAME]

Разбор ibd-документа MySQL 8.0 https://github.com/ddcw/ibd2sql

positional arguments:
  FILENAME              ibd filename

options:
  -h, --help            show this help message and exit
  --version, -v, -V     show version
  --ddl, -d             print ddl
  --sql                 print data by sql
  --delete              print data only for flag of deleted
  --complete-insert     use complete insert statements for sql
  --force, -f           force pasrser file when Error Page
  --set                 set/enum to fill in actual data instead of strings
  --multi-value         single sql if data belong to one page
  --replace             "REPLACE INTO" replace to "INSERT INTO" (default)
  --table TABLE_NAME    replace table name except ddl
  --schema SCHEMA_NAME  replace table name except ddl
  --sdi-table SDI_TABLE
                        read SDI PAGE from this file(ibd)(partition table)
  --where-trx WHERE_TRX
                        default (0,281474976710656)
  --where-rollptr WHERE_ROLLPTR
                        default (0,72057594037927936)
  --where WHERE         filter data(TODO)
  --limit LIMIT         limit rows
  --debug, -D           will DEBUG (it's too big)
  --debug-file DEBUG_FILE
                        default sys.stdout if DEBUG
  --page-min PAGE_MIN   if PAGE NO less than it, will break
  --page-max PAGE_MAX   if PAGE NO great than it, will break
  --page-start PAGE_START
                        INDEX PAGE START NO
  --page-count PAGE_COUNT
                        page count NO
  --page-skip PAGE_SKIP
                        skip some pages when start parse index page
  --parallel PARALLEL, -p PARALLEL
                        parse to data/sql with N threads.(default 4) TODO
boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода