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ù)庫
- 登錄PolarDB分布式版控制臺(tái)。
- 在頁面左上角選擇目標(biāo)實(shí)例所在地域。
- 在實(shí)例列表頁,單擊PolarDB-X 2.0頁簽。
- 找到目標(biāo)實(shí)例,單擊實(shí)例ID。
- 在連接信息區(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)連接地址。
- 獲取連接信息后,執(zhí)行以下命令獲取本地對(duì)應(yīng)的公網(wǎng)IP并將其加入實(shí)例白名單。關(guān)于如何添加白名單,請(qǐng)參考設(shè)置白名單。
curl 'https://api.ipify.org'
- 通過如下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
通過第三方程序代碼連接到數(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>
關(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>