通過(guò)MySQL協(xié)議訪問(wèn)實(shí)例
本文介紹應(yīng)用程序如何通過(guò)MySQL協(xié)議訪問(wèn)已開啟安全訪問(wèn)代理的目標(biāo)實(shí)例。
前提條件
實(shí)例已開啟安全訪問(wèn)代理。具體操作,請(qǐng)參見(jiàn)開啟安全訪問(wèn)代理。
您已獲得安全訪問(wèn)代理的授權(quán)。具體操作,請(qǐng)參見(jiàn)申請(qǐng)安全訪問(wèn)代理授權(quán)。
注意事項(xiàng)
開啟安全訪問(wèn)代理的安全協(xié)同實(shí)例受安全規(guī)則的限制,系統(tǒng)規(guī)定單次查詢數(shù)據(jù)最多返回100000行數(shù)據(jù)。
前往DMS
中設(shè)置單次查詢最大返回行數(shù)。若希望避免安全規(guī)則的限制,請(qǐng)使用數(shù)據(jù)庫(kù)控制臺(tái)提供的連接地址訪問(wèn)數(shù)據(jù)庫(kù),或聯(lián)系DMS技術(shù)支持評(píng)估具體場(chǎng)景。
如果是非安全協(xié)同實(shí)例,不支持自主配置查詢最大返回行數(shù)。默認(rèn)查詢最大返回行數(shù)為3000。
使用限制
MySQL客戶端設(shè)置的空閑超時(shí)時(shí)間不能超過(guò)900秒。
如果使用數(shù)據(jù)庫(kù)連接池,則連接池探活間隔不能超過(guò)900秒。
建議使用連接池,并且將連接池探活時(shí)間間隔設(shè)置為750秒。
訪問(wèn)示例
您可以通過(guò)命令行、數(shù)據(jù)庫(kù)管理工具、程序代碼來(lái)訪問(wèn)已開啟安全訪問(wèn)代理的目標(biāo)實(shí)例。
使用MySQL命令行
格式如下:
mysql -h<host> -P<port> -u<user_name> -p<password> <database> -e '<sql_statements>'
參數(shù)說(shuō)明如下:
參數(shù)名 | 說(shuō)明 |
host | 目標(biāo)實(shí)例的連接地址。在安全訪問(wèn)代理頁(yè)面中查看內(nèi)網(wǎng)連接或公網(wǎng)連接的MySQL協(xié)議地址,該地址即為目標(biāo)實(shí)例的連接地址。 |
port | 目標(biāo)實(shí)例的端口號(hào),例如3306。在安全訪問(wèn)代理頁(yè)面的內(nèi)網(wǎng)連接或公網(wǎng)連接的MySQL協(xié)議地址中可以看到端口號(hào)。 |
user_name | 經(jīng)授權(quán)后,DMS為您分配的AccessID。在安全訪問(wèn)代理頁(yè)面的被授權(quán)人列表可以查看自己的AccessID。 |
password | 經(jīng)授權(quán)后,DMS為您分配的AccessSecret。在安全訪問(wèn)代理頁(yè)面的被授權(quán)人列表可以查看自己的AccessSecret。 |
database | 目標(biāo)實(shí)例中的數(shù)據(jù)庫(kù)的名稱。 |
sql_statements | 您要執(zhí)行的SQL命令。例如:SHOW DATABASES。 |
代碼示例如下:
mysql -hdpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com -P3306 -uAccessID -pAccessSecret Schema -e 'SHOW DATABASES'
使用程序
示例的Python為Python 2。
//dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com:3306是目標(biāo)實(shí)例的連接地址與端口號(hào)。可在安全訪問(wèn)代理頁(yè)面的MySQL協(xié)議地址獲取連接地址與端口號(hào)。
//schema是目標(biāo)實(shí)例的數(shù)據(jù)庫(kù)名稱。
String url = "jdbc:mysql://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com:3306/schema";
Properties properties = new Properties();
//AccessID是您的AccessID。可在安全訪問(wèn)代理頁(yè)面的被授權(quán)人列表中查看。
properties.setProperty("user", "AccessID");
//AccessSecret是您的AccessSecret。可在安全訪問(wèn)代理頁(yè)面的被授權(quán)人列表中查看。
properties.setProperty("password", "AccessSecret");
try (Connection connection = DriverManager.getConnection(url, properties)) {
try (Statement statement = connection.createStatement()) {
//使用execute方法執(zhí)行SQL語(yǔ)句。本示例以SHOW DATABASES為例,您也可以換成其它SQL語(yǔ)句。
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為目標(biāo)實(shí)例的連接地址。
#port為目標(biāo)實(shí)例的端口號(hào)。
#user為您的AccessID。可在安全訪問(wèn)代理頁(yè)面的被授權(quán)人列表中查看。
#password為您的AccessSecret。可在安全訪問(wèn)代理頁(yè)面的被授權(quán)人列表中查看。
#database為目標(biāo)實(shí)例的數(shù)據(jù)庫(kù)名稱。
conn = pymysql.connect(host='dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com', port=3306, user='AccessID', password="AccessSecret",database ='schema')
cur = conn.cursor(pymysql.cursors.DictCursor)
#使用execute方法執(zhí)行SQL語(yǔ)句。本示例以SHOW DATABASES為例,您也可以換成其他SQL語(yǔ)句。
cur.execute('SHOW DATABASES')
rs = cur.fetchall()
print rs
finally:
cur.close()
conn.close()
var mysql = require('mysql');
var connection = mysql.createConnection({
//host為目標(biāo)實(shí)例的連接地址。
host : 'dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com',
//user為您的AccessID。可在安全訪問(wèn)代理頁(yè)面的被授權(quán)人列表中查看。
user : 'AccessID',
//password為您的AccessSecret。可在安全訪問(wèn)代理頁(yè)面的被授權(quán)人列表中查看。
password : 'AccessSecret',
//port為目標(biāo)實(shí)例的端口號(hào)。
port : '3306',
//database為目標(biāo)實(shí)例的數(shù)據(jù)庫(kù)名稱。
database : 'schema'
});
connection.connect();
//使用execute方法執(zhí)行SQL語(yǔ)句。本示例以SHOW DATABASES為例,您也可以換成其他SQL語(yǔ)句。
connection.query('SHOW DATABASES', function(err, result) {
console.log(result);
});
connection.end();
使用數(shù)據(jù)庫(kù)管理工具
以Navicat客戶端為例,配置以下信息:
主機(jī):目標(biāo)實(shí)例的連接地址。
端口號(hào):目標(biāo)實(shí)例的端口號(hào)。
用戶名:AccessID。
密碼:AccessSecret。