Oracle MySQL Database Serviceのインポート・エクスポート


  • Oracle MySQL Database Serviceの使い方メモ〜その2
  • Oracle MySQL Database Serviceのインポート・エクスポート (mysqldump, MySQL Client, MySQL Workbench)

はじめに

Oracle Cloud Infrastructure (OCI) でマネージドサービスとして利用可能なOracle MySQL Database Serviceにおけるインポート・エクスポート操作を確認しました。Bastion (踏み台) サーバー上のmysqldumpとMySQL Clientを利用した場合と、クライアント環境のMySQL Workbenchを利用した場合を確認しました。結論はOracle MySQL Database Serviceにインポートする際にSET @@GLOBAL.GTID_PURGEDが含まれていると権限が足りないと怒られるので、エクスポートする際に--set-gtid-purged=OFFオプションを付与することがポイントです。

検証環境

  • MySQLバージョン : 8.0.22-u2-cloud (Oracle MySQL Database Service)
  • Oracle-Linux-8.2-2020.11.10-0 (OCI Compute VM) : Bastion (踏台) サーバとして利用
  • MySQL Ver 8.0.21 for Linux on x86_64 (Source distribution) : Bastionサーバ上のMySQL Clientとして利用
  • macOS 10.15.7 Catalina : クライアント環境
  • MySQL Workbench 8.0 Version 8.0.22 : クライアント上にインストール

OCI上の検証環境の構築方法は前回の記事を参照ください。
Oracle MySQL Database Serviceのインスタンスを作ってMySQL Workbenchから接続してみた

Bastionサーバ上でエクスポート・インポートを実施する

概要

Oracle MySQL Database Serviceインスタンスはプライベート・エンドポイントにアクセス可能なBastionサーバ上でmysqldump, MySQL Clientを実行し、Oracle MySQL Database Serviceにおけるインポート・エクスポートを行います。作業のイメージとしては下記のアーキテクチャ図を確認ください。エクスポートによるDumpファイルが生成場所、インポートのためのDumpファイルの配置場所はBastionサーバとなります。

失敗例

--set-gtid-purged=OFFオプション無しで失敗例を記します。Oracle MySQL Database Serviceインスタンス上のtestスキーマに対して下記エクスポート操作をBastionサーバ上で実施しました。

$ mysqldump --single-transaction --host [プライベートIPアドレス] -u [管理者ユーザー名] -p test > /tmp/mysqldump_test.dump
Enter password: 
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events. 

警告が出ますがDumpファイルは問題なく生成されています。

$ ls /tmp/mysqldump_test.dump
/tmp/mysqldump_test.dump

次にOracle MySQL Database Serviceインスタンスにインポートしてみます。

mysql --host [プライベートIPアドレス] -u [管理者ユーザー名] -p test < /tmp/mysqldump_test.dump
Enter password: 
ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER, SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation

管理者ユーザーに付与されている権限が不足しているとエラーがでて失敗します。

成功例

--set-gtid-purged=OFFオプションを付与してmysqldumpコマンドを実施します。

$ mysqldump --single-transaction --set-gtid-purged=OFF --host [プライベートIPアドレス] -u [管理者ユーザー名] -p test > /tmp/mysqldump_test.dump
Enter password: 

警告も表示されず、問題なく成功します。次にOracle MySQL Database Serviceインスタンスにインポートしてみます。

mysql --host [プライベートIPアドレス] -u [管理者ユーザー名] -p test < /tmp/mysqldump_test.dump
Enter password: 

インポートも問題なく実行できました。
mysqldumpのオプションについては公式マニュアルを確認ください。

クライアント上のMySQL Workbenchからのエクスポート・インポート

概要

Bastionサーバ経由でOracle MySQL Database Serviceにアクセスするように設定したクライアント環境上のMySQL Workbenchからインポート・エクスポートを行います。作業のイメージとしては下記のアーキテクチャ図を確認ください。エクスポートによるDumpファイルが生成場所、インポートのためのDumpファイルの配置場所はクライント環境となります。

MySQL Workbenchの接続方法については前回の記事を参照ください。

エクスポート操作

MySQL Workbench起動後に接続情報のタイルを選択し接続、画面左のManagementメニューよりData Exportメニューを選択します。画面右上のAdvanced Optionよりset-gtid-purged - Add 'SET @@GLOBAL.GTID_PURGED' to the outputの値をOFFに設定し、画面右上のReturnボタンを選択して元の画面に戻ります。

Table to Exportよりエクスポート対象となるスキーマとテーブルを選択してください。画面下部のExport to Dump Project FolderにDumpファイルの出力先のフォルダPATHを入力し、画面右下のStart Exportボタンを選択して、エクスポートを実行します。

インポート操作

画面左のManagementメニューよりData Exportメニューを選択します。Import from Dump Project FolderにインポートするDumpファイルが存在するフォルダPATHを入力します。画面下部の選択メニューより、インポート対象となるスキーマとテーブルを選択してください。画面右下のStart Importボタンを選択して、インポート操作を実行します。

関連情報

公式サイト
Oracle Cloud Infrastructure Documentation MySQL Database
MySQL 5.6 リファレンスマニュアル mysqldump — データベースバックアッププログラム