ある MySQL データベースから別の MySQL データベースにテーブル データを移動しようとすると、ファイル サイズの制限が発生する可能性があります。 mysqldump からの出力がアップロードに許可されているサイズを超える場合は、出力をより小さいファイルに分割する方法が必要です。
解決策の 1 つは、mysqldump で --extended-insert=FALSE オプションを使用することです。これにより、適切な --lines オプションを指定した Split(1) を使用して分割できる .sql ファイルが作成されます。ただし、リモート サーバーで cat(1) を使用できない場合、この方法は実行できません。
あるいは、bash スクリプトを使用してダンプファイルをテーブルごとに個別のファイルに分割することもできます。このスクリプトは、csplit を使用して、テーブル構造やテーブル名などの特定のパターンに基づいてファイルを分割します。
スクリプトの例を次に示します。
#!/bin/bash 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 出力をより小さなファイルに分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。