ホームページ  >  記事  >  データベース  >  転送とインポートを容易にするために、大きな mysqldump 出力を小さなファイルに分割するにはどうすればよいですか?

転送とインポートを容易にするために、大きな mysqldump 出力を小さなファイルに分割するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-11 19:55:03513ブラウズ

How can I split a large mysqldump output into smaller files for easier transfer and import?

大きな mysqldump 出力を小さなファイルに分割する方法

データベース間で大きな MySQL テーブルを転送する場合、圧縮された mysqldump 出力が最大ファイルを超える場合があります宛先にインポートできるサイズ。この課題を克服するために、ユーザーは次の方法を使用できます。

csplit を使用したダンプ ファイルの分割

bash スクリプトを使用して、mysqldump ファイルを個別のファイルに分割できます。各テーブル。このスクリプトは csplit ユーティリティを利用して、特定のパターンに基づいてファイルを作成します。

START="/-- Table structure for table/"

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*

mysqldump で --extended-insert=FALSE を使用する

このオプションは SQL を生成しますファイルはインポート可能なファイルに分割できます。 Split を --lines オプションとともに使用すると、ファイルごとの行数を制御できます。試行錯誤や bzip2 などの圧縮ツールを使用して、各ファイル サイズに適切な行数を決定できます。

以上が転送とインポートを容易にするために、大きな mysqldump 出力を小さなファイルに分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。