首頁 > 資料庫 > mysql教程 > 如何將大型 MySQL 轉儲拆分為較小的檔案?

如何將大型 MySQL 轉儲拆分為較小的檔案?

DDD
發布: 2024-11-24 22:39:11
原創
268 人瀏覽過

How to Split a Large MySQL Dump into Smaller Files?

將大型mysqldump 輸出拆分為較小的檔案

有必要將表從一個資料庫傳輸到另一個資料庫,但mysqldump的轉儲輸出是對於某些上傳限制來說通常太大。本文探討了一個巧妙的解決方案,將龐大的 mysqldump 輸出拆分為可管理的較小檔案。

shell 腳本建議的一種潛在方法是將轉儲拆分為每個表的單獨檔案。這可以使用 csplit 命令並指定表結構標記作為分割點來實現。

考慮使用此技術的 bash 腳本:

#!/bin/bash

####
# Split MySQL dump SQL file into one file per table
# based on https://gist.github.com/jasny/1608062
####

#adjust this to your case:
START="/-- Table structure for table/"
# or 
#START="/DROP TABLE IF EXISTS/"


if [ $# -lt 1 ] || [[  == "--help" ]] || [[  == "-h" ]] ; then
        echo "USAGE: extract all tables:"
        echo "  DUMP_FILE"
        echo "extract one table:"
        echo "  DUMP_FILE [TABLE]"
        exit
fi

if [ $# -ge 2 ] ; then
        #extract one table 
        csplit -s -ftable  "/-- Table structure for table/" "%-- Table structure for table \`\`%" "/-- Table structure for table/" "%40103 SET TIME_ZONE=@OLD_TIME_ZONE%1"
else
        #extract all tables
        csplit -s -ftable  "$START" {*}
fi

[ $? -eq 0 ] || exit

mv table00 head

FILE=`ls -1 table* | tail -n 1`
if [ $# -ge 2 ] ; then
        # cut off all other tables
        mv $FILE foot
else
        # cut off the end of each file
        csplit -b '%d' -s -f$FILE $FILE "/40103 SET TIME_ZONE=@OLD_TIME_ZONE/" {*}
        mv ${FILE}1 foot
fi

for FILE in `ls -1 table*`; do
        NAME=`head -n1 $FILE | cut -d$'x60' -f2`
        cat head $FILE foot > "$NAME.sql"
done

rm head foot table*
登入後複製

此腳本使用 csplit 來分割轉儲文件分成單獨的表文件,每個文件以相應的表命名。這允許稍後輕鬆地重新組裝成單一檔案。若要使用此腳本,只需提供轉儲檔案的路徑作為第一個參數,並可選擇指定要擷取的特定資料表作為第二個參數。

以上是如何將大型 MySQL 轉儲拆分為較小的檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板