このトピックでは、データベースインスタンスに対してセキュアアクセスプロキシ機能を有効にした後、MySQLプロトコルを使用してデータベースインスタンスにアクセスする方法について説明します。
前提条件
セキュアアクセスプロキシ機能は、データベースインスタンスに対して有効になっています。 詳細については、「セキュアアクセスプロキシ機能の有効化」をご参照ください。
プロキシエンドポイントを使用してデータベースインスタンスにアクセスする権限があります。 詳細については、「プロキシエンドポイントを使用したデータベースインスタンスへのアクセス許可の申請」をご参照ください。
使用上の注意
データベースインスタンスがSecurity Collaborationモードで管理されている場合、セキュリティルールの影響を受けます。 クエリごとに最大100,000行を返すことができます。
データベースインスタンスがセキュリティルールの影響を受けないようにする場合は、データベースコンソールで提供される接続アドレスを使用してデータベースインスタンスにアクセスするか、DMSテクニカルサポートに連絡して特定のシナリオを評価してください。
データベースインスタンスがSecurity Collaborationモードで管理されていない場合、クエリごとに返される行の最大数をカスタマイズすることはできません。 デフォルトでは、各クエリに返される行の最大数は3000です。
制限事項
MySQLクライアントに設定されたアイドルタイムアウト期間は900秒を超えることはできません。
データベース接続プール機能を使用する場合、2つの連続した接続プールの障害検出の間隔は900秒を超えることはできません。
データベース接続プール機能を使用し、間隔を750秒に設定することを推奨します。
例
コマンド、SQLクライアント、またはプログラムコードを使用して、セキュアなアクセスプロキシ機能が有効になっているデータベースインスタンスにアクセスできます。
MySQLコマンドの使用
構文:
mysql -h<host> -P<port> -u<user_name> -p<password> <database> -e '<sql_statements>'
下表に、各パラメーターを説明します。
パラメーター | 説明 |
host | インスタンスのドメイン名。 インスタンスの [Secure access proxy] の詳細ページで、MySQLプロトコルを介してインスタンスにアクセスするために使用されるパブリックまたは内部プロキシエンドポイントでドメイン名を表示できます。 |
port | インスタンスのポート番号。 例: 3306。 インスタンスの [Secure access proxy] の詳細ページで、MySQLプロトコル経由でインスタンスにアクセスするために使用されるパブリックまたは内部プロキシエンドポイントのポート番号を表示できます。 |
user_name | 承認後にDMSが割り当てたAccessKey ID。 AccessKey IDは、インスタンスの [Secure Access Proxy] 詳細ページの [権限付与情報] セクションで確認できます。 |
password | 承認後にDMSが割り当てたAccessKey Secret。 AccessKey Secretは、インスタンスの [Secure Access Proxy] 詳細ページの [権限付与情報] セクションで確認できます。 |
削除 | アクセスするデータベースインスタンスの名前。 |
sql_statements | 実行するSQLステートメント。 例: SHOW DATABASES。 |
サンプルコード:
mysql -hdpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com -P3306 -uAccessID -pAccessSecret Schema -e 'SHOW DATABASES'
プログラムコードの使用
この例では、Python 2が使用されています。
// dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com:3306: the domain name and port number used to connect to the instance. You can view the domain name and port number in the proxy endpoint used to access the instance over the MySQL protocol on the Secure Access Proxy details page of the instance.
// schema: the name of the database instance that you want to access.
String url = "jdbc:mysql://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com:3306/schema";
Properties properties = new Properties();
// AccessID: the AccessKey ID used to access the instance. You can view your AccessKey ID in the Authorization Information section on the Secure Access Proxy details page of the instance.
properties.setProperty("user", "AccessID");
// AccessSecret: the AccessKey secret used to access the instance. You can view your AccessKey secret in the Authorization Information section on the Secure Access Proxy details page of the instance.
properties.setProperty("password", "AccessSecret");
try (Connection connection = DriverManager.getConnection(url, properties)) {
try (Statement statement = connection.createStatement()) {
// Use the execute() method to execute an SQL statement. In this example, the SHOW DATABASES statement is executed. You can also execute other SQL statements.
statement.execute("SHOW DATABASES");
ResultSet resultSet = statement.getResultSet();
while (resultSet.next()) {
System.out.println(resultSet.getString(1));
}
}
} catch (Exception e) {
e.printStackTrace();
}
import pymysql
try:
# host: the domain name of the instance.
# port: the port number used to connect to the instance.
# user: the AccessKey ID used to access the instance. You can view your AccessKey secret in the Authorization Information section on the Secure Access Proxy details page of the instance.
# password: the AccessKey secret used to access the instance. You can view your AccessKey secret in the Authorization Information section on the Secure Access Proxy details page of the instance.
# database: the name of the database instance that you want to access.
conn = pymysql.connect(host='dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com', port=3306, user='AccessID', password="AccessSecret",database ='schema')
cur = conn.cursor(pymysql.cursors.DictCursor)
# Use the execute() method to execute an SQL statement. In this example, the SHOW DATABASES statement is executed. You can also execute other SQL statements.
cur.execute('SHOW DATABASES')
rs = cur.fetchall()
print rs
finally:
cur.close()
conn.close()
var mysql = require('mysql');
var connection = mysql.createConnection({
// host: the domain name of the instance.
host : 'dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com',
// user: the AccessKey ID used to access the instance. You can view your AccessKey secret in the Authorization Information section on the Secure Access Proxy details page of the instance.
user : 'AccessID',
// password: the AccessKey secret used to access the instance. You can view your AccessKey secret in the Authorization Information section on the Secure Access Proxy details page of the instance.
password : 'AccessSecret',
// port: the port number used to connect to the instance.
port : '3306',
// database: the name of the database instance that you want to access.
database : 'schema'
});
connection.connect();
// Use the execute() method to execute an SQL statement. In this example, the SHOW DATABASES statement is executed. You can also execute other SQL statements.
connection.query('SHOW DATABASES', function(err, result) {
console.log(result);
});
connection.end();
SQLクライアントの使用
この例では、Navicatクライアントが使用されています。 次のパラメーターを設定します。
Host: インスタンスのドメイン名。
ポート: インスタンスへの接続に使用されるポート番号。
ユーザー名: インスタンスへのアクセスに使用されるAccessKey ID。
パスワード: インスタンスへのアクセスに使用されるAccessKeyシークレット。