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

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

技術者が語るOracle Cloud

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

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

1.事前準備

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

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

①OCI-CLIの導入と設定

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

・OCI-CLIの導入は以下をご参照ください。
Oracle Cloud Infrastructureドキュメント - CLIのインストール

・OCI-CLIの構成ファイルの設定は以下リンク先の「3. CLIの設定」をご参照ください。
ORACLE CLOUD 公式ブログ - コマンドライン(CLI)でOCIを操作する

②MySQL Shellの導入

・MySQL Shellの導入は、以下リンク先をご参照ください。
Oracle Cloud Infrastructureドキュメント - Connecting to the MySQL DB System with SSH and the MySQL Client

③バケットの作成

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

oc21_01.png

④移行用データの作成

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

※画像をクリックすると新しいタブで開きます

oc21_02.png

oc21_03.png

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コアの数に設定することが推奨されています。

※画像をクリックすると新しいタブで開きます

oc21_04.png

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

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

※画像をクリックすると新しいタブで開きます

oc21_05.png

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

手順②

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

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

※画像をクリックすると新しいタブで開きます

oc21_06.png

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

oc21_07.png

3.ダンプのインポート

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

手順①

MySQL ShellでMDSへ接続します。

※画像をクリックすると新しいタブで開きます

oc21_08.png

手順②

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

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

※画像をクリックすると新しいタブで開きます

oc21_09.png

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

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

oc21_10.png

手順③

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

※画像をクリックすると新しいタブで開きます

oc21_11.png

oc21_12.png

4.最後に

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

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

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


コラム「MySQL Database Serviceを触ってみた」シリーズ
第1回:MySQL Database Serviceを触ってみた(構築編)
第2回:MySQL Database Serviceを触ってみた(接続編)
第3回:MySQL Database Serviceを触ってみた(バックアップ&リストア編)