连接方式介绍
DRDS提供使用内网、公网两种连接方式,详见下表:
连接方式 | IP地址 | 使用场景 | 说明 |
---|---|---|---|
内网连接 | 内网IP地址 | 系统默认提供内网IP地址。当部署应用的弹性云主机,与DRDS实例处于同一区域的同一VPC内时,建议使用内网IP连接弹性云主机与DRDS实例。 | 安全性较高,提升网络连接的速度和DRDS实例的稳定性。推荐使用内网连接。 |
公网连接 | 弹性公网IP | 不能通过内网IP地址访问DRDS实例时,使用公网访问。建议单独绑定弹性公网IP,实现弹性云主机(或公网主机)与DRDS实例间的连接。 | 安全性较低。为了获得更快的传输速率和更高的安全性,建议您将应用迁移到与您的DRDS实例在同一VPC内,使用内网连接。 |
前提条件
- 连接前需确保已成功配置DRDS实例。
- 弹性云主机上已安装MySQL客户端或程序已配置好MySQL连接驱动。
注意出于安全考虑,建议连接DRDS所使用的弹性云主机与DRDS实例处于相同的虚拟私有云(VPC)。
操作步骤
步骤一:获取DRDS实例连接信息
- 进入DRDS管理控制台,在【实例列表】页面中,选择目标实例【操作】列的【管理】按钮,进入实例的【基本信息】页面,查看实例的VIP和端口信息,即为连接地址。
- 在左侧导航栏选择【用户管理】,获取DRDS实例的用户信息。
- 获取到以上信息,即为可以连接DRDS实例的连接信息。
步骤二:连接实例
方式一:MySQL命令行连接DRDS逻辑库
数据访问层支持 MySQL 命令行方式访问,登录弹性云主机,打开命令行工具,输入以下命令。
- mysql -h {DRDS_HOST} -P {DRDS_PORT} -u {DRDS_USER} [-D DRDS_DATABASE] -p [ --comments=true ]
参数说明
参数 | 说明 |
---|---|
DRDS_HOST | DRDS实例的IP地址。 |
DRDS_PORT | DRDS实例的监听端口。 |
DRDS_USER | DRDS实例设置的用户。 |
DRDS_DATABASE | 计划要连接的逻辑库。 |
comments=true | 使用HINT语法情况下,命令行方式访问要加上参数 --comments=true 。 |
下面为Windows服务器命令行窗口中使用表中举例参数后,MySQL命令连接服务器的回显情况。
[root@9afe645c6f7a ~]# mysql -h127.0.0.1 -P8888 -uxxxx -p
Enter password: **********
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 208
Server version: 5.7.21-UDAL-DBPROXY-2.8.2_P3-2023-06-06T06:10:23Z DBProxy Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
方式二:JDBC驱动连接DRDS逻辑库
本节以SQL查询语句连接DRDS实例为例。
public static void main(String[] args) throws ClassNotFoundException {
//加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
String userName = "xxxx";
String password = "xxxx";
String url = "xx.xx.xx.xx:xxxx";
String schema = "xxxx";
try(Connection conn = DriverManager.getConnection(String.format("jdbc:mysql://%s/%s?user=%s&password=%s&useUnicode=true&characterEncoding=utf-8",url, schema, userName, password));)
{
//查询条件带上分片键或切片索引键,否则语句将广播执行
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select now() as Systemtime");
rs.next();
String space = "";
for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
System.out.print(space + rs.getMetaData().getColumnName(i) +
" = " + rs.getString(i));
space = ", ";
}
} catch (Exception e) {
e.printStackTrace();
}
}