ホームページ >データベース >mysql チュートリアル >大きな MySQL ダンプを小さなファイルに分割するにはどうすればよいですか?

大きな MySQL ダンプを小さなファイルに分割するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-24 22:39:11232ブラウズ

How to Split a Large MySQL Dump into Smaller Files?

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

あるデータベースから別のデータベースにテーブルを転送する必要がありますが、mysqldump からのダンプ出力は多くの場合、特定のアップロード制限を超えて大きすぎます。この記事では、かさばる mysqldump 出力を管理しやすい小さなファイルに分割する賢い解決策について説明します。

シェル スクリプトによって提案される考えられるアプローチの 1 つは、ダンプをテーブルごとに個別のファイルに分割することです。これは、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 を使用してダンプ ファイルを分割します。個々のテーブル ファイルに分割され、各ファイルには対応するテーブルにちなんだ名前が付けられます。これにより、後で単一のファイルに簡単に再構築することができます。このスクリプトを使用するには、最初の引数としてダンプ ファイルへのパスを指定し、オプションで 2 番目の引数として抽出する特定のテーブルを指定します。

以上が大きな MySQL ダンプを小さなファイルに分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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