Este es el manual oficial de DBRecover for MySQL 2611. La versión 2611 funciona sin Java y sustituye la interfaz gráfica por una interfaz interactiva de terminal y la línea de comandos. DBRecover for MySQL es software gratuito y puede usarse sin comprar una licencia. Siempre que sea posible, trabaje con copias de los archivos de base de datos. DBRECOVER for MySQL

Este manual explica cómo recuperar definiciones de tablas y filas a partir de archivos de MySQL sin conexión con DBRecover para MySQL 2611, tanto en su interfaz de terminal interactiva como en la línea de comandos. Está dirigido a operadores que tienen archivos de base de datos que recuperar, no a desarrolladores que amplían la herramienta.

Todas las pantallas que se muestran aquí se capturaron con dbrecover 2611 ejecutándose sobre datos de ejemplo. Las rutas se muestran como /data/recovery/...; en Windows las pantallas son las mismas, con rutas de Windows. Siempre que sea posible, trabaje sobre copias de los archivos.

Qué cambia en 2611

2611 es una reescritura de DBRecover para MySQL como un único programa nativo y ligero.
  • Ya no requiere Java. No hay nada que instalar: descomprima y ejecute. El paquete ocupa unos 6 MB, en lugar de unos 150 MB con un JRE incluido.
  • Ya no hay interfaz gráfica. La ventana gráfica se sustituye por una interfaz de terminal interactiva que funciona en cualquier consola y a través de SSH, y la clásica línea de comandos se mantiene para scripts. Todos los flujos de recuperación de la antigua interfaz gráfica están en la interfaz de terminal, con los mismos nombres.
  • Un solo paquete para Windows y Linux: dbrecover-mysql-2611.zip contiene dbrecover.exe para Windows 10 / Server 2016 o posterior (64 bits) y dbrecover para cualquier Linux x86_64.
  • Los mismos resultados. Las opciones de la línea de comandos no cambian, y el SQL, el DDL y el CSV exportados son los mismos que los de la versión 2610. Es más rápido y necesita mucha menos memoria: una exportación completa por diccionario de un datadir MySQL 8 de 142 tablas y 5.9 GB tardó 84 s con unos 25 MB de memoria, frente a 200 s y de 350 a 770 MB de la versión Java.

Antes de empezar

Prepare los archivos correspondientes al escenario que va a recuperar:

  • Recuperación de una sola tabla MySQL 8.x: el archivo .ibd de la tabla.
  • Recuperación de un datadir MySQL 8.x: el datadir que contiene los directorios de esquema y mysql.ibd.
  • Recuperación de una sola tabla MySQL 5.x o MariaDB: el archivo .ibd de la tabla más el archivo .frm correspondiente.
  • Recuperación de un datadir MySQL 5.x o MariaDB: ibdata1, los directorios de esquema, los archivos .frm y los archivos de datos de las tablas.
  • Recuperación de tablas eliminadas: mysql.ibd, ibdata1 o archivos de páginas del DD; el datadir original o el directorio de páginas carveadas mejora los resultados de la exportación.
  • Escaneo de imagen de disco: una imagen de disco sin procesar, una imagen de sistema de archivos o una imagen copiada de un dispositivo de bloques.

Descargar e iniciar

Descargue dbrecover-mysql-2611.zip y descomprímalo. La carpeta dbrecover-mysql-2611/ contiene:

SistemaProgramaLanzador de la interfaz de terminal
Windows 10 / Server 2016 o posterior, 64 bitsdbrecover.exedbrecover-tui.bat
Linux, cualquier distribución x86_64 (binario estático)dbrecoverdbrecover-tui.sh

además de README.txt, 使用说明.txt y NOTICE.txt. No se necesita un entorno de ejecución de Java ni un servidor MySQL en marcha, y los archivos que abre nunca se modifican.

bash
dbrecover-tui.bat                  # Windows: haga doble clic en él o ejecútelo en una consola
./dbrecover-tui.sh                 # Linux
dbrecover --tui /data/recovery     # ambos sistemas: abrir un archivo o directorio de inmediato
dbrecover --help                   # las opciones de la línea de comandos

Ejecutar dbrecover en una terminal sin ningún argumento también inicia la interfaz de terminal. Si los archivos de Linux perdieron el permiso de ejecución al descomprimirlos, ejecute chmod +x dbrecover dbrecover-tui.sh.

La interfaz de terminal

La interfaz de terminal muestra un encabezado de dos líneas y el menú principal. Sus tres primeras filas corresponden a las tres situaciones en las que usted puede encontrarse; el menú vuelve a aparecer después de cada acción:

dbrecover --tui
DBRecover for MySQL Version 2611
English · Log: log_dbrecover.txt

? Choose an action
❯ The files are available          open and export tables (.ibd / .MYD / .frm / .page files, or a data directory)
  A table or database was dropped  recover it (DROP TABLE / DROP DATABASE)
  The files are gone or damaged    scan a disk image for InnoDB pages
  Preferences...                   export, data view and language options
  Exit
  ↑↓ move · Enter select · Esc back

Con --lang es (o en Preferences > Language) el menú principal y las preferencias se muestran en español, mientras que las demás indicaciones permanecen en inglés.

dbrecover --tui --lang es
DBRecover for MySQL Version 2611
español · Log: log_dbrecover.txt

? Elija una acción
❯ Los archivos existen                       abrir y exportar tablas (archivos .ibd / .MYD / .frm / .page, o un direct…
  Se eliminó una tabla o base de datos       recuperarla (DROP TABLE / DROP DATABASE)
  Los archivos se perdieron o están dañados  escanear una imagen de disco en busca de páginas InnoDB
  Preferences...                             export, data view and language options
  Exit
  ↑↓ move · Enter select · Esc back

Teclas: ↑ ↓ desplazan y Enter selecciona; Esc retrocede un paso (en el menú principal pregunta si desea salir); las listas de más de 8 filas se filtran a medida que escribe; Tab completa rutas, y la mayoría de las terminales también aceptan una ruta arrastrada a la ventana. Cada paso terminado queda en la terminal como una línea marcada con ✔, y el registro completo se escribe en log_dbrecover.txt en el directorio de trabajo.

Cuando termina una exportación, la interfaz muestra la misma acción como comando (Same thing from a script: dbrecover ...), de modo que una recuperación realizada una vez de forma interactiva puede repetirse desde un script.

Opción de inicioEfecto
[path]Archivo o directorio que se abre de inmediato
--lang en|zh|ja|esIdioma de la interfaz (predeterminado: el de las preferencias y, si no, la configuración regional del sistema)
--plainMenús numerados sin colores ni redibujado; se activa automáticamente cuando la entrada o la salida se redirige
--no-colorSin colores (la variable de entorno NO_COLOR también funciona)
--glyphs rich|safe|asciiJuego de símbolos; use ascii cuando los marcos aparezcan desalineados o los caracteres se muestren como recuadros

Escenario 1: Elegir el flujo de recuperación correcto

El menú principal sustituye al antiguo asistente de recuperación (Recovery Wizard). Sus filas preguntan qué les ocurrió a los datos, no qué herramienta o versión de MySQL usar; no se pregunta nada que los propios archivos puedan indicar (se detectan el tamaño de página de InnoDB, de 4K a 64K, y si un directorio es de MySQL 8 o de MySQL 5.x/MariaDB).

Fila del menú principalAdónde lleva
The files are availableSolicita una ruta bajo el título Open... y la abre donde corresponde (vea la tabla siguiente).
A table or database was droppedDrop Recovery: solicita mysql.ibd / ibdata1 / DD pages, Datadir (optional) y Scan output (optional), y luego analiza (escenario 6).
The files are gone or damagedDisk Image Scan: solicita Disk Image y Output Dir, y luego escanea (escenario 7).
Preferences...Opciones de exportación, de vista de datos, de idioma y de terminal (escenario 9).
Open...
✔ Choose an action · The files are available
? Open... › /data/recovery/db1/ibd_test_comprehensive.ibd
  Enter confirm · Tab complete · Esc back
Lo que abreAdónde va
Un archivo .ibd, .MYD o .page, o un .frmLa vista de tabla (escenarios 2 y 4)
Un directorio con mysql.ibd, otra carpeta de archivos de tabla o páginas carveadasDictionary Mode, escaneado de inmediato (escenarios 3 y 8)
Un directorio con ibdata1 y sin mysql.ibd, o el propio ibdata1MariaDB/MySQL5 Datadir Recovery, analizado de inmediato (escenario 5)
Cualquier otro archivoSe trata como una imagen de disco: Disk Image Scan (escenario 7)

Escenario 2: Recuperar una tabla MySQL 8.x .ibd

Use este escenario cuando tenga un archivo .ibd independiente de MySQL 8.x. Las tablas de MySQL 8.x contienen metadatos SDI, por lo que la estructura de la tabla se lee del propio archivo, sin necesidad de un .frm.

En la interfaz de terminal

  1. Elija The files are available y escriba la ruta del archivo .ibd (o inicie con dbrecover --tui orders.ibd).
  2. Se abre la vista de tabla. Sus cinco primeros elementos son las antiguas pestañas Data, Columns, DDL, SDI e Info; los demás son las acciones de la tabla.
vista de tabla
✔ Reading ibd_test_comprehensive.ibd · 00:00
● db1.ibd_test_comprehensive
  ⎿  /data/recovery/db1/ibd_test_comprehensive.ibd

db1.ibd_test_comprehensive
? Tab or action  › type to filter
❯ Data                                table data (rows) · Rows: 1,000, Include deleted: off
  Columns                             column definitions
  DDL                                 table DDL (CREATE TABLE)
  SDI                                 the JSON MySQL 8 stores in the tablespace
  Info                                file and recovery metadata
  Count Rows                          live and deleted
  Export DDL...                       save the CREATE TABLE statement
  Export Data...                      SQL file with structure and rows, ready to import
  Export CSV...                       CSV with a header line
  Rows / Include deleted              change the Data options, then reload
  Associate .frm File (MySQL 5.x)...  for a MySQL 5.x / MariaDB file without SDI
  Associate DDL (CREATE TABLE)...     a file that holds the CREATE TABLE statement
  Close
  ↑↓ move · Enter select · type to filter · Esc back
  1. Data permite recorrer las filas: ↑↓, PgUp/PgDn desplazan, ←→ mueven las columnas, Enter muestra un registro completo y q vuelve atrás.
Data
✔ Loading the data of db1.ibd_test_comprehensive · 100 rows · 00:00
db1.ibd_test_comprehensive · rows 1-20 of 100 · columns 1-7 of 73
    id  col_tinyint_s  col_tinyint_u  col_smallint_s  col_smallint_u  col_mediumint_s  col_mediumint_u
  ────  ─────────────  ─────────────  ──────────────  ──────────────  ───────────────  ───────────────
❯    1           -127              2          -32668             500         -8378608           100000
     2           -126              4          -32568            1000         -8368608           200000
     3           -125              6          -32468            1500         -8358608           300000
     4           -124              8          -32368            2000         -8348608           400000
     5           -123           NULL          -32268            NULL         -8338608             NULL
     ...
  Rows: 1,000, Include deleted: off
  ↑↓ rows · ←→ columns · Enter record · q back
  1. Rows / Include deleted establece el tamaño de la vista previa y si se muestran los registros eliminados, y luego recarga. Empiece con una vista previa pequeña; incluya los registros eliminados solo cuando los necesite.
Rows / Include deleted
✔ Tab or action · Rows / Include deleted
✔ Rows · 1000
✔ Include deleted? · No
  Reload: Rows: 1,000, Include deleted: off
✔ Loading the data of db1.ibd_test_comprehensive · 100 rows · 00:00
  1. DDL muestra el CREATE TABLE generado. Si el nombre de la tabla, las columnas o los índices parecen incorrectos, deténgase y verifique que el archivo proviene de la tabla esperada.
  2. Columns enumera nombres, tipos, atributos e índices; revíselos antes de exportar los datos.
Columns
Columns · db1.ibd_test_comprehensive · rows 1-20 of 77
     #  Column                  Type                              Attributes
  ────  ──────────────────────  ────────────────────────────────  ────────────────────────────────
❯    1  id                      bigint unsigned                   NOT NULL AUTO_INCREMENT COMMENT…
     2  col_tinyint_s           tinyint                           NOT NULL DEFAULT '-50' COMMENT …
     3  col_tinyint_u           tinyint unsigned                  DEFAULT '200' COMMENT 'TINYINT…
     ...
  17 index(es): PRIMARY KEY (`id`); UNIQUE KEY `uk_char_ascii` (`col_char_ascii_10`, `col_char_ascii_20`); KE
  1. Info muestra el tamaño del archivo, el número de páginas, el tamaño de página detectado, de dónde procede la estructura, el formato de fila, el juego de caracteres y los recuentos. Count Rows cuenta los registros vigentes y los eliminados.
Info
● Info · db1.ibd_test_comprehensive
  Name               db1.ibd_test_comprehensive
  Path               /data/recovery/db1/ibd_test_comprehensive.ibd
  Size               608 KB (622,592 bytes)
  Format             InnoDB tablespace (.ibd)
  Pages              38
  Page size          16384 bytes (detected)
  Table metadata     SDI
  Engine             InnoDB
  Row format         DYNAMIC
  Default charset    utf8mb4
  Default collation  utf8mb4_unicode_ci
  Auto increment     1
  Comment            IBD解析器综合测试表 - 包含所有支持的字段类型
  Columns            77
  Indexes            17
Count Rows
✔ Counting rows of db1.ibd_test_comprehensive · 100 rows · 00:00
● Row Count
  ⎿  Table: db1.ibd_test_comprehensive
     Rows: 100
     Deleted rows: 7
  Enable "Include deleted" to look at the deleted records that can still be read.

Exportar la tabla recuperada

  1. Export DDL... guarda la sentencia CREATE TABLE (predeterminado: ./export/<table>_ddl.sql).
  2. Export Data... escribe un archivo SQL importable con la estructura y las filas (predeterminado: ./export/<table>.sql).
  3. Export CSV... escribe un CSV con una línea de encabezado (predeterminado: ./export/<table>.csv).
  4. Pulse Enter para aceptar el archivo propuesto o escriba otro; un archivo existente solo se sobrescribe después de que usted lo confirme. Una barra de progreso muestra las filas escritas y el tiempo restante; Esc detiene la exportación.
  5. Compruebe el número de filas, la codificación del texto y algunas filas representativas antes de usar el resultado en otra base de datos.
Export DDL... / Export Data... / Export CSV...
✔ Export DDL... · /data/recovery/export/ibd_test_comprehensive_ddl.sql
✔ Exporting db1.ibd_test_comprehensive · 00:00
✔ DDL exported to: /data/recovery/export/ibd_test_comprehensive_ddl.sql
  Same thing from a script:  dbrecover --ddl --out /data/recovery/export/ibd_test_comprehensive_ddl.sql /data/recovery/db1/ibd_test_comprehensive.ibd
✔ Tab or action · Export Data...
✔ Export Data... · /data/recovery/export/ibd_test_comprehensive.sql
✔ Exporting db1.ibd_test_comprehensive · 100 rows, 406 KB · 00:00
✔ Exported to: /data/recovery/export/ibd_test_comprehensive.sql
  Same thing from a script:  dbrecover --ddl --sql --complete-insert --out /data/recovery/export/ibd_test_comprehensive.sql /data/recovery/db1/ibd_test_comprehensive.ibd
  Before using the file, check the row count, the text encoding and a few representative records.
✔ Tab or action · Export CSV...
✔ Export CSV... · /data/recovery/export/ibd_test_comprehensive.csv
✔ Exporting db1.ibd_test_comprehensive as CSV · 100 rows, 246 KB · 00:00
✔ CSV exported to: /data/recovery/export/ibd_test_comprehensive.csv

Desde la línea de comandos

bash
dbrecover --ddl orders.ibd                              # CREATE TABLE
dbrecover --ddl --sql --out orders.sql orders.ibd       # SQL importable: estructura y filas
dbrecover --sql --limit=1000 --out sample.sql orders.ibd
dbrecover --csv --out orders.csv orders.ibd
dbrecover --count orders.ibd                            # Table / Rows / Deleted rows
dbrecover --print-sdi orders.ibd                        # el JSON de SDI

Escenario 3: Recuperar muchas tablas MySQL 8.x desde un datadir

Use Dictionary Mode cuando tenga un datadir de MySQL 8.x y quiera recuperar muchas tablas de una sola vez.

En la interfaz de terminal

  1. Elija The files are available e indique el datadir (o inicie con dbrecover --tui /data/recovery/mysql8). Un directorio con mysql.ibd se reconoce como datadir de MySQL 8 y se escanea de inmediato.
  2. El menú de Dictionary Mode tiene los botones del antiguo cuadro de diálogo:
Dictionary Mode
● Dictionary Mode - Scan Directory
  ⎿  Scan: /data/recovery/mysql8
✔ Scanning... · Found 128 object(s) · 00:00

mysql8
? Dictionary Mode  › type to filter
❯ Browse Tables...       Found 128 object(s)
  Export All DDL...      table structures, one .sql per table; do this first
  Export All Data...     SQL data files, one per table
  Export All CSV...      CSV files, one per table
  Export Schema Dump...  one importable dump per schema
  Drop Recovery...       dropped tables and databases, from mysql.ibd
  Other DDL objects      views, routines, triggers and events
  Scan                   scan again
  Close
  ↑↓ move · Enter select · type to filter · Esc back
  1. Browse Tables... enumera los esquemas y luego sus tablas (escriba para filtrar), y abre la vista de tabla del escenario 2.
Browse Tables... › Schema
mysql8
? Schema
❯ dr80         59 tables
  dr80_dropdb  1 table
  mysql        68 tables
  ↑↓ move · Enter select · Esc back
Browse Tables... › Table
mysql8 › dr80
? Table  › sakila
❯ classic_sakila_actor             MySQL 8.0.46 · Dynamic · classic_sakila_actor.ibd
  classic_sakila_customer          MySQL 8.0.46 · Dynamic · classic_sakila_customer.ibd
  classic_sakila_film              MySQL 8.0.46 · Dynamic · classic_sakila_film.ibd
  classic_sakila_inventory         MySQL 8.0.46 · Dynamic · classic_sakila_inventory.ibd
  classic_sakila_payment           MySQL 8.0.46 · Dynamic · classic_sakila_payment.ibd
  classic_sakila_rental            MySQL 8.0.46 · Dynamic · classic_sakila_rental.ibd
  ↑↓ move · Enter select · type to filter · Esc back
  1. Export All DDL..., Export All Data..., Export All CSV... y Export Schema Dump... solicitan un directorio de salida; las exportaciones de datos, de CSV y de volcado también solicitan un límite de filas por tabla (0 = sin límite).
  2. Export Complete muestra los totales; si se omitieron tablas, puede consultar los motivos.
  3. Other DDL objects muestra las vistas, rutinas, disparadores y eventos almacenados en mysql.ibd.
Export All DDL... / Export Schema Dump...
✔ Dictionary Mode · Export All DDL...
✔ Select Export Directory for DDL · /data/recovery/export/ddl
✔ Exporting DDL for 128 tables · 00:01
● Export Complete
  ⎿  Dictionary per-table exported: DDL 128 table(s), SQL 0 table(s), CSV 0 table(s); skipped/data unavailable 0 export(s)
     /data/recovery/export/ddl
  Same thing from a script:  dbrecover --dict --dict-export-ddl-dir /data/recovery/export/ddl /data/recovery/mysql8
  Recommended next: spot-check a few large and small tables, then export data or CSV.
✔ Dictionary Mode · Export Schema Dump...
✔ Select Export Directory for Schema Dumps · /data/recovery/export/dump
✔ Row limit per table (0 = no limit) · 1000
✔ Exporting Schema Dumps for 128 tables · 00:01
● Export Complete
  ⎿  Dictionary schema dumps exported: 3 schema(s), 128 table(s); skipped/data unavailable 0 table(s)
     /data/recovery/export/dump
  Same thing from a script:  dbrecover --dict --dict-export-dump-dir /data/recovery/export/dump --limit 1000 --complete-insert /data/recovery/mysql8

Desde la línea de comandos

bash
dbrecover --dict /data/recovery/mysql8                  # enumerar las tablas encontradas
dbrecover --dict /data/recovery/mysql8 \
  --dict-export-ddl-dir out/ddl \
  --dict-export-sql-dir out/sql \
  --dict-export-csv-dir out/csv
dbrecover --dict /data/recovery/mysql8 --dict-export-dump-dir out/dump --limit=1000
dbrecover --dd-extra-ddl --out extra-ddl.sql /data/recovery/mysql8/mysql.ibd

Comprobaciones recomendadas

  1. Exporte primero el DDL.
  2. Revise algunas tablas grandes y pequeñas.
  3. Exporte un lote pequeño con un límite de filas antes de exportar todos los datos de un datadir grande.
  4. Use Preferences para establecer un límite de filas de exportación predeterminado si necesita una primera pasada acotada.

Escenario 4: Recuperar una tabla .ibd de MySQL 5.x o MariaDB con .frm

Use este escenario cuando la tabla de origen sea de MySQL 5.x o MariaDB. Estas tablas no contienen metadatos SDI de MySQL 8, por lo que DBRecover necesita el archivo .frm correspondiente o una sentencia CREATE TABLE compatible.

Inspeccionar primero el archivo .frm

Abra el propio .frm mediante The files are available. Si el .ibd está junto a él, la vista de tabla se abre con ambos; un .frm por sí solo se abre como "Table definition only", donde DDL, Columns e Info funcionan y los elementos de datos aparecen marcados como no disponibles.

Asociar el .frm con el .ibd

  1. Cuando el .frm está junto al .ibd con el mismo nombre, basta con abrir el .ibd: el .frm se usa automáticamente.
  2. En caso contrario, la interfaz informa de que no apareció ninguna tabla bajo el archivo y coloca el cursor en Associate .frm File (MySQL 5.x)...:
vista de tabla de un .ibd de MySQL 5.7 sin .frm
✔ Reading business_orders.ibd · no table metadata · 00:00
● business_orders.ibd
  ⎿  /data/recovery/copy/business_orders.ibd
! No table appeared under this file: it has no MySQL 8 SDI metadata that could be read.
  no SDI data found by scanning all pages
  A MySQL 5.x or MariaDB file needs its matching .frm or DDL: use "Associate .frm File (MySQL 5.x)..." or "Associate DDL (CREATE TABLE)..." below.

copy.business_orders
? Tab or action  › type to filter
     ...
❯ Associate .frm File (MySQL 5.x)...  for a MySQL 5.x / MariaDB file without SDI
  Associate DDL (CREATE TABLE)...     a file that holds the CREATE TABLE statement
  Close
  1. Selecciónelo e indique la ruta del .frm correspondiente. Associate DDL (CREATE TABLE)... acepta en su lugar un archivo con la sentencia.
Associate .frm File (MySQL 5.x)...
✔ Associate .frm File (MySQL 5.x)... · /data/recovery/shop/business_orders.frm
✔ Reading the structure of copy.business_orders · 00:00
✔ Table structure associated: shop.business_orders
  Look at DDL, Columns and Data before exporting.

Exportar la tabla

  1. Revise DDL y Columns.
  2. Obtenga una vista previa de las filas en Data con un límite de filas pequeño.
  3. Exporte el DDL y, cuando la vista previa sea correcta, el SQL o el CSV.
  4. Si los valores aparecen desplazados a columnas incorrectas, verifique que el .frm procede exactamente de la misma definición de tabla.
bash
dbrecover --ddl --frm orders.frm orders.ibd
dbrecover --ddl --sql --frm orders.frm --out orders.sql orders.ibd
dbrecover --csv --frm orders.frm --out orders.csv orders.ibd
dbrecover --sql --table-ddl-file create_orders.sql --out orders.sql orders.ibd
dbrecover --sql --out myisam_table.sql myisam_table.MYD     # MyISAM: .MYD con su .frm

Escenario 5: Recuperar un datadir MySQL 5.x o MariaDB

Use este flujo cuando tenga un datadir que contenga ibdata1, archivos .frm y archivos de datos de tablas.

En la interfaz de terminal

  1. Elija The files are available e indique el datadir (un directorio con ibdata1 y sin mysql.ibd), o el propio ibdata1.
  2. La interfaz analiza ibdata1 de inmediato e informa de las tablas encontradas, con el número de archivos .ibd y .frm que faltan:
MariaDB/MySQL5 Datadir Recovery
  This directory has ibdata1 and no mysql.ibd: a MySQL 5.x / MariaDB data directory.
● MariaDB/MySQL5 Datadir Recovery
  ⎿  Datadir: /data/recovery/mysql57
✔ Parsing ibdata1... · Found 61 table(s) (1 missing .ibd, 1 missing .frm) · 00:00
  Same thing from a script:  dbrecover --mariadb-datadir /data/recovery/mysql57
  Some tables have no data file. If .page files were carved from a disk image, set "Page Set Root" to the page set root.

mysql57
? MariaDB/MySQL5 Datadir Recovery  › type to filter
❯ Browse Tables...       61 table(s)
  Export DDL...          table structures, one .sql per table; do this first
  Export Data...         SQL data files, one per table
  Export CSV...          CSV files, one per table
  Export Schema Dump...  one importable dump per schema
  Page Set Root          not set; the root of carved .page files, if there are any
  Drop Recovery...       tables whose records in ibdata1 are deleted
  Analyze                read ibdata1 again
  Close
  ↑↓ move · Enter select · type to filter · Esc back
  1. Si ya carveó archivos .page desde una imagen de disco, establezca Page Set Root en la raíz del conjunto de páginas; las tablas sin archivo de datos toman sus filas de allí.
  2. Browse Tables... muestra para cada tabla si se encontraron sus datos, su .frm y sus columnas:
Browse Tables...
mysql57 › dr57
? Table  › type to filter

❯ audit_log                        Data: OK · .frm: OK · Columns: 11/11
  bulk_rows                        Data: OK · .frm: OK · Columns: 7/7
     ...
  classic_mw_recentchanges         Data: OK · .frm: OK · Columns: 14/14
  ↓ 45 more
  ↑↓ move · Enter select · type to filter · Esc back
  1. Exporte con Export DDL..., Export Data..., Export CSV... o Export Schema Dump... y luego revise el resumen para ver las tablas omitidas.
Export DDL...
✔ MariaDB/MySQL5 Datadir Recovery · Export DDL...
✔ Select Export Directory for DDL · /data/recovery/export57/ddl
✔ Exporting DDL for 61 tables · 00:00
● Export Complete
  ⎿  Active per-table exported: 61 table(s)
     Schema dumps exported: 0 schema(s), 0 table(s)
     /data/recovery/export57/ddl
  Same thing from a script:  dbrecover --mariadb-datadir /data/recovery/mysql57 --dict-export-ddl-dir /data/recovery/export57/ddl

Desde la línea de comandos

bash
dbrecover --mariadb-datadir /data/recovery/mysql57 --list-tables
dbrecover --mariadb-datadir /data/recovery/mysql57 \
  --dict-export-ddl-dir out/ddl \
  --dict-export-sql-dir out/sql \
  --dict-export-csv-dir out/csv \
  --dict-export-dump-dir out/dump
dbrecover --ibdata1 /data/recovery/mysql57/ibdata1 --list-tables

Comprobaciones recomendadas

  1. Confirme que ibdata1 procede del mismo datadir que los archivos .frm e .ibd.
  2. Exporte primero el DDL para verificar los nombres de las tablas y las definiciones de las columnas.
  3. Use CSV para comprobaciones rápidas por muestreo.
  4. Use volcados de esquema cuando quiera una única salida importable por esquema.

Escenario 6: Recuperar tablas o bases de datos eliminadas

Use Drop Recovery cuando se hayan eliminado tablas pero los metadatos aún puedan estar presentes en mysql.ibd, en ibdata1 o en páginas carveadas del diccionario de datos.

En la interfaz de terminal

  1. Elija A table or database was dropped en el menú principal (o Drop Recovery... en Dictionary Mode o en Datadir Recovery).
  2. Responda a las tres preguntas de la antigua Configuration:
    • mysql.ibd / ibdata1 / DD pages: mysql.ibd o un directorio de archivos .page del DD recuperados, para MySQL 8; ibdata1 para MySQL 5.x/MariaDB. También sirve un directorio de datos: el diccionario se busca dentro de él.
    • Datadir (optional): ayuda a localizar los archivos .ibd de las tablas para exportar los datos.
    • Scan output (optional): la raíz de páginas carveadas (o una carpeta con los archivos de tabla que quedan) cuando faltan los archivos de tabla originales.
  3. Se analiza el diccionario y el menú muestra lo que se encontró:
A table or database was dropped
✔ Choose an action · A table or database was dropped
● Drop Recovery
  ⎿  For tables that were dropped while their metadata may still be in mysql.ibd, ibdata1 or carved data dictionary pages.
✔ mysql.ibd / ibdata1 / DD pages · /data/recovery/mysql8-dropped
  Datadir: if available, it helps to locate the table .ibd files and export data.
✔ Datadir (optional) · /data/recovery/mysql8-dropped
  Scan output: the carved page root, for when the original table files are missing.
✔ Scan output (optional) · /data/recovery/pages
✔ Analyzing the dictionary · Found 1 dropped schema(s), 5 dropped table(s) · 00:00
  Same thing from a script:  dbrecover --drop-list --mysql-ibd /data/recovery/mysql8-dropped/mysql.ibd
  Treat dropped-table recovery as best effort: export DDL first; SQL or CSV only where the table pages are still available.

Drop Recovery › mysql.ibd
? Drop Recovery
  Dropped Schemas     1
❯ Dropped Tables      5
  Export Selected...  DDL, SQL and CSV of one table
  Export All...       every dropped table, with schema dumps
  Configuration       Datadir: /data/recovery/mysql8-dropped · Scan output: /data/recovery/pages
  Analyze             read the dictionary again
  Close
  ↑↓ move · Enter select · Esc back
  1. Dropped Schemas y Dropped Tables enumeran los objetos eliminados con sus ID de diccionario:
Dropped Tables
Dropped Tables · rows 1-5 of 5
  Source    ID  Table                             Columns
  ──────  ────  ────────────────────────────────  ───────
❯ MySQL8   229  sys.sys_config
  MySQL8   363  performance_schema.innodb_redo_…
  MySQL8   369  dr80.drop_victim
  MySQL8   371  dr80_dropdb.victim
  MySQL8   428  performance_schema.innodb_redo_…
  Names come from deleted dictionary records; damaged ones may look garbled
  ↑↓ rows · ←→ columns · Enter record · q back
  1. Export Selected... exporta una tabla a ddl/, sql/ y csv/ dentro del directorio elegido; Export All... exporta todas las tablas eliminadas y añade volcados de esquema en dump/. Las tablas cuyas páginas no se encuentran se omiten, y puede consultar los motivos.
Export All...
✔ Drop Recovery · Export All...
✔ Select Export Directory · /data/recovery/drop-all
✔ Recovering dropped tables · 00:00
● Export Complete
  ⎿  Drop schema dumps exported: 2 schema(s), 2 table(s); skipped 3 table(s)
     Drop table exports: DDL: 2 file(s), SQL: 2 file(s), CSV: 2 file(s); skipped 3 table(s)
     /data/recovery/drop-all
  Same thing from a script:  dbrecover --drop-list --mysql-ibd /data/recovery/mysql8-dropped/mysql.ibd --datadir /data/recovery/mysql8-dropped --search-root /data/recovery/pages --drop-export-ddl-dir /data/recovery/drop-all/ddl --drop-export-sql-dir /data/recovery/drop-all/sql --drop-export-csv-dir /data/recovery/drop-all/csv --drop-export-dump-dir /data/recovery/drop-all/dump --complete-insert
! 6 item(s) were skipped or had no data.
? Look at the reasons?  (y/N)

Desde la línea de comandos

bash
dbrecover --drop-list --mysql-ibd /data/recovery/mysql8-dropped/mysql.ibd      # enumerar (muestra los ID)
dbrecover --drop-list --mysql-ibd /data/recovery/mysql8-dropped/mysql.ibd \
  --datadir /data/recovery/mysql8-dropped --search-root /data/recovery/pages \
  --drop-export-ddl-dir out/ddl --drop-export-sql-dir out/sql \
  --drop-export-csv-dir out/csv --drop-export-dump-dir out/dump
dbrecover --drop-list --mysql-ibd /data/recovery/mysql8-dropped/mysql.ibd \
  --search-root /data/recovery/pages --drop-table-id 369 --drop-export-sql-dir out/sql
dbrecover --mariadb-datadir /data/recovery/mysql57 --delete=with \
  --search-root out/pages --dict-export-dump-dir out/dump              # MySQL 5.x / MariaDB

Comprobaciones recomendadas

  1. Considere la recuperación de tablas eliminadas como un mejor esfuerzo: exporte primero el DDL.
  2. Dé preferencia al datadir original cuando aún esté disponible.
  3. Use páginas carveadas solo cuando el archivo de tabla original falte o esté dañado.
  4. Con ibdata1 como origen solo se ofrece Export All....

Escenario 7: Carvear páginas InnoDB desde una imagen de disco

Use Disk Image Scan cuando no tenga archivos .ibd íntegros, pero sí una imagen de disco sin procesar o una imagen de sistema de archivos.

En la interfaz de terminal

  1. Elija The files are gone or damaged e indique la imagen de disco.
  2. Indique un Output Dir vacío con suficiente espacio libre (predeterminado: disk-pages-out). No hay nada más que configurar: el tamaño de página se determina tomando muestras de la imagen, se examina cada sector de 512 bytes y se conservan las páginas que contienen filas.
  3. El escaneo muestra su progreso; Esc lo detiene y conserva las páginas encontradas hasta ese momento.
  4. Después de === Scan Complete ===, continúe con Recover Tables... (Dictionary Mode sobre la salida) o con Drop Recovery... (la salida como raíz de páginas para las tablas eliminadas).
The files are gone or damaged
✔ Choose an action · The files are gone or damaged
● Disk Image Scan
  ⎿  For when there is no clean .ibd file but a raw disk image or file-system image. Keep the original image read-only. The page size is found by sampling the image.
✔ Disk Image · disk.img
✔ Output Dir · /data/recovery/disk-pages-out
  Image   /data/recovery/disk.img (17.6 MB)
  Output  /data/recovery/disk-pages-out
✔ Scanning disk.img · 625 pages · 00:00
● === Scan Complete ===
  ⎿  /data/recovery/disk-pages-out
  Page Size           16384 bytes (detected)
  Bytes scanned       18457088
  Candidates          627
  Pages written       625
  Leaf index written  584
  BLOB pages written  0
  LOB pages written   39
  Errors              0
  Same thing from a script:  dbrecover --disk-scan --disk-image /data/recovery/disk.img --disk-out-dir /data/recovery/disk-pages-out
? Continue with the recovered page set
❯ Recover Tables...  dictionary recovery on the scan output
  Drop Recovery...   use the scan output as page root for dropped tables
  Close
  ↑↓ move · Enter select · Esc back

Desde la línea de comandos

bash
dbrecover --disk-scan --disk-image disk.img --disk-out-dir out/pages
dbrecover --dict out/pages                                  # tablas encontradas en las páginas carveadas
dbrecover --sql --frm orders.frm --out orders.sql out/pages/spaces/space_57

Comprobaciones recomendadas

  1. Escanee hacia un directorio con suficiente espacio libre.
  2. Mantenga la imagen de disco original en modo de solo lectura.
  3. Compruebe el Page Size en el resultado; si la imagen está demasiado dañada para detectarlo, establézcalo en Preferences > Advanced (o con --page-size) y vuelva a escanear.

Escenario 8: Abrir un directorio directamente

Abra cualquier carpeta de archivos .ibd, .MYD o .page mediante The files are available. Se escanea en Dictionary Mode; Browse Tables... lleva a los esquemas, a las tablas y a la vista de tabla con Data, Columns, DDL, SDI e Info. Para un archivo de MySQL 5.x cuya estructura no se encontró, use Associate .frm File (MySQL 5.x)... o Associate DDL (CREATE TABLE)... en su vista de tabla y luego exporte desde allí. Esc vuelve a las exportaciones por lotes.

Escenario 9: Configurar preferencias de exportación, vista previa e idioma

Elija Preferences... en el menú principal. Los cambios se aplican de inmediato y se guardan en ~/.dbrecover-mysql/tui.properties (el mismo archivo que en 2610).

Preferences...
✔ Choose an action · Preferences...
? Preferences
❯ Export     Row limit 0 = no limit
  Data View  Default row limit 1000
  Language   System language
  Advanced   InnoDB page size Auto-detect
  Terminal   Symbols auto
  Close
  ↑↓ move · Enter select · Esc back
Preferences › Export
✔ Preferences · Export
  These settings apply when using Export Data or Export CSV.

Preferences › Export
? Export
❯ Row limit                                0 = no limit
  Include column names in INSERT           ● on
  Use REPLACE INTO instead of INSERT INTO  ○ off
  Include deleted records                  ○ off
  OK
  ↑↓ move · Enter select · Esc back
CategoríaOpciónPredeterminado
ExportLímite de filas (0 = sin límite); incluir los nombres de columna en INSERT; usar REPLACE INTO en lugar de INSERT INTO; incluir los registros eliminados0; activado; desactivado; desactivado
Data ViewLímite de filas predeterminado; incluir los registros eliminados1000; desactivado
LanguageIdioma del sistema, inglés, chino (simplificado), japonés, españolIdioma del sistema
AdvancedTamaño de página de InnoDB: detección automática, de 4K a 64KDetección automática
TerminalSímbolos: auto, rich, safe, asciiauto

Deje el tamaño de página en Auto-detect; establezca uno solo cuando un archivo dañado se lea con un tamaño incorrecto. Los equivalentes en la línea de comandos son --limit, --complete-insert, --replace, --delete=with y --page-size; el idioma también puede elegirse al iniciar con --lang.

Escenario 10: Verificar y usar los archivos exportados

Verifique siempre los resultados exportados antes de importarlos en producción.

Procedimiento

  1. Abra el DDL exportado.
  2. Confirme el nombre del esquema, el nombre de la tabla, el motor, el juego de caracteres, las columnas y los índices.
  3. Abra el SQL o el CSV exportado.
  4. Compruebe el encabezado, el número de filas, los valores NULL, los valores binarios, las fechas y la codificación del texto (toda la salida está en UTF-8).
  5. Importe primero en una base de datos temporal.
  6. Compare los recuentos de filas (Count Rows o dbrecover --count) y algunas filas representativas.
  7. Repita la exportación con otro límite de filas o con Include deleted si la primera pasada no contenía las filas que necesita.

Solución de problemas

SíntomaQué comprobar
No aparece ninguna tabla bajo un archivo .ibdConfirme que el archivo es de MySQL 8 con SDI, o asocie un .frm/DDL correspondiente para MySQL 5.x (escenario 4). En la línea de comandos el error es no SDI data found by scanning all pages; añada --frm o --table-ddl-file.
Data muestra columnas pero ninguna filaCompruebe el tamaño de página en Info, la estructura de la tabla y si el archivo de tabla contiene realmente páginas del índice agrupado.
La exportación es demasiado grandeEstablezca un límite de filas en Preferences (o con --limit) y vuelva a ejecutar la exportación.
Se encuentra el DDL de la tabla eliminada, pero faltan los datosProporcione el datadir original o una raíz de páginas carveadas para que puedan localizarse las páginas de la tabla.
El escaneo de disco encuentra pocas páginasCompruebe el tamaño de página detectado en el resultado del escaneo; fuércelo con Preferences > Advanced o --page-size si la imagen está muy dañada.
Los marcos aparecen desalineados, o se ven recuadros / signos de interrogaciónInicie con --glyphs ascii (o --glyphs safe en PuTTY y consolas antiguas), o establezca los símbolos en Preferences > Terminal.
El texto en chino aparece ilegibleLa terminal no está en UTF-8; use --lang en o cambie la terminal a UTF-8.
Permission denied en LinuxRestablezca el permiso de ejecución: chmod +x dbrecover dbrecover-tui.sh.
Una acción falló con un error de una líneaEl error completo está en log_dbrecover.txt en el directorio de trabajo.

Referencia de la línea de comandos

La línea de comandos es el mismo programa sin los menús, para scripts y trabajos por lotes. Los resultados van a la salida estándar o a --out; las líneas de progreso y de registro van a la salida de error estándar y a log_dbrecover.txt. Las opciones no cambian respecto a la versión 2610: un script que llamaba a java -jar dbrecoverj-2610-all.jar solo necesita usar dbrecover en su lugar. dbrecover --help enumera todas las opciones.

TareaOpciones
Estructura de la tabla, filas, CSV, recuento--ddl, --sql, --csv, --count, --out FILE, --limit=N, --complete-insert, --replace, --delete=with|only
Estructura de MySQL 5.x / MariaDB--frm FILE, --table-ddl-file FILE, --table-ddl SQL
Metadatos de MySQL 8--print-sdi, --select-schema, --select-table, --dd-extra-ddl
Datadir de MySQL 8 (Dictionary Mode)--dict, --dict-export-ddl-dir, --dict-export-sql-dir, --dict-export-csv-dir, --dict-export-dump-dir
Datadir de MySQL 5.x / MariaDB--mariadb-datadir DIR, --ibdata1 FILE, --list-tables, --search-root DIR
Tablas eliminadas (MySQL 8)--drop-list, --mysql-ibd, --datadir, --search-root, --drop-table-id, --drop-export-ddl-dir, --drop-export-sql-dir, --drop-export-csv-dir, --drop-export-dump-dir
Páginas e imágenes de disco--scan --scan-out-dir DIR, --disk-scan --disk-image FILE --disk-out-dir DIR, --disk-step, --index-id, --detect-page-size, --page-size

Códigos de salida: 0 éxito; 2 entrada no válida, archivo inexistente, error de análisis o error en la línea de comandos (con varias entradas, la ejecución continúa y devuelve 2 si alguna de ellas falló).

Modo plain

Cuando la entrada o la salida no es una terminal, o con --plain, la interfaz de terminal se convierte en un diálogo numerado línea por línea: escriba el número y pulse Enter; 0 vuelve atrás. Por ejemplo, abrir una tabla, contar sus filas (6), volver atrás (0) y salir (5):

printf '%s\n' 6 0 5 | dbrecover --tui --plain db1/ibd_test_comprehensive.ibd
DBRecover for MySQL Version 2611
English | Log: log_dbrecover.txt
  Plain mode: this session has no interactive terminal. Menus are numbered:
  type the number, then Enter.

Reading ibd_test_comprehensive.ibd ...
+ Reading ibd_test_comprehensive.ibd (00:00)
* db1.ibd_test_comprehensive
  `-  /data/recovery/db1/ibd_test_comprehensive.ibd

db1.ibd_test_comprehensive
Tab or action
   1) Data  - table data (rows) | Rows: 1,000, Include deleted: off
   2) Columns  - column definitions
   3) DDL  - table DDL (CREATE TABLE)
   4) SDI  - the JSON MySQL 8 stores in the tablespace
   5) Info  - file and recovery metadata
   6) Count Rows  - live and deleted
   7) Export DDL...  - save the CREATE TABLE statement
   8) Export Data...  - SQL file with structure and rows, ready to import
   9) Export CSV...  - CSV with a header line
  10) Rows / Include deleted  - change the Data options, then reload
  11) Associate .frm File (MySQL 5.x)...  - for a MySQL 5.x / MariaDB file without SDI
  12) Associate DDL (CREATE TABLE)...  - a file that holds the CREATE TABLE statement
  13) Close
   0) Back
Enter a number [1]: Counting rows of db1.ibd_test_comprehensive ...
+ Counting rows of db1.ibd_test_comprehensive - 100 rows (00:00)
* Row Count
  `-  Table: db1.ibd_test_comprehensive
      Rows: 100
      Deleted rows: 7
  Enable "Include deleted" to look at the deleted records that can still be
  read.
...
Enter a number [1]:   Bye. Exported files stay where you put them; the log is log_dbrecover.txt.