たぶん動く...

多分GIS系の人。あくまで個人的見解であり、所属団体を代表するものではありません。

データベースサービスからローカルにdumpファイルを作成せず直接ストレージサービスに格納する (Azure編)

前回の記事では、AWSRDBからS3へEC2で一時ファイルを作成することなくdumpファイルを格納するコマンドを紹介しました。
今回はそのAzure編でAzure Database for MySQLフレキシブルサーバからBLOBコンテナーへVMに一時ファイルを作成することなくdumpファイルを格納するコマンドの紹介になります。
今回は、azcopyコマンドで実施してみます。

Mysqlフレキシブルサーバのdumpを直接BLOBコンテナーへ出力する

以下は、mysqlのdumpをgzip圧縮しazcopyコマンドで直接BLOBコンテナーに出力する例です。--from-toオプションでPipeBlobを指定します。

mysqldump -p -h <Server Name>.mysql.database.azure.com -u <USERNAME> <DB Name> | gzip |  azcopy cp https://[account].blob.core.windows.net/[container]/[path/to/directory]/<dumpfile>.sql.gz  --from-to PipeBlob

SASトークンが必要な場合は、BLOBのURLの後ろにSASの文字列を追加します。

BLOBコンテナーからdumpを直接MySQLフレキシブルサーバへ直接インポートする

BLOBコンテナーに保管しているgzip圧縮されたdumpファイルをMysqlフレキシブルサーバにインポートする例です。 --from-toオプションでBlobPipeを指定します。

azcopy cp https://[account].blob.core.windows.net/[container]/[path/to/directory]/<dumpfile>.sql.gz --from-to BlobPipe | zcat | mysql -p -h <Server Name>.mysql.database.azure.com -u <USERNAME> <DB Name>

補足

上記の処理が使用できるのは比較的最近のバージョンのようです。当初 version 10.6.0を使用していましたが、上手くいかず、記事を書いている時点で最新の10.18.1で実行したところ実行できました。

参考文献

learn.microsoft.com

stackoverflow.com