PolarDB-X 支持通过数据管理DMS、MySQL命令行、第三方客户端以及符合MySQL官方交互协议的第三方程序代码进行连接。本文主要介绍如何通过MySQL命令行连接到 PolarDB-X 数据库。

前提条件

如果您是首次使用 PolarDB-X ,需要先完成 PolarDB-X首次使用流程 中的基本操作,其中包括创建实例、创建账号、创建数据库等。

如果您的服务器尚未安装MySQL客户端,请前往 MySQL网站 下载安装。

通过MySQL命令行连接到数据库

  1. 登录 PolarDB分布式版控制台
  2. 在页面左上角选择目标实例所在地域。
  3. 实例列表 页,单击 PolarDB-X 2.0 页签。
  4. 找到目标实例,单击实例ID。
  5. 连接信息 区域,找到内外网地址和内外网端口信息。
    说明 如果您需要通外网地址进行访问试用,请使用 外网地址 外网端口 进行连接。为确保数据库安全,建议您正式访问时使用内网连接地址。
  6. 获取 连接信息 后,执行以下命令获取本地对应的公网IP并将其加入实例白名单。关于如何添加白名单,请参考 设置白名单
     curl 'https://api.ipify.org'
  7. 通过如下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>