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

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

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

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

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

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

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

ibd2sql 是目前最易用、跨平臺(tái)、無(wú)依賴的 ibd 解析工具,支持:

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

二、環(huán)境準(zhǔn)備(1 分鐘完成)

1. 下載工具

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

2. 檢查 Python

# Windows
python --version

# Linux
python3 --version

只要是 Python 3.6+ 即可,無(wú)需安裝任何依賴庫(kù)。

3. 放入 ibd 文件

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

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

你可以先手動(dòng)測(cè)試,確保工具正常工作:

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

常用參數(shù):

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

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

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

完整腳本

chcp 65001 | Out-Null

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

# 獲取當(dāng)前目錄下所有 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"

    # 寫(xiě)入 UTF8 無(wú) 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 運(yùn)行
  4. 所有 SQL 文件自動(dòng)生成在 output_sql 文件夾

腳本優(yōu)勢(shì)

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

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

Linux 環(huán)境最強(qiáng)方案:掃描 ibd生成 SQL自動(dòng)導(dǎo)入數(shù)據(jù)庫(kù),全程無(wú)需人工干預(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 文件 → 自動(dòng)轉(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ù)(會(huì)自動(dòng)生成 CREATE DATABASE + USE)
    python3 main.py "$ibd_file" --ddl --sql > "$output_sql"

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

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

腳本優(yōu)勢(shì)

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

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

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

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

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

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

Navicat / DBeaver / SQLyog:

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

七、常見(jiàn)問(wèn)題與解決方案

1. 中文亂碼

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

2. 解析失敗

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

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

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

八、總結(jié)

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

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

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

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

相關(guān)文章

  • 關(guān)于case when語(yǔ)句的報(bào)錯(cuò)問(wèn)題詳解

    關(guān)于case when語(yǔ)句的報(bào)錯(cuò)問(wèn)題詳解

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

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

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

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

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

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

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

    C3P0連接池+MySQL的配置及wait_timeout問(wèn)題的解決方法

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

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

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

    一文了解MySQL二級(jí)索引的查詢過(guò)程

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

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

    下面小編就為大家?guī)?lái)一篇MySQL刪除表的時(shí)候忽略外鍵約束的簡(jiǎn)單實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • 淺談Mysql8和mysql5.7的區(qū)別

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

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

    MySQL中正則表達(dá)式用法示例詳解

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

最新評(píng)論

徐州市| 垦利县| 略阳县| 福州市| 象山县| 乌拉特前旗| 辰溪县| 家居| 怀化市| 神池县| 南雄市| 获嘉县| 阳原县| 衡阳市| 墨竹工卡县| 洪泽县| 贺兰县| 韶关市| 鄂温| 光山县| 娄烦县| 界首市| 贺兰县| 北宁市| 桦川县| 余姚市| 东山县| 北安市| 克山县| 时尚| 滦平县| 讷河市| 垣曲县| 武强县| 吉木乃县| 温州市| 时尚| 高陵县| 内江市| 普定县| 海阳市|