连接数据库

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

前提条件

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

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

连接数据库

通过DMS连接到数据库

  1. 登录PolarDB分布式版控制台

  2. 在页面左上角选择目标实例所在地域。

  3. 实例列表页,单击PolarDB-X 2.0页签。

  4. 找到目标实例,单击实例ID。

  5. 在左侧导航栏中,单击配置与管理 > 数据库管理

  6. 在页面右上角,单击登录数据库

  7. 在弹出的对话框中,设置如下参数。

    参数

    说明

    数据库类型

    默认为PolarDB-X(原DRDS),无需选择。

    实例地区

    默认为当前实例所在地域,无需选择。

    说明

    若您需要登录其他地域下的PolarDB-X实例,从下拉列表中选择目标实例的所在地域即可。

    实例ID

    默认为当前实例的实例ID,无需选择。

    说明

    若您需要登录其他PolarDB-X实例,从下拉列表中选择目标实例ID即可。

    DATABASE

    数据库名称,可选。

    数据库账号

    数据库的授权账号名称。

    数据库密码

    数据库账号名对应的密码。

    说明

    您可以选中记住密码,方便之后再次登录时,无需输入对应的数据库账号和密码即可自动登录。

    管控模式

    可选择自由操作稳定变更安全协同

    说明
    • 首次通过DMS登录时,管控模式默认为自由操作。登录成功后,您还可以通过编辑实例功能来修改管控模式。更多信息,请参见编辑实例管控模式

    • 配置完登录参数后,您可以单击左下角测试连接。如果测试连接失败,请按照报错提示检查录入的集群信息,如账号或密码是否正确。

    • 系统会自动尝试往云数据库的白名单中添加DMS的服务器访问地址,若自动添加失败请手动添加。

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

  1. 登录PolarDB分布式版控制台

  2. 在页面左上角选择目标实例所在地域。

  3. 实例列表页,单击PolarDB-X 2.0页签。

  4. 找到目标实例,单击实例ID。

  5. 连接信息区域,找到内外网地址和内外网端口信息。

    说明

    如果您需要通过外网地址进行访问试用,请使用外网地址外网端口进行连接。为确保数据库安全,建议您正式访问时使用内网连接地址。

  6. 检查本地环境的公网IP地址或IP段是否已添加至PolarDB集群的白名单中。更多信息,请参见设置白名单

    本地环境的公网IP地址获取方法如下:

    • Linux操作系统:打开终端,输入curl ifconfig.me命令后回车。

    • Windows操作系统:打开命令提示符,输入curl ip.me命令后回车。

    • macOS操作系统:打开终端,输入curl ifconfig.me命令后回车。

    若您的本地网络环境存在代理等情况,以上方式获取的IP可能并非您的真实公网IP。您可以将IP0.0.0.0/0添加至PolarDB集群白名单中,成功连接集群后,执行SHOW PROCESSLIST;命令获取真实公网IP地址,并将其加入到集群白名单中。随后删除白名单中的IP0.0.0.0/0

    image

  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查询时的客户端侧超时时间进行设置。例如Springtransaction_timeout,Mybatisstatement_timeout ,JDBC MySQL Driverquery_timeout等。

本质上,这些客户端侧的超时机制大多都需要执行数据库的Kill语句来中断查询。在分布式数据库场景,Kill语句执行成本偏高,高频执行会对数据库系统的资源消耗相对较高。因此,不推荐应用大量使用上述的超时机制连接数据库。

从最佳实践来看,您的应用应该直接使用JDBC URLsocket_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 <外网地址> <外网端口>命令不能联通)。

解决方案:

  1. 配置数据库白名单0.0.0.0/0(全网段)。

  2. 使用外网地址和端口连接数据库。

  3. 执行SQL SHOW PROCESSLIST;查看当前机器的IP。

  4. 把第3步获取的IP配置到实例的白名单中,并删除0.0.0.0/0

  5. 再次使用外网地址和端口连接数据库。