- 印刷する
- PDF
Source DBと Target DB のアクセス設定
- 印刷する
- PDF
VPC環境で利用できます。
マイグレーション前に Source DBと Target DBの設定を確認し、データベースへのアクセスのためにアクセス情報を設定します。次の中からマイグレーションする状況に合う場合を選択し、設定方法を確認します。
- 同じ VPC内でマイグレーション: Source DBが NAVERクラウドプラットフォーム内の VPCに存在し、Target DBを同じ VPCで作成する場合
- Public Subnet内の Target DBにマイグレーション: Source DBと Target DBのドメインが異なり、Target DBを Public Subnetに作成する場合
- Private Subnet/Public Subnet内の Target DBにマイグレーション: Source DBと Target DBのドメインが異なり、Target DBを Private Subnetに作成した場合、または Public Subnetに作成したが Publicドメインを割り当てられていない場合
事前準備
Source DBと Target DBの接続する前に以下の事前タスクを順に行います。
NAVERクラウドプラットフォームコンソールで、Source DBを作成した VPCに Target DBを作成します。
- Target DBは Source DBと DBMSの種類が同様である必要があります。
- Source DBと Majorバージョンが同じ DBMSバージョンを推奨します。
- Target DBの作成方法に関する詳細は、Cloud DB for MySQL を開始するをご参照ください。
Source DBをクローンするために、Source DBのバイナリログ設定を確認します。
- 必須事項: バイナリログの有効化
log_bin
の値がON
と表示されていることを確認server_id
値を指定
- 推奨事項: バイナリログの保存期間を5日以上に設定
- 設定変数
expire_logs_days
またはbinlog_expire_logs_seconds
の値を設定 - バイナリログの保存期間がマイグレーション時間より短い場合は、クローン時に以下のようなエラーメッセージが発生します。この場合、Source DB設定の変更後にマイグレーションの削除と再作成が必要です。
Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
- 設定変数
- 必須事項: バイナリログの有効化
Source DBの Character Set/Collationと Definerアカウントをチェックします。
- Cloud DB for MySQLは、[utf8、utf8mb4、euckr] Character Setに対してのみサポートします。Source DB上にその他の設定になっている場合は、変更してから実行します。
- Source DBで使用する Collationが Target DBでもサポートするか確認します。
ex) 8.0以前バージョンでは utf8mb4 0900 ai_ciをサポートしません。 - Source DB上で使用中の Definerアカウントは、アカウント名と許可ホスト名が同様に Cloud DB for MySQLに登録されている場合にマイグレーションを実行できます。
- Source DB Character Setチェッククエリ
SELECT character_set_name FROM information_schema.TABLES T, information_schema.COLLATION_CHARACTER_SET_APPLICABILITY CCSA WHERE CCSA.collation_name = T.table_collation AND TABLE_SCHEMA NOT IN ( 'information_schema', 'mysql', 'performance_schema', 'sys' ) AND CCSA.character_set_name NOT IN ( 'utf8', 'utf8mb3', 'utf8mb4', 'euckr' ); SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA T WHERE SCHEMA_NAME NOT IN ( 'information_schema', 'mysql', 'performance_schema', 'sys' ) AND DEFAULT_CHARACTER_SET_NAME NOT IN ( 'utf8', 'utf8mb3', 'utf8mb4', 'euckr');
- Source DB Collationのチェッククエリ
SELECT DISTINCT (table_collation) as table_collate FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys'); SELECT DISTINCT (COLLATION_CONNECTION) as table_collate FROM information_schema.views WHERE TABLE_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys'); SELECT DISTINCT (COLLATION_CONNECTION) as table_collate FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys'); SELECT DISTINCT (DATABASE_COLLATION) as table_collate FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys'); SELECT DISTINCT (COLLATION_CONNECTION) as table_collate FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys'); SELECT DISTINCT (DATABASE_COLLATION) as table_collate FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys'); SELECT DISTINCT (DEFAULT_COLLATION_NAME) as table_collate FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys');
- Source DB Definerアカウントのチェッククエリ
SELECT DEFINER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA NOT IN ( 'information_schema', 'mysql', 'performance_schema', 'sys' ) AND SECURITY_TYPE = 'DEFINER'; SELECT DEFINER FROM information_schema.VIEWS WHERE table_schema NOT IN ( 'information_schema', 'mysql', 'performance_schema', 'sys' ) AND SECURITY_TYPE = 'DEFINER' ;
(MySQL 5.7から 8.0にマイグレーションする場合) sql_modeをチェックします。
- MySQL 5.7バージョンと MariaDB 10.1.7以上バージョンで Default値でサポートする sql mode="NO AUTO CREATE USER"設定は MySQL 8.0バージョンからはサポートしません。
- Source DBにその設定が適用されている場合は、以下の内容を参照して対処し、マイグレーションを行います。
- sql_mode設定のチェッククエリ
SELECT ROUTINE_SCHEMA, ROUTINE_NAME, SQL_MODE FROM information_schema.routines WHERE ROUTINE_SCHEMA NOT IN ('sys','mysql'); SELECT TRIGGER_SCHEMA, TRIGGER_NAME, sql_mode FROM information_schema.triggers WHERE TRIGGER_SCHEMA NOT IN ('sys','mysql'); SELECT @@sql_mode ;
- sql_mode互換性イシューの対処法
- Source DB > [DB Config管理]で sql_mode="NO_AUTO_CREATE_USER"削除設定 - Source DB > Procedure、Function、Triggerを削除してから再作成 1. Procedure、Function、Triggerに対してのみ dropと create構文が作成された sqlファイルを作成 $ mysqldump -u {ユーザー名} -p -h {Source DBホスト名} --set-gtid-purged=OFF --routines --triggers --no-create-info --no-data --no-create-db --add-drop-trigger {ユーザー DB} > backup.sql 2. backup.sqlファイル内の NO_AUTO_CREATE_USER構文をすべて削除 ex) SET sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' => SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' 3. 適用する $ mysql -u {ユーザー名} -p -h {Source DBホスト名} {ユーザー DB} < backup.sql
同じ VPC内でマイグレーション
Source Dbが NAVERクラウドプラットフォーム内の VPCに存在し、Target DBを同じ VPCに作成する場合にアクセス情報を設定する方法を説明します。
次の手順を順に行います。
1. Target DBアクセス設定
Target DBから Source DBにアクセスできるように、Target DBサーバに適用した ACGの Outboundルールを設定します。
ここでは、アクセス設定に必要な内容のみ説明します。ACG設定に関する詳細は、Serverご利用ガイドの ACGをご参照ください。
ACGルールを設定する方法は、次の通りです。
- Target DBの詳細情報で Target DBサーバに適用した ACG を確認します。
- ACG 項目の をクリックし、ACG画面に移動します。
- Target DBに適用した ACGをクリックし、 [ACG設定] ボタンをクリックします。
- [Outbound] タブをクリックします。
- 以下のルールを入力し、 [追加] ボタンをクリックします。
- プロトコル : TCPを選択
- 目的地 : Source DBを作成したサブネットの IPアドレス範囲を入力(例) 10.0.0.0/24)
- 許可ポート : Source DBのアクセスポートを入力
- [適用] ボタンをクリックします。
2. Source DBアクセス設定
Source DBのアクセス情報を設定します。Source DBに適用した ACGルールと ACLを設定します。
Source DBサーバの ACG設定
Source DBサーバのファイアウォール(ACG)を
設定して Target DBからアクセスできるように設定します。
以下のトラフィックを許可するように、Source DBサーバに適用された ACGの Inboundルールを修正します(ACGを参照)。- プロトコル: TCP
- アクセスポート: Target DBを作成したサブネットの IPアドレスの範囲(例) 10.0.0.0/24)
- 許可ポート: Target DBのアクセスポート
以下のような場合、Source DBに Outboundを設定します。
- Source DBが ACGではなく NACLポリシーを使用する NAVERクラウドプラットフォームサーバ
- NAVERクラウドプラットフォームサーバでない場合
- ACGは statefulに従うため、outboundを別途設定しなくても可能です。
- Network ACLは statelessに従うため、outboundを設定します。
Source DBアカウント作成と ACL設定
Source DBと Target DBを接続するには、以下のアカウントを作成して ACLに追加します(DB User管理を参照)。
- アカウントのアクセス IPアドレス(Host): Target DBを作成されたサブネット IPアドレスの範囲
- アカウントの DB権限
- データベースのバックアップとクローンのための権限を含むように設定
- マイグレーションに必要な最小権限項目を参照
- パスワード: 必ず
mysql_native_password
形式で作成されたパスワードを使用(MySQL起動/停止とアクセスフローを参照)
Public Subnet内の Target DBにマイグレーション
Source DBと Target DBのドメインが異なり、Target DBを Public Subnetに作成する場合にアクセス情報の設定方法を説明します。
次の手順を順に行います。
- Target DBと Source DBに Publicドメインを割り当てます(Publicドメイン管理を参照)。
- 1. Target DBアクセス設定
- 2. Source DBアクセス設定
1. Target DBアクセス設定
Target DBから Source DBにアクセスできるように、Target DBサーバに適用した ACGの Outboundルールを設定します。
ここでは、アクセス設定に必要な内容のみ説明します。ACG設定に関する詳細は、Serverご利用ガイドの ACGをご参照ください。
ACGルールを設定する方法は、次の通りです。
- Target DBの詳細情報で Target DBサーバに適用した ACG を確認します。
- ACG 項目の をクリックし、ACG画面に移動します。
- Target DBに適用した ACGをクリックし、 [ACG設定] ボタンをクリックします。
- [Outbound] タブをクリックします。
- 以下のルールを入力し、 [追加] ボタンをクリックします。
- プロトコル : TCPを選択
- 目的地 : Source DBの Publicドメインの IPアドレスを入力(例) 101.101.220.90/32)
- 許可ポート : Source DBのアクセスポートを入力
- [適用] ボタンをクリックします。
2. Source DBアクセス設定
Source DBのアクセス情報を設定します。Source DBに適用した ACGルールと ACLを設定します。
Source DBサーバの ACG設定
Source DBサーバのファイアウォール(ACG)を設定して、Target DBからアクセスするように設定します。以下のトラフィックを許可するように、Source DBサーバに適用された ACGの Inboundルールを修正します。
- プロトコル: TCP
- アクセスソース: Target DBに割り当てられた Publicドメイン IPアドレス(例) 101.101.220.246/32)
- 許可ポート: Target DBのアクセスポート
以下のような場合、Source DBに Outboundを設定します。
- Source DBが ACGではなく NACLポリシーを使用する NAVERクラウドプラットフォームサーバ
- NAVERクラウドプラットフォームサーバでない場合
- ACGは statefulに従うため、outboundを別途設定しなくても可能です。
- Network ACLは statelessに従うため、outboundを設定します。
Source DBアカウント作成と ACL設定
Source DBと Target DBを接続するには、以下のアカウントを作成して ACLに追加します。
- アカウントのアクセス IPアドレス(Host): Target DBに割り当てられた Publicドメインの IPアドレス
- アカウントの DB権限
- データベースのバックアップとクローンのための権限を含むように設定
- マイグレーションに必要な最小権限項目を参照
- パスワード: 必ず
mysql_native_password
形式で作成されたパスワードを使用(MySQL起動/停止とアクセスフローを参照)
Private Subnet/Public Subnet内の Target DBにマイグレーション
Source DBと Target DBのドメインが異なり、Target DBを Private Subnetに作成する場合にアクセス情報の設定方法を説明します。
Target DBが Public Subnetで作成された場合も、以下の方法で行えます。
次の手順を順に行います。
- Source DBに Publicドメインを割り当てます(Publicドメイン管理を参照)。
- 1. Target DBアクセス設定
- 2. Source DBアクセス設定
1. Target DBアクセス設定
Target DBのアクセス情報を設定します。次の手順を順に行います。
1. NAT Gateway作成
Target DBサーバと接続する NAT Gatewayを作成します。
ここでは、アクセス設定に必要な内容のみ説明します。NAT Gateway作成に関する詳細は、VPCご利用ガイドの NAT Gateway作成をご参照ください。
NAT Gatewayを作成する方法は、次の通りです。
- NAVERクラウドプラットフォームコンソールで、 Services > Networking > VPC メニューを順にクリックします。
- Subnet Managementメニューをクリックします。
- [Subnet作成]ボタンをクリックします。
- Public NatGateway用途の Subnetを作成します。
- NAT Gateway メニューをクリックします。
- [NAT Gateway作成] ボタンをクリックします。
- グローバル NAT Gatewayを作成します。
NAT Gateway名を入力し、Target DBが作成された VPC とサブネット を選択します。
- [作成] ボタンをクリックします。
- 作成した NAT Gatewayの IPアドレス を確認します。
2. Route Table接続
Route Tableを作成し、ルーティングルールに NAT Gatewayを追加します。Target DBがあるサブネットに Route Tableを適用します。
ここでは、アクセス設定に必要な内容のみ説明します。Route Tableに関する詳細は、VPCご利用ガイドの Route Tableをご参照ください。
Route Tableを適用する方法は、次の通りです。
- NAVERクラウドプラットフォームコンソールで、 Services > Networking > VPC メニューを順にクリックします。
- Route Table メニューをクリックします。
- [Route Table作成] ボタンをクリックします。
- Route Table名を入力し、 VPC と Subnetサポートタイプ を選択します。
- VPC : Target DBを作成した VPCを選択
- Subnetサポートタイプ :
- Target DBが Private Subnetの場合に、Public NatGatewayがある グローバル を選択
- Target DBが Public Subnetの場合に、 グローバル を選択
- [作成] ボタンをクリックします。
- 作成した Route Tableをクリックし、 [Route設定] ボタンをクリックします。
- 必要な情報を入力し、 [作成] ボタンをクリックします。
- Destination : Source DBに割り当てられた Publicドメインの IPアドレスを入力(例) 101.101.220.90/32)
- Target Type : NATGWを選択
- Target Name : 1. NAT Gateway作成で作成した NAT Gatewayを選択
- [確認] ボタンをクリックします。
- Route Tableをクリックし、 [関連 Subnet設定] ボタンをクリックします。
- Subnet名 で NatGatewayを作成したサブネットを選択し、[作成] ボタンをクリックします。
- [確認] ボタンをクリックします。
3. Target DBサーバ ACGの設定
Target DBから Source DBにアクセスできるように、Target DBサーバに適用した ACGの Outboundルールを設定します。
ここでは、アクセス設定に必要な内容のみ説明します。ACG設定に関する詳細は、Serverご利用ガイドの ACGをご参照ください。
ACGルールを設定する方法は、次の通りです。
- Target DBの詳細情報で Target DBサーバに適用した ACG を確認します。
- ACG 項目の をクリックし、ACG画面に移動します。
- Target DBに適用した ACGをクリックし、 [ACG設定] ボタンをクリックします。
- [Outbound] タブをクリックします。
- 以下のルールを入力し、 [追加] ボタンをクリックします。
- プロトコル : TCPを選択
- 目的地 : Source DBの Publicドメインの IPアドレスを入力(例) 101.101.220.90/32)
- 許可ポート : Source DBのアクセスポートを入力
- [適用] ボタンをクリックします。
2. Source DBアクセス設定
Source DBのアクセス情報を設定します。Source DBに適用した ACGルールと ACLを設定します。
Source DBサーバの ACG設定
Source DBサーバのファイアウォール(ACG)を設定して、Target DBからアクセスするように設定します。以下のトラフィックを許可するように、Source DBサーバに適用された ACGの Inboundルールを修正します。
- プロトコル: TCP
- アクセスソース: 1. NAT Gateway作成で作成した NAT Gatewayの IPアドレス
- 許可ポート: Target DBのアクセスポート
以下のような場合、Source DBに Outboundを設定します。
- Source DBが ACGではなく NACLポリシーを使用する NAVERクラウドプラットフォームサーバ
- NAVERクラウドプラットフォームサーバでない場合
- ACGは statefulに従うため、outboundを別途設定しなくても可能です。
- Network ACLは statelessに従うため、outboundを設定します。
Source DBアカウント作成と ACL設定
Source DBと Target DBを接続するには、以下のアカウントを作成して ACLに追加します。
- アカウントのアクセス IPアドレス(Host): 1. NAT Gateway作成で作成した NAT Gatewayの IPアドレス
- アカウントの DB権限
- データベースのバックアップとクローンのための権限を含むように設定
- マイグレーションに必要な最小権限項目を参照
- パスワード: 必ず
mysql_native_password
形式で作成されたパスワードを使用(MySQL起動/停止とアクセスフローを参照)
マイグレーションのために必要な最初権限項目
- Source DBが GTIDモードの場合、以下のコマンドを実行します。
[Target DBが8.0.32バージョン以下の場合]
GRANT PROCESS, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '[ユーザー名]'@'[HOST IPアドレス]';
GRANT SELECT ON mysql.* TO '[ユーザー名]'@'[HOST IPアドレス]';
GRANT SELECT、SHOW VIEW、LOCK TABLES、TRIGGER ON [ユーザー DB]。*TO '[ユーザー名]'@'[HOST IPアドレス]';
[Target DBが8.0.32バージョン以上の場合]
GRANT {RELOAD|FLUSH_TABLES}, PROCESS, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '[ユーザー名]'@'[HOST IPアドレス]';
GRANT SELECT ON mysql.* TO '[ユーザー名]'@'[HOST IPアドレス]';
GRANT SELECT、SHOW VIEW、LOCK TABLES、TRIGGER ON [ユーザー DB]。*TO '[ユーザー名]'@'[HOST IPアドレス]';
- Source DBが GTIDモードでない場合、以下のコマンドを実行します。
GRANT RELOAD, PROCESS , SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '[ユーザー名]'@'[HOST IPアドレス]';
GRANT SELECT ON mysql.* TO '[ユーザー名]'@'[HOST IPアドレス]';
GRANT SELECT、SHOW VIEW、TRIGGER ON [ユーザー DB]。*TO '[ユーザー名]'@'[HOST IPアドレス]';
- GTIDモードでない場合は、Source DBユーザーに[RELOAD]権限が必要であり、ポリシー上の理由によりこれらを付与されない時は、Source DBを GTIDモードに変更してからマイグレーションを行います。
- AWS RDS環境でマイグレーションを行う場合は、権限ポリシー上の理由により GTIDモードに変更してからマイグレーションを行います。
- MySQL 8.0.20バージョン以降に Routine Dumpのためには、[SHOW_ROUTINE]権限が必要です。
- Target DBバージョン8.0.32以降からは Source DBが GTIDモードの場合でも、[RELOAD]または[FLUSH_TABLES]権限が追加として必要です。ポリシー上の理由でこれを付与されなかった場合は、Target DBバージョン8.0.32以下で行います。