Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL ibd文件转换为SQL

MySQL基于ibd2sql实现ibd文件批量转换为SQL的完整指南

作者:喵了几个咪

本文介绍了使用ibd2sql工具批量处理InnoDB独立表空间文件.ibd恢复表结构和数据的方法,提供了Windows PowerShell脚本和Linux Shell自动化脚本,实现一键恢复,对于手动导入和常见问题也给出了解决方案,需要的朋友可以参考下

在 MySQL 数据库运维、数据恢复、迁移场景中,仅存 ibd 文件、丢失表结构 / 备份 是最棘手的问题之一。InnoDB 的独立表空间文件 .ibd 存储了表的全部数据和结构,但无法直接读取使用。

基于开源工具 ibd2sql,我们可以离线解析 ibd 文件,直接导出完整的 CREATE TABLE(DDL)和 INSERT(DML)语句。本文整合** Windows PowerShell 批量脚本** + Linux Shell 自动转换 + 导入脚本,实现一键批量处理,彻底解决 ibd 恢复难题。

一、核心概念:ibd 文件到底是什么?

ibd2sql 是目前最易用、跨平台、无依赖的 ibd 解析工具,支持:

二、环境准备(1 分钟完成)

1. 下载工具

git clone https://github.com/ddcw/ibd2sql.git
cd ibd2sql

2. 检查 Python

# Windows
python --version

# Linux
python3 --version

只要是 Python 3.6+ 即可,无需安装任何依赖库。

3. 放入 ibd 文件

把需要恢复的 .ibd 文件复制到 ibd2sql 目录下(或子目录)。

三、基础命令(单文件转换)

你可以先手动测试,确保工具正常工作:

# 导出 DDL + 数据 到 SQL 文件
python main.py test.ibd --ddl --sql > test.sql

常用参数:

四、Windows 批量转换脚本(PowerShell)

适合 Windows 环境,批量扫描所有 ibd自动生成 SQL自动清理空文件,输出统一保存到 output_sql 目录。

完整脚本

chcp 65001 | Out-Null

# 创建输出目录
mkdir -Force output_sql | Out-Null

# 获取当前目录下所有 ibd 文件(你可以改成自己的路径)
$ibdFiles = Get-ChildItem -Path . -Recurse -Filter *.ibd

# 循环批量转换
foreach ($file in $ibdFiles) {
    $name = $file.BaseName
    $output = "output_sql\$name.sql"
    
    Write-Host "`nProcessing: $($file.Name)" -ForegroundColor Cyan

    # 正确获取 DDL + 保留格式换行
    $ddl = python -X utf8 main.py $file.FullName --ddl 2>&1
    $data = python -X utf8 main.py $file.FullName --sql 2>&1

    # 合并,保留原始格式
    $fullSql = (@($ddl) + @("") + @($data)) -join "`r`n"

    # 写入 UTF8 无 BOM
    [System.IO.File]::WriteAllText($output, $fullSql, [System.Text.Encoding]::UTF8)

    # 删除空文件
    if (Test-Path $output) {
        if ((Get-Item $output).Length -eq 0) {
            Remove-Item $output -Force
        }
    }
}

Write-Host "`nAll done! Files saved in output_sql folder" -ForegroundColor Green

使用方法

  1. 保存为 ibd2sql_batch.ps1
  2. 放在 ibd2sql 工具目录
  3. 右键 → 使用 PowerShell 运行
  4. 所有 SQL 文件自动生成在 output_sql 文件夹

脚本优势

五、Linux 自动转换 + 直接导入 MySQL 脚本

Linux 环境最强方案:扫描 ibd生成 SQL自动导入数据库,全程无需人工干预。

完整脚本

#!/bin/bash

# ===================== MySQL 连接信息 =====================
MYSQL_HOST="127.0.0.1"
MYSQL_PORT="3306"
MYSQL_USER="root"
MYSQL_PASS="你的密码"
# =========================================================

OUTPUT_DIR="./output_sql"
mkdir -p "$OUTPUT_DIR"

echo "====================================="
echo "  递归扫描 ibd 文件 → 自动转换 + 导入"
echo "====================================="

# 递归查找所有子目录下的 ibd
find . -type f -name "*.ibd" | while read -r ibd_file; do
    filename=$(basename "$ibd_file" .ibd)
    output_sql="$OUTPUT_DIR/$filename.sql"

    echo "Processing: $ibd_file"

    # 导出 DDL + 数据(会自动生成 CREATE DATABASE + USE)
    python3 main.py "$ibd_file" --ddl --sql > "$output_sql"

    # 跳过空文件
    if [ ! -s "$output_sql" ]; then
        rm -f "$output_sql"
        continue
    fi

    # 直接导入,不指定数据库,SQL 内部自动建库
    mysql -h"$MYSQL_HOST" -P"$MYSQL_PORT" -u"$MYSQL_USER" -p"$MYSQL_PASS" < "$output_sql"
    echo "Imported: $output_sql"
done

echo -e "\n🎉 All tasks completed!"

使用方法

  1. 保存为 ibd2sql_auto_import.sh
  2. 修改 MySQL 账号密码
  3. 赋予执行权限:chmod +x ibd2sql_auto_import.sh
  4. 运行:./ibd2sql_auto_import.sh

脚本优势

六、生成后的 SQL 文件如何手动导入?

如果你不想自动导入,可手动执行:

1. 命令行导入

mysql -uroot -p 数据库名 < output_sql/test.sql

2. 客户端导入

Navicat / DBeaver / SQLyog:

七、常见问题与解决方案

1. 中文乱码

2. 解析失败

3. 数据丢失

八、总结

ibd2sql 是 MySQL 数据恢复的终极工具,配合本文提供的双平台脚本:

无论你是误删库、系统崩溃、备份丢失,只要有 ibd 文件,就能完整恢复表结构和全部数据。

以上就是MySQL基于ibd2sql实现ibd文件批量转换为SQL的完整指南的详细内容,更多关于MySQL ibd文件转换为SQL的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文