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に変換するツール

推薦する

sed コマンドを使用して文字列を置換する Linux チュートリアル

文字列を置き換えるには、次の形式を使用する必要があります。 $ sed s/置換対象文字列/置換文字...

SQL インジェクション脆弱性プロセスの例と解決策

コード例: パブリッククラスJDBCDemo3 { パブリック静的voiddemo3_1(){ bo...

Windows 10 での MySQL 8.0.16 のインストールと設定のチュートリアル

この記事では、参考までにMySQL 8.0.16のインストールと設定方法のグラフィックチュートリアル...

カンマで区切られたmysqlの分割関数の実装

1: 文字列を区切るためのストアドプロシージャを定義する 区切り文字 $$ `mess`$$ を使う...

ウェブページの右側に固定されたフローティングレイヤーの実装コード

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

mycat を使用して MySQL データベースの読み取りと書き込みの分離を実装する例

MyCATとはエンタープライズアプリケーション開発のための完全にオープンソースの大規模データベースク...

Meituan DBデータをデータウェアハウスに同期するアーキテクチャと実践

背景データ ウェアハウス モデリングでは、何ら処理されていない元のビジネス レイヤー データは OD...

MySQL 8.0.22 の最新バージョンのダウンロードとインストールの超詳細なチュートリアル (Windows 64 ビット)

目次序文1. 公式サイトからMySQL 8.0.22をダウンロードする2. 環境変数を設定する3. ...

HTML の類似タグと属性の違いの詳細な説明

【1】<i></i>タグと<em></em>タグ同じ...

PSSHを使用してLinuxサーバーを一括管理する

pssh は、多数のマシンでのバッチ ssh 操作に使用される、Python で実装されたオープン ...

React 高階コンポーネント HOC 使用方法の概要

HOCを紹介する一文高階コンポーネント (HOC) とは何ですか? 公式ドキュメントによると、「高階...

HTML をホームページとして設定し、お気に入りに追加_Powernode Java Academy

IE ブラウザで「ホームページとして設定」および「お気に入りに追加」機能を実装する方法解決:指定さ...

アイデア展開Tomcatサービス実装プロセス図

まずプロジェクトの成果物を構成するスタートアップ項目の設定 Tomcatサービスを作成する開始したい...

数千万件のレコードをMySQLに素早く挿入する方法に関する実践的なチュートリアル

1. データベースを作成する 2. テーブルを作成する1. deptテーブルを作成する テーブル「d...

CSS で要素を垂直方向に中央揃えする 7 つの方法

【1】中央の要素の幅と高さを知る絶対値 + 負のマージンコードの実装 .wrapBox5{ 幅: 3...