容量が制限されたリモート サーバーにアップロードするために、Mysqldump 出力をより小さいファイルに分割する
ある MySQL データベースから別の MySQL データベースに大量のデータを転送する必要性という問題が頻繁に発生しますが、ファイルのアップロード サイズの制限などの制限が問題を引き起こす可能性があります。これは、2MB 未満の圧縮 .sql ファイルのみを許可する phpMyAdmin を使用する場合に特に関係します。幸いなことに、この障害を克服するソリューションが存在します。
この問題を解決するには、mysqldump の出力を細心の注意を払って管理可能なチャンクに断片化し、小さな形式でアップロードできるようにします。残念ながら、リモート サーバー上でファイルを連結できないため、split(1) ユーティリティは使用できません。
代替ソリューション: MySQL ダンプ出力の断片化
split(1) の実用的な代替手段は、次の bash スクリプトで紹介されています。データベース ダンプ ファイルを個別の .sql ファイルに巧みに分割し、それぞれが個別のテーブルに対応します。このスクリプトは、ファイルを分割するための多用途ツールである csplit を活用し、START を戦略的に使用してテーブル境界を特定します。
#!/bin/bash # Adjust this to your specific scenario: 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 a specific 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*
このソリューションは、ダンプ ファイルを細心の注意を払って個別のテーブル固有の .sql ファイルに分割し、確実に正常にアップロードできるようにします。ファイル容量が制限されていても、リモート サーバーにアクセスできます。
以上がアップロード サイズの制限を超えるために、大きな MySQL ダンプ ファイルを小さなファイルに分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。