このようなシナリオがあると仮定して、小さなプログラムを開発し、ダブル イレブン イベントの人気を利用して、1 か月であっという間に 100 万人以上のユーザーを獲得しました。小さなプログラム ページで、ポイントは WeChat ユーザーにテンプレート メッセージ通知を送信するために使用されます。
データ量が増えてきて、以前使用していたサーバーの容量が少し足りなくなってきました。最近、小さなプログラムのバックエンド開発に特化した新しいフレームワークを書いたので、元のデータを移行したいと考えています新しいシステムのデータベースに移行します。 4コア8Gマシンを購入し、データ移行を始めました。移行プロセスの簡単な記録を作成してみましょう。
計画の選択
mysqldump 移行
通常の開発では、使用されるデータのバックアップおよび移行方法は、mysqldump ツールを使用して SQL ファイルをエクスポートし、その SQL ファイルを新しいデータベースにインポートしてデータ移行を完了することです。 [推奨: mysql ビデオ チュートリアル ]
実験の結果、mysqldump を使用して 100 万レベルのデータベースを SQL ファイルにエクスポートするには数分かかることと、エクスポートされた SQL ファイルのサイズが判明しました。約 1G です。その後、scp コマンドを使用して 1G SQL ファイルを別のサーバーにコピーします (これには数分かかる場合があります)。新しいサーバーのデータベースにデータをインポートするためにsourceコマンドを使用しましたが、一晩中実行しましたが、データはインポートされませんでした。CPUがいっぱいでした。
スクリプト移行
コマンド ラインからデータベースを直接操作してデータをエクスポートおよびインポートする方が便利ですが、データ量が増加します。この場合、多くの場合、時間がかかり、より高いサーバーのパフォーマンスが必要になります。データ移行に必要な時間がそれほど長くない場合は、データを移行するためのスクリプトを作成してみることができます。実際に試したことはありませんが、スクリプトの解決策はおそらく 2 つあると思います。
最初の方法は、移行ターゲット サーバーで移行スクリプトを実行し、ソース データ サーバーのデータベースにリモートで接続し、クエリ条件を設定してソース データをチャンクで読み取り、ターゲット データベースに書き込むことです。読んだあと。 。この移行方法は比較的非効率的である可能性があり、データのエクスポートとインポートは同期プロセスに相当し、読み取りが完了するまで待ってから書き込みを行う必要があります。クエリ条件が合理的に設計されている場合は、複数の移行スクリプトをマルチスレッド方式で開始して、並列移行の効果を実現することもできます。
2 番目の方法は、redis と組み合わせて、「実稼働および消費」の移行ソリューションを構築できます。ソース データ サーバーはデータ プロデューサーとして機能し、ソース データ サーバー上でマルチスレッド スクリプトを実行し、データベース内のデータを並行して読み取り、データを Redis キューに書き込みます。ターゲット サーバーはコンシューマとして、ターゲット サーバー上でマルチスレッド スクリプトも実行し、redis にリモート接続し、redis キュー内のデータを並行して読み取り、読み取ったデータをターゲット データベースに書き込みます。最初の方法と比較すると、この方法は非同期ソリューションであり、データのインポートとデータのエクスポートを同時に実行でき、データ転送ステーションとして redis を使用することで効率が大幅に向上します。
ここでは、Go 言語を使用して移行スクリプトを作成することもできます。ネイティブの同時実行機能を使用すると、データを並行して移行するという目的を達成し、移行効率を向上させることができます。
ファイル移行
最初の移行ソリューションは非効率すぎ、2 番目の移行ソリューションはエンコード コストが高くなります。比較とオンライン アフターを通じて探していた情報を分析した結果、最終的に mysql を使用することにしました。
select data into outfile file.txt、load data infile file.txt into table
コマンドは、インポートおよびエクスポート ファイルの形式で数百万のデータの移行を完了します。
移行プロセス
ソース データベースにデータ ファイルをエクスポートします
select * from dc_mp_fans into outfile '/data/fans.txt';
データ ファイルをターゲット サーバーにコピーします
zip fans.zip /data/fans.txtscp fans.zip root@ip:/data/
ターゲット データベースでファイルをインポートします
unzip /data/fans.zipload data infile '/data/fans.txt' into table wxa_fans(id,appid,openid,unionid,@dummy,created_at,@dummy,nickname,gender,avatar_url,@dummy,@dummy,@dummy,@dummy,language,country,province,city,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy);
次の手順に従って、百万レベルのデータ テーブルのサーバー間移行を数分で完了します。
注意事項
- mysqlセキュリティ項目の設定
mysqlでデータのinfileとintoへのロードを実行します。 outfile コマンドでは、mysql で secure_file_priv オプションを有効にする必要があります。'%secure%'; のような show global 変数を使用して、mysql でこのオプションが有効になっているかどうかを確認できます。デフォルト値の Null は、インポートおよびエクスポート コマンドが許可されていないことを示します処刑されることになる。
vim /etc/my.cnf を介して mysql 構成項目を変更し、secure_file_priv の値を空に設定します。
[mysqld] secure_file_priv=''
これにより、コマンドを使用してデータ ファイルをインポートおよびエクスポートできるようになります。
- インポートされたデータ テーブルのフィールドとエクスポートされたデータ テーブルのフィールドは対応していません
上記の例では、データはソース データベースの dc_mp_fans テーブルからターゲット データベースの wxa_fans テーブルに移行されます。 2 つのデータ テーブルのフィールドは次のとおりです: dc_mp_fans
wxa_fans
データをインポートするときに、対象フィールドのデータと一致するフィールド名を指定し、@dummy を通じて不要な対象フィールドのデータを破棄できます。
概要
このデータ移行エクスペリエンスに基づく要約は次のとおりです。
- 少量のデータは、 mysqldumpコマンド この方法は簡単で便利です。
- データの量が多く、移行に十分な忍耐力がある場合は、独自のスクリプトを作成し、適切な並列ソリューションを選択してデータを移行することもできます。この方法では、コーディング コストが高くなります。
- データの量が多く、データの移行を短時間で完了したい場合は、mysql インポート ファイルとエクスポート ファイルを使用してデータを移行する方が効率的です。
以上がMysql の百万レベルのデータ移行プロセスの記録に焦点を当てます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

MySQLは、データストレージ、管理、クエリ、セキュリティに適したオープンソースのリレーショナルデータベース管理システムです。 1.さまざまなオペレーティングシステムをサポートし、Webアプリケーションやその他のフィールドで広く使用されています。 2。クライアントサーバーアーキテクチャとさまざまなストレージエンジンを通じて、MySQLはデータを効率的に処理します。 3.基本的な使用には、データベースとテーブルの作成、挿入、クエリ、データの更新が含まれます。 4.高度な使用には、複雑なクエリとストアドプロシージャが含まれます。 5.一般的なエラーは、説明ステートメントを介してデバッグできます。 6.パフォーマンスの最適化には、インデックスの合理的な使用と最適化されたクエリステートメントが含まれます。

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

INNODBのロックメカニズムには、共有ロック、排他的ロック、意図ロック、レコードロック、ギャップロック、次のキーロックが含まれます。 1.共有ロックにより、トランザクションは他のトランザクションが読み取らないようにデータを読み取ることができます。 2.排他的ロックは、他のトランザクションがデータの読み取りと変更を防ぎます。 3.意図ロックは、ロック効率を最適化します。 4。ロックロックインデックスのレコードを記録します。 5。ギャップロックロックインデックス記録ギャップ。 6.次のキーロックは、データの一貫性を確保するためのレコードロックとギャップロックの組み合わせです。

MySQLクエリのパフォーマンスが低いことの主な理由には、インデックスの使用、クエリオプティマイザーによる誤った実行計画の選択、不合理なテーブルデザイン、過剰なデータボリューム、ロック競争などがあります。 1.インデックスがゆっくりとクエリを引き起こし、インデックスを追加するとパフォーマンスが大幅に向上する可能性があります。 2。説明コマンドを使用してクエリ計画を分析し、オプティマイザーエラーを見つけます。 3.テーブル構造の再構築と結合条件を最適化すると、テーブルの設計上の問題が改善されます。 4.データボリュームが大きい場合、パーティション化とテーブル分割戦略が採用されます。 5.高い並行性環境では、トランザクションの最適化とロック戦略は、ロック競争を減らすことができます。

データベースの最適化では、クエリ要件に従ってインデックス作成戦略を選択する必要があります。1。クエリに複数の列が含まれ、条件の順序が固定されている場合、複合インデックスを使用します。 2。クエリに複数の列が含まれているが、条件の順序が修正されていない場合、複数の単一列インデックスを使用します。複合インデックスは、マルチコラムクエリの最適化に適していますが、単一列インデックスは単一列クエリに適しています。

MySQLスロークエリを最適化するには、slowquerylogとperformance_schemaを使用する必要があります。1。LowerQueryLogを有効にし、しきい値を設定して、スロークエリを記録します。 2。performance_schemaを使用してクエリの実行の詳細を分析し、パフォーマンスのボトルネックを見つけて最適化します。

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

WebStorm Mac版
便利なJavaScript開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。
