MySQL Database Serviceを触ってみた
(DumpInstance編)

 2021.04.26  株式会社システムエグゼ

MySQL Database Serviceを触ってみた(DumpInstance編)

「MySQL Database Service(以下、MDS)」は、MySQL Enterprise Edition をベースに開発され、MySQLの開発元であるオラクル社のMySQLチームが100% 開発、管理、サポートするクラウド・データベース・サービスです。

前回の「MySQL Database Serviceを触ってみた(バックアップ&リストア編)」ではMDSインスタンスのバックアップとリストア手順をご説明しましたが、4回目となる今回はMySQL ShellのDumpInstanceユーティリティを使用し、オンプレミスのMySQLにあるデータをOracle Cloud Infrastructure(OCI)上のMDSインスタンスへ移行する手順をご紹介します。

事前準備

前提条件は以下となります。

  • 移行元と移行先となるOCI上のMDSインスタンスの両方で、MySQLのバージョンが5.7以降であること。
  • 移行元と移行先(踏み台サーバ)の両側に、OCI-CLIとMySQLShellが導入済みであること。
  • 移行元と移行先(踏み台サーバ)の両側から、ダンプファイル格納用Object Storageのバケットにアクセス可能であること。

1.OCI-CLIの導入と設定

OCIのObject Storageへダンプファイルを送信するためには、OCI-CLIの導入と構成ファイルの設定が必要です。

2.MySQL Shellの導入

3.バケットの作成

後述するdumpInstanceユーティリティで取得するダンプファイル格納用バケットを用意します。

バケットの作成

4.移行用データの作成

移行元のMySQLサーバ5.7でテストデータを作成します。

※画像をクリックすると拡大します

移行用データの作成_1

移行用データの作成_2

ダンプの取得

MySQL Shellには、ダンプファイルを取得するため、以下のユーティリティが用意されています。

  • dumpInstance():全てのスキーマをダンプするユーティリティ
  • dumpSchemas():選択されたスキーマのみダンプするユーティリティ
  • dumpTable():あるスキーマの選択されたテーブルやビューのみダンプするユーティリティ(8.0.22バージョン以降)
  • loadDump():スキーマをDBシステムにインポートするユーティリティ

今回は「dumpInstance()」を利用してObject Storageのバケットに全てのスキーマのダンプを取得します。

dumpInstance()の基本構文は以下の通りとなります。

> util.dumpInstance(outputUrl[, options])
  • outputUrl : ダンプファイルを格納するディレクトリ・パス
  • options : オプション変数

手順①

ダンプを取得する前に「dryRun」および「ocimds」パラメータをtrueに設定してdumpInstanceコマンドを実行します。

これにより、エクスポートのテスト実行、互換性の問題のチェック、およびそれらの問題の出力へのリストが実行されます。

> util.dumpInstance("dumpinstance", {osBucketName:"bucket-mdsdump", osNamespace:"XXXXXXXXXX", ocimds:true, threads: 4, dryRun: true})

※「thread」はこのタスクに使用する処理スレッドの数でデフォルトは4となります。
最適なパフォーマンスを得るには、このパラメータをデータベース・サーバーで使用可能なCPUコアの数に設定することが推奨されています。

※画像をクリックすると拡大します

手順①_1

上記エラーはMDSに存在しますが、MySQLのオンプレミス・インスタンスには存在しないセキュリティ関連の制限など、互換性の問題で発生したものとなります。
以下の通り、「compatibility」 オプションを渡すことでエラーの解決ができます。

> util.dumpInstance("dumpinstance", {osBucketName:"bucket-mdsdump", osNamespace:"XXXXXXXXXX", ocimds:true, compatibility:["strip_restricted_grants","strip_definers"], threads: 4, dryRun: true})

※画像をクリックすると拡大します

手順①_2

※オプションの詳細は以下をご参照ください。
Oracle Cloud Infrastructureのドキュメント - データベースのインポートおよびエクスポート

手順②

次は検証用のオプション「dryRun」を外して同じコマンドを実行します。

> util.dumpInstance("dumpinstance", {osBucketName:"bucket-mdsdump", osNamespace:"XXXXXXXXXX", ocimds:true, compatibility:["strip_restricted_grants","strip_definers"], threads: 4})

※画像をクリックすると拡大します

手順_1

オブジェクトストレージに問題なくファイルがアップロードされたことを確認します。

手順②_2

ダンプのインポート

取得したダンプをOCI上のMDSにインポートします。

手順①

MySQL ShellでMDSへ接続します。

※画像をクリックすると拡大します

手順①

手順②

loadDump()ユーティリティコマンドを実行してダンプファイルをインポートします。

> util.loadDump("dumpinstance", {osBucketName: "bucket-mdsdump", osNamespace: "XXXXXXXXXX"})

※画像をクリックすると拡大します

手順②

上記エラーはバージョンの違いで発生したものとなります。
以下の通り、「ignoreVersion」オプションを渡すことでエラーが解決します。

> util.loadDump("dumpinstance",{osBucketName:"bucket-mdsdump",osNamespace:"XXXXXXXXXX",ignoreVersion: true})
手順②_2

手順③

MySQLクライアントからMDSへ接続し、テスト用データが存在していることを確認します。

※画像をクリックすると拡大します

手順③_1 手順③_2

最後に

以上でDumpInstanceを用いたMDSインスタンスへのデータ移行の検証が完了しました。
MySQL Shellが提供するユーティリティを使用することによって、バージョンが異なってもオンプレのデータをクラウド上へ簡単に移行できることが確認できました。

今回は非常にシンプルに一部の機能やオプションのみに触れましたが、それ以外にも様々なオプションがあるので、公式サイトをご参照の上、検証することを推奨します。

最後までお読みいただき、ありがとうございました。


RECENT POST「エンジニアリング」の最新記事


MySQL Database Serviceを触ってみた(DumpInstance編)