MySQLデータベース移行により、大量のデータを迅速にエクスポートおよびインポートできます

MySQLデータベース移行により、大量のデータを迅速にエクスポートおよびインポートできます

データベースの移行は、よく遭遇する問題です。データ量が少ない場合、移行は基本的に問題になりません。実稼働環境では、次のような状況で移行作業が必要になります。

  • ディスク容量が不足しています。たとえば、古いプロジェクトの場合、選択したモデルが必ずしもデータベースに適しているとは限りません。時間が経つにつれて、ハードドライブが不足する可能性が高くなります。
  • ビジネスにボトルネックがある。たとえば、プロジェクト内のすべての読み取りおよび書き込み操作を 1 台のマシンで処理すると、ビジネス上のプレッシャーが増大し、耐えられない状態になります。 IO 圧力が許容範囲内であれば、読み取りと書き込みの分離ソリューションが採用されます。
  • マシンがボトルネックになっています。マシンのボトルネックは主にディスク IO 容量、メモリ、CPU です。ボトルネックを最適化するだけでなく、移行も優れたソリューションです。
  • プロジェクトの変革。一部のプロジェクトのデータベースは異なるコンピュータ ルームにまたがって配置されているため、異なるコンピュータ ルームにノードを追加したり、あるコンピュータ ルームから別のコンピュータ ルームにマシンを移行したりすることが可能になります。たとえば、異なる事業体で同じサーバーを共有している場合、サーバーの負荷を軽減し、メンテナンスを容易にするために移行が実行されます。

MySQL 移行には、次の 3 つの一般的な方法があります。

1. データベースを直接エクスポートし、ファイルを新しいサーバーにコピーして、新しいサーバーにインポートします。

2. サードパーティの移行ツールを使用します。

3. データ ファイルとライブラリ テーブル構造ファイルを新しいサーバーに直接コピーし、同じ構成で MySQL サービスにマウントします。

最初のソリューションの利点は、データ ファイルを再構築し、データ ファイルが占めるスペースを削減し、互換性が最も高く、エクスポートやインポートで問題が発生することはほとんどなく、要件に柔軟に対応できることです。デメリット: 従来のエクスポートとインポートには長い時間がかかります。

2 番目のソリューションの利点: 設定が完了すると、送信は自動的に完了し、無人になります。デメリット: 柔軟性が不十分、設定が複雑、送信時間が長い、異常発生後に異常箇所からの送信を継続することが困難。

3 番目のソリューションの利点: 時間が短縮され、ブレークポイントでファイルを転送でき、操作手順が少なくなります。デメリット: 新しいサーバーと古いサーバーの MySQL のバージョンと構成は同じである必要があるため、未知の問題が発生する可能性があります。

データベースの移行がビジネスのボトルネックやプロジェクトの変革によるもので、データ テーブル構造 (パーティションやテーブルなど) の変更を必要とする場合は、最初の方法のみを使用できます。

MySQLのSELECT INTO OUTFILEとLOAD DATA INFILEを使用して、データを素早くエクスポートおよびインポートします。

LOAD DATA INFILEステートメントは、テキスト ファイルからデータを非常に高速にテーブルに読み取ります。 MySQL の公式ドキュメントには、この方法は一度に 1 行のデータを挿入するよりも 20 倍高速であるとも記載されています。

SELECT ... INTO OUTFILELOAD DATA INFILEを併用してデータベースからファイルにデータを書き込み、そのファイルをデータベースに読み込む場合、2 つのコマンドのフィールドと行の処理オプションが一致している必要があります。そうしないと、LOAD DATA INFILE はファイルの内容を正しく解釈できなくなります。

以下は、合計データ量が 12G の MySQL を Windows から Linux に移行するプロジェクトの例です。

Windows プラットフォームでデータをエクスポートする:

Tables.txt は、データ テーブルの名前を格納するファイルです。ファイルからデータ テーブルの名前を読み取ることで、すべてのテーブルがループでエクスポートされます。プロセスにサブ テーブルが含まれる場合、エクスポートされた SQL ステートメントとバッチ コードはサブ テーブルのルールに従って変更できるため、非常に柔軟です。

@echo off & setlocal enabledelayedexpansion
/f %%i in (tables.txt) do (set table=%%i
 echo "テーブルをダンプ -- !テーブル! --"
 mysql -uroot -p12345678 codetc_old -e "SELECT * INTO OUTFILE 'F:/MySQL/Uploads/!table!.txt' フィールドは ',' FROM !table" によって終了されます。
)
一時停止

Linux プラットフォームでのデータのインポート:

#!/bin/bash
行を読みながら
する
    mysql -uroot -p12345678 codetc_new -e "ファイル '/var/lib/mysql-files/$line.txt' のデータをテーブル $line にロードします。フィールドは ',' で終了します"
完了 < tables.txt

データをインポートする前に、新しいマシンにテーブル構造を作成する必要があります。12G のデータのエクスポートには約 3 分、インポートには約 4 分かかります (実行時間はマシンの構成によって異なり、参考値ではありません)

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • MySQLデータベースのデータフォルダを移行するための詳細な手順
  • MySQLデータベースを別のマシンに移行する方法の詳細な説明
  • OracleデータベースをMySQLに移行する方法の概要
  • MySQLデータベースをOracleデータベースに移行する
  • MySQL InnoDB テーブルスペースのアンロード、移行、ロードの使用方法
  • MySQLデータ移行の詳しい説明 - データディレクトリ直接置換の注意事項
  • MySQLからClickHouseに移行する5つの方法
  • mysql5.5 データベースデータディレクトリ移行方法の詳細な説明
  • MySQLのバックアップと移行データの同期方法
  • MySQL移行計画と落とし穴の実践記録

<<:  CentOS8.0ネットワーク設定の実装

>>:  Reactで例外を適切にキャプチャする方法

推薦する

VMware 構成 VMnet8 ネットワーク方法の手順

目次1. はじめに2. 設定手順1. はじめに1. NAT モード (VMnet8) は、仮想マシン...

JavaScript排他的思考の具体的な実装

前回のブログで、Xiao Xiong は関連する要素の操作方法を更新しましたが、同じ要素のグループが...

Docker ファイルの保存パス、コンテナの起動コマンド操作の取得

コンテナはすでに作成されていますが、その起動パラメータ(データがマウントされる場所)を知る方法 #コ...

Linuxは、単一のIPをバインドするためにデュアルネットワークカードを実装するためにボンドを使用します。サンプルコード

ネットワークの高可用性を実現するには、複数のネットワーク カードを仮想ネットワーク カードにバインド...

VUE ユニアプリの基本コンポーネントの簡単な紹介

1. スクロールビュー垂直スクロールを使用する場合は、固定の高さを指定して CSS で高さを設定する...

MySQL インストール プロンプト「詳細なヘルプについては NET HELPMSG 3534 と入力してください」の解決方法

今日、MySQL をインストールすると次のエラー メッセージが表示されます。 かなり長い時間ネットで...

Vue axios インターセプターは、繰り返しリクエストのキャンセルによく使用されます。

導入前回の記事では、axios のシンプルなカプセル化と、axios インターセプターの適用シナリオ...

CSS ハック \9 と \0 は IE11\IE9\IE8 のハッキングには機能しない可能性があります

Web ページやフォームを設計するたびに、さまざまなブラウザ、特に IE ファミリの互換性の問題に悩...

よく使われるn番目の子セレクターをまとめる

序文フロントエンドプログラミングでは、奇数、偶数などの数値を受け入れることができる nth-chil...

Vue プロジェクトで axios をカプセル化する方法 (http リクエストの統合管理)

1. 要件Vue.js フレームワークを使用してフロントエンド プロジェクトを開発する場合、サーバ...

MySQL SQL文の特殊処理文のまとめ(必読)

1.テーブル全体を更新します。データ行の列の値が空の場合は、別の列フィールドの値と同じにします。 ...

Dayjs を使用して Vue で一般的な日付を計算する方法

vue を使用してプロジェクトを開発する場合、フロントエンドでは次のような日付と時刻を計算する必要が...

JavaScript 文字列操作の 4 つの実用的なヒント

目次序文1. 文字列を分割する2. JSONのフォーマットと解析3. 複数行の文字列と埋め込み式4....

CentOS サーバーに FFmpeg をインストールするための完全な手順

序文サーバーシステム環境は、CentOS 6.5 (最終) です。 FFmpeg をサーバーに正常に...

Javascript 文字列メソッドの詳細な説明

目次文字列の長さ: 長さcharAt() charCodeAt()文字列に値が含まれているかどうかを...