しばらく前に、テストのために実稼働環境からテスト サーバーにデータを転送する必要がありました。特定のアカウントのデータのみをインポートする必要があるため、データを SQL ステートメントに組み立てて SQL ファイルにエクスポートし、それをテスト サーバーに転送して MySQL にインポートするスクリプトを作成することを考えました。想像力は美しいですが、その過程は苦痛です。
1 スクリプトの考え方は、特定のアカウント データをクエリし、それを組み立てて SQL テキスト データに結合することです。ここで、一部のフィールドに ' (一重引用符)、" (二重引用符)、` (左上隅から 2 番目の文字) などの不正な文字が含まれているため、クエリ値をフィルタリングする必要があることに注意してください。キーボード). これらの記号は一緒に結合されます。SQL ステートメントを作成するときに、クロージャーのもう一方の端が見つからないため値が変更され、SQL ステートメントの結合で問題が発生します。したがって、これらの文字を置き換える必要があります。 str_replace() 関数を使用してこれらのシンボルを空に設定します。
2、is_numeri 関数を使用して、値が数値型の構造体かどうかを判断します。そうである場合は、「」を追加します。 (二重引用符) ですが、is_numeri には問題があります。一部の値には文字 e が含まれており、true も返されます。
これは実際には問題です。 "" を追加しないと値を MySQL に挿入できません。
その後、値を二重引用符で囲む必要があるかどうかを判断するために is_float() 関数と is_string() 関数を同時に追加しました。
3. エクスポートされるデータの量が比較的多いため、4 つの PHP プロセスを実行するように分割し、1 つのプロセスで 10,000 のユーザー データを実行するため、時間を大幅に節約できます。ただし、複数のプロセスが同時にテキストファイルを書き込むとデータ損失が発生する可能性があるため、保存されている SQL テキストも区別する必要があることに注意してください (後で気づき、データの復元に多くの時間を費やしました)。
##4、tar -xcvf コマンドを使用して、SQL ファイル (7G ファイル) を圧縮してパッケージ化します。700 M 以上に圧縮でき、圧縮効果は依然として良好です。 PHP ビデオ チュートリアル
MySQL へのデータのインポート1、データ量が比較的大きいため、実行するためにいくつかのプロセスも分割しました。これらの大きな SQL ファイルをインポートするには、MySQL ソース コマンドを使用しました。
mysql>source D:/www/sql/data.sql;
source c:/1.sql; source c:/2.sql;
発生状況:
## 確認したところ、原因は次のとおりです。 1 つのテーブル内のデータの量が多いです。一般に、mysql は 1 つのテーブルに大量のデータを含む SQL を制限します。
解決策:
変更を加えます。 max_allowed_packet パケット サイズ
オプション 1、一時的な変更: コマンド set global max_allowed_packet = size; を入力します (ここでのサイズはバイト単位でのみ入力できることに注意してください。 mysql サービスを再起動すると、設定が無効になります。 )オプション 2、my.ini ファイルを変更し、[mysqld] セクションに max_allowed_packet=size を追加します2
. ソース コマンドは位置レコードを記録できないため、この方法では、エラー メッセージが表示されるため、後で Linux シェル メソッドに切り替えて、次のようにをインポートします。 sql.sh
#!/bin/bash p="d:backup/sql.sql" //绝对路径 User='abc' Password='123' mysql -u $User -p$Password -e "source $f" 2>err1.txt;//输出错误到文件中,方便后面查询 echo 'OK!'
mysqlビデオチュートリアル
以上が大量のデータのインポートとエクスポートを実装する PHP+MySQL の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。