MySQL Shellを使用した、MySQL DatabaseのAzureからOCIへの移動 (2023/06/30)
MySQL Shellを使用した、MySQL DatabaseのAzureからOCIへの移動 (2023/06/30)
https://blogs.oracle.com/mysql/post/moving-mysql-databases-from-azure-to-oci-using-mysql-shell
投稿者:Scott Stroz | MySQL Developer Advocate
最近の投稿では、AWSで実行されているMySQLから、MySQL Shellを使用する2つのコマンドのみでOracle Cloud Infrastructure (OCI)で実行されているMySQL HeatWave Databaseインスタンスにデータを移動する方法について説明しました。この投稿では、同様のプロセスを使用してMicrosoft AzureからOCIにデータを移動する方法を紹介します。
前提条件
始める前に必要なものがいくつかあります。
- OCIアカウント。所有していない場合は、ここでアカウントにサインアップできます。
- MySQL HeatWaveデータベースインスタンス。
- OCIユーザー用にインストールおよび構成されたOCIコマンドライン・インタフェース(CLI)。
- これは、AzureからMySQL HeatWave Databaseインスタンスにデータをロードするときに使用されます。
- MySQL Shellコマンドを実行するシステムにインストールされる。
- 次のものを持つAzureアカウント:
- ダンプされるAzure MySQLデータベース
- Azureストレージ・アカウント
- データベースをダンプできるAzure blobストレージ・コンテナ
- Azure CLIは、前述のAzureユーザー用にインストールおよび構成されています。
- このデモでは、Azure CLIでSASトークンを使用するように構成しました。
データベースのダンプ
Azure MySQLデータベースをダンプするコマンドは、以前のポストで使用したコマンドと同じです。Azureストレージ・コンテナにデータをダンプする場合の相違点は、オプション・オブジェクトにあります。
開始するには、MySQL ShellインスタンスをRDS MySQL Databaseに接続します:
mysqlsh {user name}@{database server}
ここで、{user name}はデータベース・ユーザー、{database server}はデータベース・サーバーのIPアドレスまたはドメイン名です。MySQLシェルを使用して過去にこのインスタンスに接続していない場合(または、MySQL Shellにパスワードを記憶していない場合)、パスワードを入力するよう求められます。接続すると、画面は次のイメージのようになります。
簡略化のため、この投稿では、パブリックにアクセス可能なAzure MySQLインスタンスに接続しています(そのため、ドメイン名をぼやけた)。通常は、RDS MySQLインスタンスに接続することをお薦めしますが、データベース・インスタンスを世界に公開する場合は、十分に注意してください。
Azureデータベースに接続したら、次のコマンドを使用して選択したスキーマをダンプします。
util.dumpSchemas(["my_database"], "my-database-dump", {azureStorageAccount: "shelldemo", azureContainerName: "db-dumps", threads:8, ocimds: true, compatibility: ["strip_definers"]})
最初の引数は、ダンプするスキーマ名の配列です。2番目の引数は、ストレージ・コンテナに作成されるフォルダの名前です。3番目の引数は、オプションJSONオブジェクトです。様々な引数が表す内容を説明します。
- azureStorageAccount - ストレージ・コンテナを管理するストレージ・アカウントの名前
- azureContainerName - データがダンプされるストレージ・コンテナの名前
- thread - ダンプの実行に使用するスレッドの数。デフォルトは4
- ocimds - このデータベースを最終的にOCIのMySQL HeatWaveインスタンスにロードするため、これをtrueに設定します。trueに設定すると、MySQL Shellは、データベースがOCIで実行可能であることを確認するために互換性チェックを実行します。
compatibility
- MySQLデータベースをダンプするときに、データベースの互換性を確認するオプションを指定できます。この例では、strip_definers互換オプションを使用します。このオプションは、ストアド・プロシージャ、ユーザー定義関数などの定義者をダンプから削除 - データをロードすると、定義者はMySQLシェルが接続されているユーザーになります。
データベースのサイズによっては、このプロセスに時間がかかる場合があります。プロセスが完了すると、次のような出力が表示されます。
NOTE: Backup lock is not available to the account 'sstroz'@'%' and DDL changes will not be blocked. The dump may fail with an error if schema changes are made while dumping.
Acquiring global read lock
Global read lock acquired
Initializing - done
1 schemas will be dumped and within them 8 tables, 0 views.
Gathering information - done
All transactions have been started
Global read lock has been released
Writing global DDL files
Running data dump using 8 threads.
NOTE: Progress information uses estimated values and may not be accurate.
Writing schema metadata - done
Writing DDL - done
Writing table metadata - done
Starting data dump
...
101% (137.38K rows / ~135.94K rows), 0.00 rows/s, 0.00 B/s uncompressed, 0.00 B/s compressed
Dump duration: 00:00:00s
Total duration: 00:00:02s
Schemas dumped: 1
Tables dumped: 8
Uncompressed data size: 22.90 MB
Compressed data size: 5.47 MB
Compression ratio: 4.2
Rows written: 137382
Bytes written: 5.47 MB
Average uncompressed throughput: 22.90 MB/s
Average compressed throughput: 5.47 MB/s
util.dumpTables()またはutil.dumpInstanceを使用している場合は、ここで使用したオプションJSONオブジェクトも機能します。
データベースをダンプしたので、このデータをMySQL HeatWaveインスタンスにリストアできます。
OCIへのデータベースのロード
ここで、MySQL ShellをMySQL HeatWaveインスタンスに接続する必要があります。MySQL HeatWaveインスタンスに接続するには、いくつかの方法があります。ここに記載された手順に従って設定されたVPN接続を使用しています。
再度、次のようなコマンドを使用してMySQLインスタンスに接続します。
mysqlsh {user name}@{database server}
ここで、{user name}はデータベース・ユーザー、{database server}はデータベース・サーバーのIPアドレスまたはドメイン名です。MySQL Shellを使用して過去にこのインスタンスに接続していない場合(または、MySQL Shellにパスワードを記憶していない場合)、パスワードを入力するよう求められます。
OCIでMySQLに接続すると、次のコマンドが実行されます。
util.loadDump("my-database-dump", {azureStorageAccount: "shelldemo", azureContainerName: "db-dumps", threads:8})
最初の引数my-database-dumpは、ダンプの実行時に作成されたAzureストレージ・コンテナ内のフォルダの名前です。オプションJSONオブジェクトの2番目の引数には、次の2つのプロパティが含まれます。
- azureStorageAccount - ストレージ・コンテナを管理するストレージ・アカウントの名前。
- azureContainerName - データがダンプされるストレージ・コンテナの名前。
- thread - 使用するスレッドの数。ここでも、デフォルトは4
データベースが大きい場合、このプロセスには時間がかかります。プロセスが完了すると、次のテキストのようなロード・プロセスに関する情報が表示されます。
Loading DDL and Data from Azure Container=db-dumps, prefix='my-database-dump' using 8 threads.
Opening dump...
Target is MySQL 8.0.33-u3-cloud (MySQL Database Service). Dump was produced from MySQL 8.0.32
Fetching dump data from remote location...
Listing files - done
Scanning metadata - done
Checking for pre-existing objects...
Executing common preamble SQL
Executing DDL - done
Executing view DDL - done
Starting data load
1 thds loading \ 100% (22.85 MB / 22.85 MB), 10.28 MB/s, 5 / 6 tables done
Executing common postamble SQL
Recreating indexes - done
6 chunks (136.37K rows, 22.85 MB) for 6 tables in 1 schemas were loaded in 4 sec (avg throughput 9.99 MB/s)
0 warnings were reported during the load.
エラーがないかぎり、OCIで実行されているこの新しいデータベースの使用を開始できます。
まとめ
MySQL Shellは、クラウド・ストレージ・バケットとの間でデータをダンプおよびロードするなど、MySQLデータベース・インスタンスを管理するための強力なツールです。このパワーと使いやすさを活用することで、2つのコマンドだけでデータベースをAzureからOCIに移行できます。
コメント
コメントを投稿