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
- 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.zipcontienedbrecover.exepara Windows 10 / Server 2016 o posterior (64 bits) ydbrecoverpara 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
.ibdde 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
.ibdde la tabla más el archivo.frmcorrespondiente. - Recuperación de un datadir MySQL 5.x o MariaDB:
ibdata1, los directorios de esquema, los archivos.frmy los archivos de datos de las tablas. - Recuperación de tablas eliminadas:
mysql.ibd,ibdata1o 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:
| Sistema | Programa | Lanzador de la interfaz de terminal |
|---|---|---|
| Windows 10 / Server 2016 o posterior, 64 bits | dbrecover.exe | dbrecover-tui.bat |
| Linux, cualquier distribución x86_64 (binario estático) | dbrecover | dbrecover-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.
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 comandosEjecutar 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 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 backCon --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 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 backTeclas: ↑ ↓ 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 inicio | Efecto |
|---|---|
[path] | Archivo o directorio que se abre de inmediato |
--lang en|zh|ja|es | Idioma de la interfaz (predeterminado: el de las preferencias y, si no, la configuración regional del sistema) |
--plain | Menús numerados sin colores ni redibujado; se activa automáticamente cuando la entrada o la salida se redirige |
--no-color | Sin colores (la variable de entorno NO_COLOR también funciona) |
--glyphs rich|safe|ascii | Juego 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ú principal | Adónde lleva |
|---|---|
The files are available | Solicita una ruta bajo el título Open... y la abre donde corresponde (vea la tabla siguiente). |
A table or database was dropped | Drop Recovery: solicita mysql.ibd / ibdata1 / DD pages, Datadir (optional) y Scan output (optional), y luego analiza (escenario 6). |
The files are gone or damaged | Disk 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). |
✔ Choose an action · The files are available
? Open... › /data/recovery/db1/ibd_test_comprehensive.ibd
Enter confirm · Tab complete · Esc back| Lo que abre | Adónde va |
|---|---|
Un archivo .ibd, .MYD o .page, o un .frm | La vista de tabla (escenarios 2 y 4) |
Un directorio con mysql.ibd, otra carpeta de archivos de tabla o páginas carveadas | Dictionary Mode, escaneado de inmediato (escenarios 3 y 8) |
Un directorio con ibdata1 y sin mysql.ibd, o el propio ibdata1 | MariaDB/MySQL5 Datadir Recovery, analizado de inmediato (escenario 5) |
| Cualquier otro archivo | Se 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
- Elija
The files are availabley escriba la ruta del archivo.ibd(o inicie condbrecover --tui orders.ibd). - Se abre la vista de tabla. Sus cinco primeros elementos son las antiguas pestañas
Data,Columns,DDL,SDIeInfo; los demás son las acciones de la 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- Data permite recorrer las filas:
↑↓,PgUp/PgDndesplazan,←→mueven las columnas,Entermuestra un registro completo yqvuelve atrás.
✔ 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- 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.
✔ 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- DDL muestra el
CREATE TABLEgenerado. 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. - Columns enumera nombres, tipos, atributos e índices; revíselos antes de exportar los datos.
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- 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 · 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✔ 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
Export DDL...guarda la sentenciaCREATE TABLE(predeterminado:./export/<table>_ddl.sql).Export Data...escribe un archivo SQL importable con la estructura y las filas (predeterminado:./export/<table>.sql).Export CSV...escribe un CSV con una línea de encabezado (predeterminado:./export/<table>.csv).- Pulse
Enterpara 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;Escdetiene la exportación. - 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... · /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.csvDesde la línea de comandos
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 SDIEscenario 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
- Elija
The files are availablee indique el datadir (o inicie condbrecover --tui /data/recovery/mysql8). Un directorio conmysql.ibdse reconoce como datadir de MySQL 8 y se escanea de inmediato. - El menú de Dictionary Mode tiene los botones del antiguo cuadro de diálogo:
● 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 backBrowse Tables...enumera los esquemas y luego sus tablas (escriba para filtrar), y abre la vista de tabla del escenario 2.
mysql8
? Schema
❯ dr80 59 tables
dr80_dropdb 1 table
mysql 68 tables
↑↓ move · Enter select · Esc backmysql8 › 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 backExport All DDL...,Export All Data...,Export All CSV...yExport 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).Export Completemuestra los totales; si se omitieron tablas, puede consultar los motivos.Other DDL objectsmuestra las vistas, rutinas, disparadores y eventos almacenados enmysql.ibd.
✔ 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/mysql8Desde la línea de comandos
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.ibdComprobaciones recomendadas
- Exporte primero el DDL.
- Revise algunas tablas grandes y pequeñas.
- Exporte un lote pequeño con un límite de filas antes de exportar todos los datos de un datadir grande.
- Use
Preferencespara 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
- Cuando el
.frmestá junto al.ibdcon el mismo nombre, basta con abrir el.ibd: el.frmse usa automáticamente. - 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)...:
✔ 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- Selecciónelo e indique la ruta del
.frmcorrespondiente.Associate DDL (CREATE TABLE)...acepta en su lugar un archivo con la sentencia.
✔ 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
- Revise
DDLyColumns. - Obtenga una vista previa de las filas en
Datacon un límite de filas pequeño. - Exporte el DDL y, cuando la vista previa sea correcta, el SQL o el CSV.
- Si los valores aparecen desplazados a columnas incorrectas, verifique que el
.frmprocede exactamente de la misma definición de tabla.
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 .frmEscenario 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
- Elija
The files are availablee indique el datadir (un directorio conibdata1y sinmysql.ibd), o el propioibdata1. - La interfaz analiza
ibdata1de inmediato e informa de las tablas encontradas, con el número de archivos.ibdy.frmque faltan:
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- Si ya carveó archivos
.pagedesde una imagen de disco, establezcaPage Set Rooten la raíz del conjunto de páginas; las tablas sin archivo de datos toman sus filas de allí. Browse Tables...muestra para cada tabla si se encontraron sus datos, su.frmy sus columnas:
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- Exporte con
Export DDL...,Export Data...,Export CSV...oExport Schema Dump...y luego revise el resumen para ver las tablas omitidas.
✔ 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/ddlDesde la línea de comandos
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-tablesComprobaciones recomendadas
- Confirme que
ibdata1procede del mismo datadir que los archivos.frme.ibd. - Exporte primero el DDL para verificar los nombres de las tablas y las definiciones de las columnas.
- Use CSV para comprobaciones rápidas por muestreo.
- 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
- Elija
A table or database was droppeden el menú principal (oDrop Recovery...en Dictionary Mode o en Datadir Recovery). - Responda a las tres preguntas de la antigua
Configuration:mysql.ibd / ibdata1 / DD pages:mysql.ibdo un directorio de archivos.pagedel DD recuperados, para MySQL 8;ibdata1para 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.ibdde 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.
- Se analiza el diccionario y el menú muestra lo que se encontró:
✔ 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 backDropped SchemasyDropped Tablesenumeran los objetos eliminados con sus ID de diccionario:
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 backExport Selected...exporta una tabla addl/,sql/ycsv/dentro del directorio elegido;Export All...exporta todas las tablas eliminadas y añade volcados de esquema endump/. Las tablas cuyas páginas no se encuentran se omiten, y puede consultar los motivos.
✔ 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
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 / MariaDBComprobaciones recomendadas
- Considere la recuperación de tablas eliminadas como un mejor esfuerzo: exporte primero el DDL.
- Dé preferencia al datadir original cuando aún esté disponible.
- Use páginas carveadas solo cuando el archivo de tabla original falte o esté dañado.
- Con
ibdata1como origen solo se ofreceExport 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
- Elija
The files are gone or damagede indique la imagen de disco. - Indique un
Output Dirvací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. - El escaneo muestra su progreso;
Esclo detiene y conserva las páginas encontradas hasta ese momento. - Después de
=== Scan Complete ===, continúe conRecover Tables...(Dictionary Mode sobre la salida) o conDrop Recovery...(la salida como raíz de páginas para las tablas eliminadas).
✔ 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 backDesde la línea de comandos
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_57Comprobaciones recomendadas
- Escanee hacia un directorio con suficiente espacio libre.
- Mantenga la imagen de disco original en modo de solo lectura.
- Compruebe el
Page Sizeen el resultado; si la imagen está demasiado dañada para detectarlo, establézcalo enPreferences > 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).
✔ 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
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ía | Opción | Predeterminado |
|---|---|---|
| Export | Lí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 eliminados | 0; activado; desactivado; desactivado |
| Data View | Límite de filas predeterminado; incluir los registros eliminados | 1000; desactivado |
| Language | Idioma del sistema, inglés, chino (simplificado), japonés, español | Idioma del sistema |
| Advanced | Tamaño de página de InnoDB: detección automática, de 4K a 64K | Detección automática |
| Terminal | Símbolos: auto, rich, safe, ascii | auto |
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
- Abra el DDL exportado.
- Confirme el nombre del esquema, el nombre de la tabla, el motor, el juego de caracteres, las columnas y los índices.
- Abra el SQL o el CSV exportado.
- 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).
- Importe primero en una base de datos temporal.
- Compare los recuentos de filas (
Count Rowsodbrecover --count) y algunas filas representativas. - Repita la exportación con otro límite de filas o con
Include deletedsi la primera pasada no contenía las filas que necesita.
Solución de problemas
| Síntoma | Qué comprobar |
|---|---|
No aparece ninguna tabla bajo un archivo .ibd | Confirme 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 fila | Compruebe 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 grande | Establezca 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 datos | Proporcione 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áginas | Compruebe 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ón | Inicie con --glyphs ascii (o --glyphs safe en PuTTY y consolas antiguas), o establezca los símbolos en Preferences > Terminal. |
| El texto en chino aparece ilegible | La terminal no está en UTF-8; use --lang en o cambie la terminal a UTF-8. |
Permission denied en Linux | Restablezca el permiso de ejecución: chmod +x dbrecover dbrecover-tui.sh. |
| Una acción falló con un error de una línea | El 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.
| Tarea | Opciones |
|---|---|
| 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):
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.