[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
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose