PolarDB-X支持通過數(shù)據(jù)管理DMS、MySQL命令行、第三方客戶端以及符合MySQL官方交互協(xié)議的第三方程序代碼進(jìn)行連接。本文主要介紹如何通過MySQL命令行連接到PolarDB-X數(shù)據(jù)庫。

前提條件

如果您是首次使用PolarDB-X,需要先完成PolarDB-X首次使用流程中的基本操作,其中包括創(chuàng)建實(shí)例、創(chuàng)建賬號(hào)、創(chuàng)建數(shù)據(jù)庫等。

如果您的服務(wù)器尚未安裝MySQL客戶端,請(qǐng)前往MySQL網(wǎng)站下載安裝。

通過MySQL命令行連接到數(shù)據(jù)庫

  1. 登錄PolarDB分布式版控制臺(tái)
  2. 在頁面左上角選擇目標(biāo)實(shí)例所在地域。
  3. 實(shí)例列表頁,單擊PolarDB-X 2.0頁簽。
  4. 找到目標(biāo)實(shí)例,單擊實(shí)例ID。
  5. 連接信息區(qū)域,找到內(nèi)外網(wǎng)地址和內(nèi)外網(wǎng)端口信息。
    說明 如果您需要通外網(wǎng)地址進(jìn)行訪問試用,請(qǐng)使用外網(wǎng)地址外網(wǎng)端口進(jìn)行連接。為確保數(shù)據(jù)庫安全,建議您正式訪問時(shí)使用內(nèi)網(wǎng)連接地址。
  6. 獲取連接信息后,執(zhí)行以下命令獲取本地對(duì)應(yīng)的公網(wǎng)IP并將其加入實(shí)例白名單。關(guān)于如何添加白名單,請(qǐng)參考設(shè)置白名單
     curl 'https://api.ipify.org'
  7. 通過如下MySQL命令行進(jìn)行連接:
    mysql -h<連接地址> -P<端口> -u<用戶名> -p -D<數(shù)據(jù)庫名稱>
    選項(xiàng)說明示例
    -h實(shí)例的內(nèi)網(wǎng)連接地址或外網(wǎng)連接地址。 pxc-******************.public.polarx.rds.aliyuncs.com
    -P實(shí)例的端口號(hào)。
    • 若使用內(nèi)網(wǎng)連接,需輸入實(shí)例的內(nèi)網(wǎng)端口。
    • 若使用外網(wǎng)連接,需輸入實(shí)例的外網(wǎng)端口。
    說明
    • 此處-P為大寫字母。
    • 默認(rèn)端口為3306。
    3306
    -u實(shí)例中的賬號(hào)名稱。關(guān)于如何創(chuàng)建賬號(hào),請(qǐng)參見創(chuàng)建賬號(hào)testuser
    -p以上賬號(hào)的密碼。
    說明
    • 為保障密碼安全,-p后請(qǐng)不要填寫密碼,會(huì)在執(zhí)行整行命令后提示您輸入密碼,輸入后按回車即可登錄。
    • 如果填寫該參數(shù),-p與密碼之間不能有空格。
    passWord123
    -D需要登錄的數(shù)據(jù)庫名稱。
    說明
    • 該參數(shù)非必填參數(shù)。
    • 可以不輸入-D僅輸入數(shù)據(jù)庫名稱。
    mysql

通過第三方客戶端連接到數(shù)據(jù)庫

PolarDB-X支持通過如下第三方客戶端進(jìn)行連接,您可以去對(duì)應(yīng)的官方網(wǎng)站下載客戶端。

  • MySQL Workbench(推薦)
  • SQLyog
  • Sequel Pro
  • Navicat for MySQL
說明 第三方GUI客戶端可執(zhí)行基礎(chǔ)的數(shù)據(jù)庫操作,包括數(shù)據(jù)的增刪改查和DDL操作,對(duì)于工具高級(jí)特性,PolarDB-X可能并不支持。

通過第三方程序代碼連接到數(shù)據(jù)庫

PolarDB-X支持通過如下符合MySQL官方交互協(xié)議的第三方程序代碼進(jìn)行連接:

  • 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();    

以下為應(yīng)用端連接池配置示例。

<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連接池連接,關(guān)于Druid的詳細(xì)信息請(qǐng)參見Druid Github資源

關(guān)于數(shù)據(jù)庫的超時(shí)設(shè)置的推薦實(shí)踐

若您的應(yīng)用使用了一些常見的ORM框架(例如SpringBoot+MyBatis+JDBC Driver等)來訪問數(shù)據(jù)庫,這些ORM框架通常支持從事務(wù)、SQL語句、網(wǎng)絡(luò)收發(fā)包等多個(gè)維度對(duì)SQL查詢時(shí)的客戶端側(cè)超時(shí)時(shí)間進(jìn)行設(shè)置。例如Spring的transaction_timeout,Mybatis的statement_timeout ,JDBC MySQL Driver的query_timeout等。

本質(zhì)上,這些客戶端側(cè)的超時(shí)機(jī)制大多都需要執(zhí)行數(shù)據(jù)庫的Kill語句來中斷查詢。在分布式數(shù)據(jù)庫場(chǎng)景,Kill語句執(zhí)行成本偏高,高頻執(zhí)行會(huì)對(duì)數(shù)據(jù)庫系統(tǒng)的資源消耗相對(duì)較高。因此,不推薦應(yīng)用大量使用上述的超時(shí)機(jī)制連接數(shù)據(jù)庫。

從最佳實(shí)踐來看,您的應(yīng)用應(yīng)該直接使用JDBC URL的socket_timeout參數(shù)(網(wǎng)絡(luò)套接字超時(shí)參數(shù))來指定SQL的執(zhí)行超時(shí),因?yàn)樵搮?shù)依賴TCP協(xié)議自身的超時(shí)機(jī)制,超時(shí)觸發(fā)時(shí)不會(huì)產(chǎn)生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>