PolarDB-X支持通过数据管理DMS、MySQL命令行、第三方客户端以及符合MySQL官方交互协议的第三方程序代码进行连接。本文主要介绍如何通过MySQL命令行连接到PolarDB-X数据库。
前提条件
如果您是首次使用PolarDB-X,需要先完成PolarDB-X首次使用流程中的基本操作,其中包括创建实例、创建账号、创建数据库等。
如果您的服务器尚未安装MySQL客户端,请前往MySQL网站下载安装。
连接数据库
通过DMS连接到数据库
在页面左上角选择目标实例所在地域。
在实例列表页,单击PolarDB-X 2.0页签。
找到目标实例,单击实例ID。
在左侧导航栏中,单击 。
在页面右上角,单击登录数据库。
在弹出的对话框中,设置如下参数。
参数
说明
数据库类型
默认为PolarDB-X(原DRDS),无需选择。
实例地区
默认为当前实例所在地域,无需选择。
说明若您需要登录其他地域下的PolarDB-X实例,从下拉列表中选择目标实例的所在地域即可。
实例ID
默认为当前实例的实例ID,无需选择。
说明若您需要登录其他PolarDB-X实例,从下拉列表中选择目标实例ID即可。
DATABASE
数据库名称,可选。
数据库账号
数据库的授权账号名称。
数据库密码
数据库账号名对应的密码。
说明您可以选中记住密码,方便之后再次登录时,无需输入对应的数据库账号和密码即可自动登录。
管控模式
可选择自由操作、稳定变更或安全协同。
通过MySQL命令行连接到数据库
在页面左上角选择目标实例所在地域。
在实例列表页,单击PolarDB-X 2.0页签。
找到目标实例,单击实例ID。
在连接信息区域,找到内外网地址和内外网端口信息。
说明如果您需要通过外网地址进行访问试用,请使用外网地址和外网端口进行连接。为确保数据库安全,建议您正式访问时使用内网连接地址。
检查本地环境的公网IP地址或IP段是否已添加至PolarDB集群的白名单中。更多信息,请参见设置白名单。
本地环境的公网IP地址获取方法如下:
Linux操作系统:打开终端,输入
curl ifconfig.me
命令后回车。Windows操作系统:打开命令提示符,输入
curl ip.me
命令后回车。macOS操作系统:打开终端,输入
curl ifconfig.me
命令后回车。
若您的本地网络环境存在代理等情况,以上方式获取的IP可能并非您的真实公网IP。您可以将IP段
0.0.0.0/0
添加至PolarDB集群白名单中,成功连接集群后,执行SHOW PROCESSLIST;
命令获取真实公网IP地址,并将其加入到集群白名单中。随后删除白名单中的IP段0.0.0.0/0
。通过如下MySQL命令行进行连接:
mysql -h<连接地址> -P<端口> -u<用户名> -p -D<数据库名称>
选项
说明
示例
-h
实例的内网连接地址或外网连接地址。
pxc-******************.public.polarx.rds.aliyuncs.com
-P
实例的端口号。
若使用内网连接,需输入实例的内网端口。
若使用外网连接,需输入实例的外网端口。
说明此处
-P
为大写字母。默认端口为3306。
3306
-u
实例中的账号名称。关于如何创建账号,请参见创建账号。
testuser
-p
以上账号的密码。
说明为保障密码安全,
-p
后请不要填写密码,会在执行整行命令后提示您输入密码,输入后按回车即可登录。如果填写该参数,
-p
与密码之间不能有空格。
passWord123
-D
需要登录的数据库名称。
说明该参数非必填参数。
可以不输入
-D
仅输入数据库名称。
mysql
通过第三方客户端连接到数据库
PolarDB-X支持通过如下第三方客户端进行连接,您可以去对应的官方网站下载客户端。
MySQL Workbench(推荐)
SQLyog
Sequel Pro
Navicat for MySQL
第三方GUI客户端可执行基础的数据库操作,包括数据的增删改查和DDL操作,对于工具高级特性,PolarDB-X可能并不支持。
通过第三方程序代码连接到数据库
PolarDB-X支持通过如下符合MySQL官方交互协议的第三方程序代码进行连接:
JDBC Driver for MySQL (Connector/J)
Python Driver for MySQL (Connector/Python)
C++ Driver for MySQL (Connector/C++)
C Driver for MySQL (Connector/C)
ADO.NET Driver for MySQL (Connector/NET)
ODBC Driver for MySQL (Connector/ODBC)
PHP Drivers for MySQL (mysqli, PDO_MYSQL, PHP_MYSQLND)
Perl Driver for MySQL (DBD::mysql)
Ruby Driver for MySQL (ruby-mysql)
以下为JDBC Driver for MySQL (Connector/J)程序代码示例。
//JDBC
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://pxc-******************.public.polarx.rds.aliyuncs.com:3306/doc_test","doc_test","doc_test_password");
//...
conn.close();
以下为应用端连接池配置示例。
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="jdbc:mysql://pxc-******************.public.polarx.rds.aliyuncs.com:3306/doc_test" />
<property name="username" value="doc_test" />
<property name="password" value="doc_test_password" />
<property name="filters" value="stat" />
<property name="maxActive" value="100" />
<property name="initialSize" value="20" />
<property name="maxWait" value="60000" />
<property name="minIdle" value="1" />
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="poolPreparedStatements" value="true" />
<property name="maxOpenPreparedStatements" value="20" />
<property name="asyncInit" value="true" />
</bean>
推荐使用Druid连接池连接,关于Druid的详细信息请参见Druid Github资源。
关于数据库的超时设置的推荐实践
若您的应用使用了一些常见的ORM框架(例如SpringBoot+MyBatis+JDBC Driver等)来访问数据库,这些ORM框架通常支持从事务、SQL语句、网络收发包等多个维度对SQL查询时的客户端侧超时时间进行设置。例如Spring的transaction_timeout,Mybatis的statement_timeout ,JDBC MySQL Driver的query_timeout等。
本质上,这些客户端侧的超时机制大多都需要执行数据库的Kill
语句来中断查询。在分布式数据库场景,Kill
语句执行成本偏高,高频执行会对数据库系统的资源消耗相对较高。因此,不推荐应用大量使用上述的超时机制连接数据库。
从最佳实践来看,您的应用应该直接使用JDBC URL的socket_timeout参数(网络套接字超时参数)来指定SQL的执行超时,因为该参数依赖TCP协议自身的超时机制,超时触发时不会产生Kill
语句的行为。示例如下:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="jdbc:mysql://pxc-*****.public.polarx.rds.aliyuncs.com:3306/doc_test?socketTimeout=60000" />
...
<property name="asyncInit" value="true" />
</bean>
常见问题
使用外网地址连接数据库失败(使用ping <外网地址>
可以联通,使用telnet <外网地址> <外网端口>
命令不能联通)。
解决方案:
配置数据库白名单
0.0.0.0/0
(全网段)。使用外网地址和端口连接数据库。
执行SQL
SHOW PROCESSLIST;
查看当前机器的IP。把第3步获取的IP配置到实例的白名单中,并删除
0.0.0.0/0
。再次使用外网地址和端口连接数据库。