最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL基于ibd2sql實現(xiàn)ibd文件批量轉(zhuǎn)換為SQL的完整指南

 更新時間:2026年04月20日 08:49:09   作者:喵了幾個咪  
本文介紹了使用ibd2sql工具批量處理InnoDB獨立表空間文件.ibd恢復(fù)表結(jié)構(gòu)和數(shù)據(jù)的方法,提供了Windows PowerShell腳本和Linux Shell自動化腳本,實現(xiàn)一鍵恢復(fù),對于手動導(dǎo)入和常見問題也給出了解決方案,需要的朋友可以參考下

在 MySQL 數(shù)據(jù)庫運維、數(shù)據(jù)恢復(fù)、遷移場景中,僅存 ibd 文件、丟失表結(jié)構(gòu) / 備份 是最棘手的問題之一。InnoDB 的獨立表空間文件 .ibd 存儲了表的全部數(shù)據(jù)和結(jié)構(gòu),但無法直接讀取使用。

基于開源工具 ibd2sql,我們可以離線解析 ibd 文件,直接導(dǎo)出完整的 CREATE TABLE(DDL)和 INSERT(DML)語句。本文整合** Windows PowerShell 批量腳本** + Linux Shell 自動轉(zhuǎn)換 + 導(dǎo)入腳本,實現(xiàn)一鍵批量處理,徹底解決 ibd 恢復(fù)難題。

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

  • .ibd = InnoDB Data File,MySQL InnoDB 獨立表空間文件
  • 開啟 innodb_file_per_table=ON(默認開啟)后,一張表對應(yīng)一個 ibd 文件
  • 包含:表結(jié)構(gòu)、數(shù)據(jù)行、索引、約束、元數(shù)據(jù)(MySQL 8.0+)
  • 無法直接用文本編輯器打開,必須專用工具解析

ibd2sql 是目前最易用、跨平臺、無依賴的 ibd 解析工具,支持:

  • ? 導(dǎo)出表結(jié)構(gòu)(DDL)
  • ? 導(dǎo)出全部數(shù)據(jù)(SQL)
  • ? 恢復(fù)誤刪數(shù)據(jù)
  • ? 支持 MySQL 5.6 ~ 8.4+
  • ? Windows / Linux 通用
  • ? 純 Python 運行,無需編譯

二、環(huán)境準備(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 文件

把需要恢復(fù)的 .ibd 文件復(fù)制到 ibd2sql 目錄下(或子目錄)。

三、基礎(chǔ)命令(單文件轉(zhuǎn)換)

你可以先手動測試,確保工具正常工作:

# 導(dǎo)出 DDL + 數(shù)據(jù) 到 SQL 文件
python main.py test.ibd --ddl --sql > test.sql

常用參數(shù):

  • --ddl:導(dǎo)出建表語句
  • --sql:導(dǎo)出數(shù)據(jù) insert 語句
  • --delete:導(dǎo)出已刪除的數(shù)據(jù)(誤刪恢復(fù))
  • --mysql5:兼容 MySQL 5.7 及更早版本

四、Windows 批量轉(zhuǎn)換腳本(PowerShell)

適合 Windows 環(huán)境,批量掃描所有 ibd自動生成 SQL自動清理空文件,輸出統(tǒng)一保存到 output_sql 目錄。

完整腳本

chcp 65001 | Out-Null

# 創(chuàng)建輸出目錄
mkdir -Force output_sql | Out-Null

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

# 循環(huán)批量轉(zhuǎn)換
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 文件夾

腳本優(yōu)勢

  • 遞歸掃描子目錄所有 ibd
  • 自動 UTF-8 編碼,無中文亂碼
  • 自動合并 DDL + 數(shù)據(jù)
  • 自動刪除解析失敗的空文件
  • 兼容所有 Windows 版本

五、Linux 自動轉(zhuǎn)換 + 直接導(dǎo)入 MySQL 腳本

Linux 環(huán)境最強方案:掃描 ibd生成 SQL自動導(dǎo)入數(shù)據(jù)庫,全程無需人工干預(yù)。

完整腳本

#!/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 文件 → 自動轉(zhuǎn)換 + 導(dǎo)入"
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"

    # 導(dǎo)出 DDL + 數(shù)據(jù)(會自動生成 CREATE DATABASE + USE)
    python3 main.py "$ibd_file" --ddl --sql > "$output_sql"

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

    # 直接導(dǎo)入,不指定數(shù)據(jù)庫,SQL 內(nèi)部自動建庫
    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. 賦予執(zhí)行權(quán)限:chmod +x ibd2sql_auto_import.sh
  4. 運行:./ibd2sql_auto_import.sh

腳本優(yōu)勢

  • 遞歸掃描全目錄 ibd
  • 自動生成 SQL 并保存?zhèn)浞?/li>
  • 自動跳過解析失敗文件
  • 自動導(dǎo)入 MySQL,無需手動執(zhí)行
  • 自動創(chuàng)建原數(shù)據(jù)庫,表結(jié)構(gòu)完整恢復(fù)

六、生成后的 SQL 文件如何手動導(dǎo)入?

如果你不想自動導(dǎo)入,可手動執(zhí)行:

1. 命令行導(dǎo)入

mysql -uroot -p 數(shù)據(jù)庫名 < output_sql/test.sql

2. 客戶端導(dǎo)入

Navicat / DBeaver / SQLyog:

  • 連接 MySQL
  • 新建數(shù)據(jù)庫
  • 運行 SQL 文件 → 選擇生成的 .sql

七、常見問題與解決方案

1. 中文亂碼

  • Windows 腳本已強制 UTF-8
  • 導(dǎo)入時確保 MySQL 連接字符集為 utf8mb4

2. 解析失敗

  • ibd 文件損壞:嘗試加 --force
  • MySQL 5.7 加 --mysql5
  • 文件權(quán)限不足:管理員運行

3. 數(shù)據(jù)丟失

  • 普通恢復(fù)不加 --delete
  • 誤刪數(shù)據(jù)恢復(fù)使用:python main.py xx.ibd --sql --delete

八、總結(jié)

ibd2sql 是 MySQL 數(shù)據(jù)恢復(fù)的終極工具,配合本文提供的雙平臺腳本:

  • Windows:批量生成 SQL,安全、標準化導(dǎo)出
  • Linux:一鍵轉(zhuǎn)換 + 自動導(dǎo)入,適合服務(wù)器應(yīng)急恢復(fù)

無論你是誤刪庫、系統(tǒng)崩潰、備份丟失,只要有 ibd 文件,就能完整恢復(fù)表結(jié)構(gòu)和全部數(shù)據(jù)。

以上就是MySQL基于ibd2sql實現(xiàn)ibd文件批量轉(zhuǎn)換為SQL的完整指南的詳細內(nèi)容,更多關(guān)于MySQL ibd文件轉(zhuǎn)換為SQL的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 關(guān)于case when語句的報錯問題詳解

    關(guān)于case when語句的報錯問題詳解

    SQL CASE 表達式是一種通用的條件表達式,類似于其它語言中的 if/else 語句,下面這篇文章主要給大家介紹了關(guān)于case when語句的報錯問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-08-08
  • Mysql數(shù)據(jù)庫面試必備之三大log介紹

    Mysql數(shù)據(jù)庫面試必備之三大log介紹

    大家好,本篇文章主要講的是Mysql數(shù)據(jù)庫面試必備之三大log介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2021-12-12
  • MySQL嵌套事務(wù)所遇到的問題

    MySQL嵌套事務(wù)所遇到的問題

    這篇文章主要介紹了MySQL嵌套事務(wù)所遇到的問題的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • SQL中count(1)、count(*)?與?count(列名)的區(qū)別詳細解釋

    SQL中count(1)、count(*)?與?count(列名)的區(qū)別詳細解釋

    count(1)和count(*)是SQL中用于統(tǒng)計行數(shù)的兩種常見方式,它們的區(qū)別在于統(tǒng)計的對象不同,下面這篇文章主要給大家介紹了關(guān)于SQL中count(1)、count(*)?與?count(列名)區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • C3P0連接池+MySQL的配置及wait_timeout問題的解決方法

    C3P0連接池+MySQL的配置及wait_timeout問題的解決方法

    這篇文章主要介紹了C3P0連接池+MySQL的配置及wait_timeout問題的解決方法,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • MySQL通過login_path登錄數(shù)據(jù)庫的實現(xiàn)示例

    MySQL通過login_path登錄數(shù)據(jù)庫的實現(xiàn)示例

    login_path是MySQL5.6開始支持的新特性,本文主要介紹了MySQL通過login_path登錄數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • 一文了解MySQL二級索引的查詢過程

    一文了解MySQL二級索引的查詢過程

    索引是一種用于快速查詢行的數(shù)據(jù)結(jié)構(gòu),就像一本書的目錄就是一個索引,下面這篇文章主要給大家介紹了關(guān)于MySQL二級索引查詢過程的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • MySQL刪除表的時候忽略外鍵約束的簡單實現(xiàn)

    MySQL刪除表的時候忽略外鍵約束的簡單實現(xiàn)

    下面小編就為大家?guī)硪黄狹ySQL刪除表的時候忽略外鍵約束的簡單實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 淺談Mysql8和mysql5.7的區(qū)別

    淺談Mysql8和mysql5.7的區(qū)別

    本文主要介紹了Mysql8和mysql5.7的區(qū)別,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • MySQL中正則表達式用法示例詳解

    MySQL中正則表達式用法示例詳解

    MySQL 中正則表達式通過 REGEXP 或 RLIKE 操作符實現(xiàn)(兩者等價),用于在 WHERE 子句中進行復(fù)雜的字符串模式匹配,這篇文章主要介紹了MySQL中正則表達式用法,需要的朋友可以參考下
    2025-06-06

最新評論

惠州市| 铜川市| 安溪县| 泰安市| 临西县| 阳江市| 无为县| 卓资县| 上饶县| 岐山县| 和林格尔县| 澎湖县| 香河县| 花垣县| 瑞丽市| 永吉县| 通化县| 瑞昌市| 潮州市| 休宁县| 陕西省| 光泽县| 天峨县| 汪清县| 阿巴嘎旗| 山西省| 台南市| 荃湾区| 巴林左旗| 武功县| 青川县| 茂名市| 嵊泗县| 探索| 眉山市| 荥经县| 武邑县| 岐山县| 邳州市| 石屏县| 榆社县|