通过MySQL协议访问实例

本文介绍应用程序如何通过MySQL协议访问已开启安全访问代理的目标实例。

前提条件

注意事项

开启安全访问代理的安全协同实例受安全规则的限制,系统规定单次查询数据最多返回100000行数据。

设置单次查询最大返回行数

前往DMS安全与规范 > 安全规则 > 安全访问代理中设置单次查询最大返回行数。

image

说明
  • 若希望避免安全规则的限制,请使用数据库控制台提供的连接地址访问数据库,或联系DMS技术支持评估具体场景。

  • 如果是非安全协同实例,不支持自主配置查询最大返回行数。默认查询最大返回行数为3000。

使用限制

  • MySQL客户端设置的空闲超时时间不能超过900秒。

  • 如果使用数据库连接池,则连接池探活间隔不能超过900秒。

说明

建议使用连接池,并且将连接池探活时间间隔设置为750秒。

访问示例

您可以通过命令行、数据库管理工具、程序代码来访问已开启安全访问代理的目标实例。

使用MySQL命令行

格式如下:

mysql -h<host> -P<port> -u<user_name> -p<password> <database> -e '<sql_statements>'

参数说明如下:

参数名

说明

host

目标实例的连接地址。在安全访问代理页面中查看内网连接或公网连接的MySQL协议地址,该地址即为目标实例的连接地址。

port

目标实例的端口号,例如3306。在安全访问代理页面的内网连接或公网连接的MySQL协议地址中可以看到端口号。

user_name

经授权后,DMS为您分配的AccessID。在安全访问代理页面的被授权人列表可以查看自己的AccessID。

password

经授权后,DMS为您分配的AccessSecret。在安全访问代理页面的被授权人列表可以查看自己的AccessSecret。

database

目标实例中的数据库的名称。

sql_statements

您要执行的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是目标实例的连接地址与端口号。可在安全访问代理页面的MySQL协议地址获取连接地址与端口号。
//schema是目标实例的数据库名称。
String url = "jdbc:mysql://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com:3306/schema";
Properties properties = new Properties();
//AccessID是您的AccessID。可在安全访问代理页面的被授权人列表中查看。
properties.setProperty("user", "AccessID");
//AccessSecret是您的AccessSecret。可在安全访问代理页面的被授权人列表中查看。
properties.setProperty("password", "AccessSecret");
try (Connection connection = DriverManager.getConnection(url, properties)) {
    try (Statement statement = connection.createStatement()) {
        //使用execute方法执行SQL语句。本示例以SHOW DATABASES为例,您也可以换成其它SQL语句。
        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为目标实例的连接地址。
    #port为目标实例的端口号。
    #user为您的AccessID。可在安全访问代理页面的被授权人列表中查看。
    #password为您的AccessSecret。可在安全访问代理页面的被授权人列表中查看。
    #database为目标实例的数据库名称。
    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方法执行SQL语句。本示例以SHOW DATABASES为例,您也可以换成其他SQL语句。
    cur.execute('SHOW DATABASES')
    rs = cur.fetchall()
    print rs
finally:
    cur.close()
    conn.close()
var mysql  = require('mysql');  
 
var connection = mysql.createConnection({
    //host为目标实例的连接地址。 
    host     : 'dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com',  
    //user为您的AccessID。可在安全访问代理页面的被授权人列表中查看。     
    user     : 'AccessID', 
    //password为您的AccessSecret。可在安全访问代理页面的被授权人列表中查看。             
    password : 'AccessSecret', 
    //port为目标实例的端口号。      
    port     : '3306',  
    //database为目标实例的数据库名称。                 
    database : 'schema' 
}); 
 
connection.connect();

//使用execute方法执行SQL语句。本示例以SHOW DATABASES为例,您也可以换成其他SQL语句。 
connection.query('SHOW DATABASES', function(err, result) {
    console.log(result);
});
 
connection.end();

使用数据库管理工具

以Navicat客户端为例,配置以下信息:

  • 主机:目标实例的连接地址。

  • 端口号:目标实例的端口号。

  • 用户名:AccessID。

  • 密码:AccessSecret。

navicat