大量のデータのインポートとエクスポートを実装する PHP+MySQL の概要

little bottle
リリース: 2023-04-05 21:02:01
転載
2628 人が閲覧しました

しばらく前に、テストのために実稼働環境からテスト サーバーにデータを転送する必要がありました。特定のアカウントのデータのみをインポートする必要があるため、データを SQL ステートメントに組み立てて SQL ファイルにエクスポートし、それをテスト サーバーに転送して MySQL にインポートするスクリプトを作成することを考えました。想像力は美しいですが、その過程は苦痛です。

PHP スクリプトの処理

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;
ログイン後にコピー

SQL ファイルには使用データベースが含まれているため、ここには使用データベースはありません。

ソース コマンドを使用して複数の SQL ファイルをインポートします。次のコマンドを保存する新しい sou.sql ファイルを作成できます。

例:

    source c:/1.sql;
    source c:/2.sql;
ログイン後にコピー

このようにして、1 つのソース コマンドで複数のファイルをインポートできます。sql ファイル.

期間中にいくつかの問題もありました:

発生状況:

## 確認したところ、原因は次のとおりです。 1 つのテーブル内のデータの量が多いです。一般に、mysql は 1 つのテーブルに大量のデータを含む SQL を制限します。

解決策:

変更を加えます。 max_allowed_pa​​cket パケット サイズ

オプション 1、一時的な変更: コマンド set global max_allowed_pa​​cket = size; を入力します (ここでのサイズはバイト単位でのみ入力できることに注意してください。 mysql サービスを再起動すると、設定が無効になります。 )

オプション 2、my.ini ファイルを変更し、[mysqld] セクションに max_allowed_pa​​cket=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 サイトの他の関連記事を参照してください。

ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!