PolarDB-X支持通过数据管理DMS、MySQL命令行、第三方客户端以及符合MySQL官方交互协议的第三方程序代码进行连接。本文主要介绍如何通过MySQL命令行连接到PolarDB-X数据库。
前提条件
如果您是首次使用PolarDB-X,需要先完成PolarDB-X首次使用流程中的基本操作,其中包括创建实例、创建账号、创建数据库等。
如果您的服务器尚未安装MySQL客户端,请前往MySQL网站下载安装。
通过MySQL命令行连接到数据库
- 登录PolarDB分布式版控制台。
- 在页面左上角选择目标实例所在地域。
- 在实例列表页,单击PolarDB-X 2.0页签。
- 找到目标实例,单击实例ID。
- 在连接信息区域,找到内外网地址和内外网端口信息。说明 如果您需要通外网地址进行访问试用,请使用外网地址和外网端口进行连接。为确保数据库安全,建议您正式访问时使用内网连接地址。
- 获取连接信息后,执行以下命令获取本地对应的公网IP并将其加入实例白名单。关于如何添加白名单,请参考设置白名单。
curl 'https://api.ipify.org'
- 通过如下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
通过第三方程序代码连接到数据库
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>
关于数据库的超时设置的推荐实践
若您的应用使用了一些常见的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>