MySQLデータ移行の概要

MySQLデータ移行の概要

序文:

日常業務では、テーブル、データベース、インスタンスの移行など、データの移行が必要になることがよくあります。さまざまなニーズに応じてさまざまな移行計画が必要になる場合があり、データ移行プロセス中にさまざまな規模の問題が発生する可能性があります。この記事では、MySQL のデータ移行について見ていきます。皆さんのお役に立てれば幸いです。

1. データ移行について

まず、データ移行に関するWikipediaの説明を引用しましょう。

データ移行とは、データを選択、準備、抽出、変換し、あるコンピュータ ストレージ システムから別のコンピュータ ストレージ システムに永続的に転送するプロセスです。さらに、移行されたデータの整合性の検証と古いデータ ストアの廃止も、全体的なデータ移行プロセスの一部と見なされます。

データ移行は、あらゆるシステムの実装、アップグレード、統合において重要な考慮事項であり、多くの場合、可能な限り自動化された方法で実行され、人的リソースを面倒な作業から解放します。

データ移行は、サーバーまたはストレージ デバイスの交換、メンテナンスまたはアップグレード、アプリケーションの移行、Web サイトの統合、災害復旧、データ センターの移転など、さまざまな理由で発生します。

MySQL データベースでは、テスト ライブラリから開発ライブラリへの移行、またはあるマシンから別のマシンへの移行など、データ移行のニーズが頻繁に発生します。1 つのテーブルのみの移行が必要な場合もあれば、データベース インスタンス全体の移行が必要な場合もあります。さまざまなニーズに応じてさまざまな移行計画が必要になる場合がありますが、一般的に、MySQL データ移行計画は、物理移行と論理移行の 2 つのカテゴリに大まかに分けられます。

2. 移行計画と留意点

物理的な移行は、大量のデータの全体的な移行に適しています。物理的な移行には、データ ファイルのコピーと XtraBackup バックアップ ツールの使用が含まれます。異なるサーバー間では物理的な移行を使用できます。新しいサーバーに同じバージョンのデータベース ソフトウェアをインストールし、同じディレクトリを作成します。構成ファイルは元のデータベースと同じにすることをお勧めします。次に、元のデータベースからデータ ファイルとログ ファイルをコピーし、ファイル グループの権限を構成してから、mysqld コマンドを使用して新しいサーバーでデータベースを起動します。

物理的な移行ソリューションを使用する利点は、比較的高速であることです。ただし、移行にはダウンタイムが必要であり、MySQL のバージョンと構成が元のサーバーと同じである必要があるため、未知の問題が発生する可能性もあります。

比較すると、論理移行は適用範囲が広く、部分的な移行と完全な移行の両方に使用できます。論理移行で最も一般的に使用される方法は、mysqldump などのバックアップ ツールを使用してエクスポートおよびインポートすることです。

mysqldump は、異なるバージョンや構成間の移行にも適しています。ただし、データベース全体を移行する場合、特に異なるバージョン間で移行する場合は、-A パラメータを使用してデータベース全体をバックアップすることはお勧めしません。一部のシステム ライブラリがわずかに異なる場合があり、移行後に未知の問題が発生する可能性があります。完全な移行に mysqldump を使用する場合は、以下の手順に従います。

# 元のデータベース実行は、データベース作成ステートメントを取得し、新しいデータベース(システムデータベースを除く)でそれを実行します。
選択
  CONCAT( '存在しない場合はデータベースを作成 ', '`', SCHEMA_NAME, '`', ' デフォルト文字セット ', DEFAULT_CHARACTER_SET_NAME, ';' ) AS CreateDatabaseQuery
 から
  情報スキーマ.SCHEMATA
 どこ
  SCHEMA_NAME が ( 'information_schema'、 'performance_schema'、 'mysql'、 'sys' ) にありません。

   # 元のデータベースは、新しいデータベースで取得された作成されたユーザーステートメントを実行します(システムユーザーを除く)
 選択
  CONCAT( 'create user \'', USER, '\'@\'', HOST, '\'' ' IDENTIFIED BY PASSWORD \'', authentication_string, '\';' ) AS CreateUserQuery
 から
  mysql.`ユーザー`
 どこ
  `User` が ( 'root', 'mysql.session', 'mysql.sys' ) に含まれていません。

  # 元のデータベースで show grants を実行してユーザー権限を取得し、新しいデータベースで 1 つずつ実行します (これらの権限テーブルを新しいデータベースにコピーすることもできます)
'testuser'@'%' の権限を表示します。

# この時点で、新しい環境にはすでに移行するライブラリとユーザーが存在しますが、データはありません。# mysqldump を使用して、元の環境のシステムライブラリを除くすべてのライブラリをバックアップします。
 mysqldump -uroot -pxxxx -R -E --single-transaction --databases db1 db2 > db.sql

# 次に新しい環境をインポートします。mysql -uroot -pxxxx < db.sql

一部のライブラリとテーブルを移行する場合も、上記と同様のソリューションを使用できますが、バックアップはオンデマンドで実行する必要があります。一般的な mysqldump バックアップ シナリオを次に示します。

# 単一のデータベースをバックアップする mysqldump -uroot -pxxxxx -R -E --single-transactio --databases db1 > db1.sql

# いくつかのテーブルをバックアップします。 mysqldump -uroot -pxxxxx --single-transaction db1 tb1 tb2 > tb12.sql

# いくつかのテーブルをチェックします mysqldump -uroot -pxxxxxx db1 --ignore-table=db1.tb1 --ignore-table=db1.tb2 > db1.sql

# 構造またはデータのみをバックアップする mysqldump -uroot -pxxxxx testdb --no-data > testdb_jiegou.sql
mysqldump -uroot -pxxxxxx testdb --no-create-info > testdb_data.sql

一般的に、mysqldump を使用する方が柔軟性が高くなります。移行を高速化するには、不要なログ テーブルを除外するなど、バックアップ コンテンツを最小限に抑える必要があります。一部の大きなテーブルについては、別の移行ソリューションを採用することもできます。たとえば、db1 の tb1 テーブルは特に大きいです。バックアップ中に tb1 を除外できます。大きなテーブル tb1 については、LOAD DATA メソッドを使用するか、テーブル スペースを破棄してからインポートして移行できます。

データ移行プロセス中にさまざまなエラーが発生する可能性がありますが、段階的に解決できます。移行前に、新しいデータベースにユーザーを作成し、権限を付与することをお勧めします。ビューと関数には定義者の概念があるため、これにより、ビューと関数のインポート時のエラーを回避できます。新しい環境をインポートするときは、権限によって発生する問題を回避するために、root などの SUPER 権限を持つ管理者ユーザーを使用することをお勧めします。

移行が完了したら、テーブルの数が同じかどうか、いくつかのテーブルをランダムにチェックして、データが同じかどうか、コードが文字化けしていないかどうかなど、新しい環境を再度確認する必要があります。すべてに確信があるときのみ、成功します。

要約:

この記事では、MySQL データベースのデータ移行におけるソリューションと注意点を紹介し、次のマインドマップにまとめます。

上記はMySQLデータ移行の詳細な概要です。MySQLデータ移行の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • dockerがredisを再起動するとmysqlデータが失われる問題を解決する
  • MySQL で置換操作を使用したときにデータ損失が発生する問題の解決策
  • サーバーがダウンしたときにMySQLデータの損失を防ぐためのいくつかのソリューション
  • MySQLでデータを削除してもディスク領域が解放されないのはなぜですか
  • Python の基礎: MySQL データベースの操作
  • MySQLデータベースに中国語の文字を保存するときに発生するエラーを解決する方法を教えます
  • Djangoは写真をMySQLデータベースに保存し、フロントエンドページに表示します。
  • MyBatis バッチによる MySql データの挿入/変更/削除
  • 画像をMySQLデータベースに保存し、フロントエンドページに表示するための実装コード
  • GolangはMySQLデータベーストランザクションの送信とロールバックを実装します
  • MySQLインストール後のデフォルトデータベースの役割の詳細な説明
  • MySQLデータ損失の原因と解決策

<<:  メタビューポートはiPhoneでウェブページをフルスクリーン表示コントロールします

>>:  静的ウェブサイトをRSSに変換するツール

推薦する

HTML の入力の readonly 属性と disabled 属性の違いについて簡単に説明します。

「読み取り専用」と「無効」はどちらも、ユーザーがフォーム フィールドの内容を変更できないようにしま...

ローカルでビルドした Docker イメージを Dockerhub に公開する方法

今日は、ローカルの Docker プロジェクト イメージを dockerhub に公開する方法を紹介...

Nginx の書き換え正規マッチング書き換え方法の例

Nginx の書き換え機能は、リダイレクトと同様に、URL アドレスを一時的または永続的に新しい場所...

VirtualBox仮想マシンがNATモードで外部ネットワークに接続できない問題の解決策

背景VirtualBox 仮想マシン (Ubuntu 16.04 システムがロードされている) には...

MySQL データ型 DECIMAL(N,M) における N と M の意味の詳細な説明

同僚から、MySQL データ型 DECIMAL(N,M) の N と M の意味を尋ねられました。言...

js でオブジェクトを作成するさまざまな方法とその長所と短所のまとめ

目次初期作成方法ファクトリーパターンコンストラクターパターンコンストラクタパターンの最適化プロトタイ...

MySQLのクラスタ化インデックスと非クラスタ化インデックスの詳細な説明

1. クラスター化インデックステーブル データはインデックスの順序で保存されます。つまり、インデック...

Centos7 で Java8 と MySQL をインストールしてデプロイする

通常、Java の学習とプロジェクトのデプロイはローカルで行われますが、実稼働環境は Linux 環...

HTML でナンバープレート番号と州の略語を入力するためのサンプルコード

原理としては、まずボタン付きの div を記述し、次に画面のサイズに応じて自動的に適応してキーボード...

MySQL はどのようにしてマルチバージョンの同時実行性を実現するのでしょうか?

目次MySQL マルチバージョン同時実行1. マルチバージョン同時実行制御1. 一貫した読み取り2....

MySQL でテーブル メタデータ ロックを待機する理由と方法

MySQL が alter table などの DDL 操作を実行すると、テーブル メタデータ ロッ...

Raspberry Pi 4b ubuntu19 サーバーへの docker-ce のインストール手順

Raspberry Pi モデルは 4b、1G RAM です。システムはubuntu19.10サーバ...

React+axios は github 検索ユーザー機能を実装します (サンプル コード)

負荷リクエスト成功リクエストに失敗しました cmdをクリックし、ファイルパスでEnterキーを押しま...

Docker 環境での Jmeter の分散操作に関する詳細なチュートリアル

1. jmeterの基本イメージを構築するDockerfile は次のとおりです。 # Java 8...

Linux でのルーティングと仮想マシン ネットワークの設定に関する詳細なグラフィック説明

ルーティングとは何ですか?ルーティングとは、相互接続されたネットワークを介して送信元ステーションから...