問題の現象
ユーザーが移行、同期、または購読タスクを作成する際に、ソースデータベースまたはターゲットデータベースの接続テストが失敗しました。
考えられる原因
Telnetテストが失敗した場合、考えられる原因は以下の通りです。
Telnetテストは成功しましたが、Database Connectは失敗しました。考えられる原因は以下の通りです。
ソースデータベースが存在するネットワークまたはサーバーにセキュリティグループまたはファイアウォールが設定されています。
セキュリティグループの機能はファイアウォールの機能と類似しており、セキュリティグループはクラウド上のデータベースに対するネットワークセキュリティ設定です。
現場の状況に応じて、以下のチェック手順を実施してください:
ソースデータベースが自己構築データベースの場合、ソースデータベースが存在するサーバーにファイアウォールポリシーが設定されているかどうかを確認してください。設定されている場合は、ファイアウォールを無効にしてください。
Windowsシステムの場合:コントロールパネルを開いてWindowsファイアウォールを見つけ、ファイアウォールポリシーが設定されているかどうかを確認してください。
Linuxシステムの場合:iptables -Lコマンドを実行して、サーバーにファイアウォールポリシーが設定されているかどうかを確認してください。
ソースデータベースがTencent Cloudデータベースの場合、ソースデータベースに設定されているセキュリティグループがDTSのIPアドレス範囲を制限しているかどうかを確認してください。制限している場合は、以下の手順に従って変更してください。
接続テストで異常が発生した場合、開放が必要なDTSのIPアドレス範囲が画面に表示されます。具体的には以下の通りです。
1. ソースデータベースにログインします(以下はMySQLを例とします)。インスタンスリストでインスタンスIDをクリックし、インスタンス管理ページに進みます。
2. インスタンス管理ページでセキュリティグループタブを選択し、DTSのSNAT IPアドレス範囲を禁止するポリシーが存在するかどうかを確認してください。
3. DTSのIPアドレス範囲のポリシーを変更し、許可に設定します。
ソースデータベースがサードパーティクラウドベンダーのデータベースである場合は、関連するセキュリティグループ設定を確認してください。
ソースデータベースが送信元IPアドレスを制限しています。
検出方法
MySQLの検出方法
ソースデータベースが配置されているサーバー上で、データ移行タスクに入力したデータベースアカウントとデータベースパスワードを使用してソースデータベースに接続します。接続が正常な場合、ソースデータベースが送信元IPアドレスを制限している可能性があります。
自社構築データベースの場合、データベース上でbind-addressの設定を確認する必要があります。0.0.0.0ではない場合、IPが制限されます。
ソースデータベースがMySQLの場合、MySQLクライアントを使用してソースデータベースに接続し、以下のSQL文を実行してチェックできます。出力結果の許可IPアドレスリストにDTSのSNAT IPアドレスが含まれているかどうかを確認してください。
ユーザーにデータベースの権限を付与する際、許可IPにSNAT IPを含める必要があります。含めない場合、IP制限の問題が発生します。例は以下の通りです:
root@10.0.0.0/8 //許可ユーザーは指定された10.0.0.0/8を通じてアクセスし、その他のIPは制限されます(誤った設定)
root@% //許可ユーザーはすべてのIPにアクセスできます。その中にSNAT IPが含まれている必要があります(正しい設定)。
以下の方法で検証できます。
select host,user,authentication_string,password_expired,account_locked from
mysql.user WHERE user='[\\$Username]'; //[\\$Username]はデータ移行タスクで入力したデータベースアカウントです。
SQL Serverの検出方法
ソースデータベースに、アクセス元IPアドレスを制限しているEndpointまたはTriggerがあるかどうかを確認してください。
PostgreSQLの検出方法
ソース側データベースが他のクラウドデータベースである場合は、まずソース側クラウドデータベースインスタンスのセキュリティアクセスポリシーに制限があるかどうかを確認してください。異なるクラウドベンダーの制限方法に応じて確認してください。
ソース側データベースが自己構築のPostgreSQLデータベースの場合、$PGDATAディレクトリ配下のdataディレクトリに移動し、pg_hba.confファイルを見つけてください。このファイルにdenyポリシーが存在するか、または一部のネットワーク側のIPアドレスからのアクセスのみが許可されているかを確認してください。
local replication all trust
host replication all 127.x.x.1/32 trust
host replication all ::1/128 trust
host all all 0.0.0.0/0 md5
host all all 172.x.x.0/20 md5
MongoDB/Redisの検出方法
自社構築データベースの場合、データベース上でbindの設定を確認する必要があります。0.0.0.0ではない場合、IPが制限されます。
修復方法
1. ソースデータベースがMySQLの場合、ソースデータベースで以下のSQL文を実行し、データ移行に使用するユーザーに再度権限を付与してください。
mysql> grant all privileges on . to '[\\$UserName]'@'%'; //[\\$Username]はデータ移行タスクで入力したデータベースアカウントです。
mysql> flush privileges;
2. ソースデータベースが自社構築データベースの場合、bind-address設定を確認する必要があります。設定に異常がある場合は、以下の手順に従って変更してください。
2.1. /etc/my.cnfファイルに以下の内容を追加します。
説明:
my.cnf設定ファイルのデフォルトパスは/etc/my.cnfです。現場の実際の状況に準じてください。
2.2. データベースを再起動します。
2.3. 設定が有効になっているかどうかを確認します。
3. 検証タスクを再実行します。
SQL Serverの修復方法
ファイアウォールを無効にするか、triggerを無効にしてください。
PostgreSQLの修復方法
1. pg_hba.confファイルにDTSネットワークセグメントを許可するアクセスポリシーを追加してください。または、移行中に一時的にすべてのネットワークセグメントのアクセスポリシーを開放してください。このファイルに次の1行を追加します:
host all all 0.0.0.0/0 md5
2. 変更完了後、データベースインスタンスを再起動して設定を有効にできます:
pg_ctl -D $PGDATA restart
3. 検証タスクを再実行します。
MongoDBの修復方法
MySQLの方法を参考にbind-addressを設定します。 Redisの修復方法
1. redis.confでbind設定を無効にするか、bind設定を0.0.0.0に変更してください。
2. データベースを再起動して設定を有効にし、その後検証タスクを再実行します。
一般的なデータベースのデフォルトポートは以下の通りです。これらのポートが開放されていることを確認してください。ユーザーがデフォルトポートを変更した場合は、実際の状況に応じて開放するポートを変更してください。
ソースデータベースがSQL Serverの場合、ファイル共有サービスポート445も同時に開放する必要があります。
MySQL:3306
SQL Server:1433
PostgreSQL:5432
MongoDB:27017
Redis:6379
VPN/専用線アクセス、CCNアクセス方式を選択した場合は、対応するリンクのガイドを参照してチェックできます。 データベースのアカウントまたはパスワードが正しくありません。
ソースデータベースにログインし、アカウントとパスワードが正しいかどうかを確認します。
同じソースデータベースとターゲットデータベースに対して、あるアクセスタイプ(例:「パブリックネットワーク」)を選択して接続検証に合格した後は、別のアクセスタイプに切り替えることはできません(例:「パブリックネットワーク」から「Direct Connect」への切り替え)。そうしないと、DTSバックエンドのネットワークプロキシが異常を検出し、接続検証でエラーが発生します。