入門篇-連線華為雲分散式資料庫中介軟體(DDM)
在成功配置DDM例項後,即可連線訪問DDM例項以及例項下的邏輯庫。
華為雲分散式資料庫中介軟體(DDM)服務目前管理的關係型資料庫,是基於MySQL作為儲存引擎,因此DDM服務相容MySQL大部分語法以及客戶端。關於DDM的使用受限說明,請參見SQL相容性。
DDM例項提供多個連線地址,確保連線的可用性,使用程式驅動方式連線DDM例項時,建議配置負載均衡。
配置負載均衡的優先推薦順序如下:
-
JDBC Driver(參見以下章節)
-
php負載均衡(參見以下章節)
-
登入管理控制檯 。
- 在導航上選擇“資料庫 > 分散式資料庫中介軟體”,進入總覽頁面。
- 單擊左側選單欄的“DDM例項管理”,進入“DDM例項管理”頁面,列表中顯示DDM例項連線地址。
- 您還可以直接單擊DDM例項名稱,進入例項詳情頁面。在其中的“邏輯庫管理”頁籤中,單擊例項名稱前的下箭頭展開例項詳情,獲取命令列連線地址或jdbc連線地址,在“賬號管理”頁籤中獲取DDM例項的賬號資訊。
- 使用以上獲取到的DDM例項連線資訊,支援通過MySQL客戶端或者MySQL驅動進行連線。
1.MySQL客戶端連線(命令列)。
登入彈性雲伺服器,開啟命令列工具,輸入連線命令:
mysql -h ${
引數值填寫說明如下:
表1 mysql客戶端登入引數說明 引數示例
引數填寫說明
DDM_SERVER_ADDRESS
DDM例項所在IP地址。
DDM_SERVER_PORT
DDM例項連線埠。
DDM_USER
DDM例項賬號。
DDM_DBNAME
DDM例項邏輯庫名,選填。
default-character-set=utf8
指定字元編碼為UTF-8,選填。
當mysql連線編碼和實際編碼不一致,導致DDM解析出現亂碼時請配置該引數。
如下為Windows伺服器命令列視窗中使用mysql命令連線伺服器回顯情況。
C:\Users\testDDM>mysql -h192.168.0.200 -P5066 -Ddb_5133 -udbuser01 -p Enter password: Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.6.29 Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
2.應用程式通過MySQL驅動連線。
- JDBC Driver
//以下僅抽取一些關鍵程式碼示例行 //不使用負載均衡的連線示例 //String url = "jdbc:mysql://192.168.0.200:5066/db_5133"; //使用負載均衡的連線示例 //jdbc:mysql:loadbalance://ip1:port1,ip2:port2..ipN:portN/{db_name} String url = "jdbc:mysql:loadbalance://192.168.0.200:5066,192.168.0.201:5066/db_5133?loadBalanceAutoCommitStatementThreshold=5&loadBalanceHostRemovalGracePeriod=15000&loadBalanceBlacklistTimeout=60000&loadBalancePingTimeout=5000&retriesAllDown=10&connectTimeout=10000&socketTimeout=60000"; String username = "dbuser01" ; String password = "xxxxxx" ; //載入mysql驅動 com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver(); Connection con = DriverManager.getConnection(url , username , password ) ; //開始執行sql Statement stmt = con.createStatement() ; ResultSet rs = stmt.executeQuery("select now() as Systemtime"); con.close();
- loadBalanceAutoCommitStatementThreshold:表示連線上執行多少個語句後會重新選擇連線。
假設loadBalanceAutoCommitStatementThreshold設為5,則當執行5個sql後(Queries或者updates等),將會重新選擇連線。若為0表示“粘性連線,不重新選擇連線”。關閉自動提交時(autocommit=false)會等待事務完成再考慮是否重新選擇連線。
- retriesAllDown:當所有的連線地址都無法連線時,輪詢重試的最大次數。
重試次數達到閾值仍然無法獲取有效連線,將會丟擲SQLException。
- 可以在邏輯庫管理頁面,例項詳情中jdbc連線地址中看到推薦的引數值。
- 更多關於jdbc負載均衡模式的配置引數,請參考MySQL官網關於資料庫連線的配置引數介紹。 說明:
- loadBalanceAutoCommitStatementThreshold和retriesAllDown引數必須按照以上樣例進行配置,否則在連線切換時可能進入死迴圈,最終導致棧溢位,其他引數詳情請參見jdbc驅動方式連線DDM推薦版本和引數。
- 在JDBC連線串中不能含有useSSL=true和useLocalSession兩個引數,因為DDM當前暫不支援。
- MySQL提供的官方連線驅動暫時支援jdbc方式負載均衡,使用者如使用其他語言,需自行查詢幫助資料,實現負載均衡。
- loadBalanceAutoCommitStatementThreshold:表示連線上執行多少個語句後會重新選擇連線。
- PHP Mysqli
- 在php.ini檔案中新增如下配置。
說明:;啟用mysqli拓展 extension=php_mysqli.dll ;新增mysqlnd_ms拓展以及進行相關配置(以下資訊僅負載均衡需要進行配置) extension = /your-php-path/php7/lib/php/extensions/no-debug-non-zts-20131226/mysqlnd_ms.so ;啟用mysqlnd_ms拓展 mysqlnd_ms.enable=1 ;關聯負載均衡相關配置檔案 mysqlnd_ms.config_file=/your-config-path/lb_only_for_DDM_cluster.ini ;啟用多寫多讀DDM叢集 mysqlnd_ms.multi_master=1 ;關閉mysqlnd_ms拓展的讀寫分離 mysqlnd_ms.disable_rw_split=1
更多mysqlnd_ms拓展配置引數請參考php官網執行時配置章節。
- 配置lb_only_for_DDM_cluster.ini檔案。
說明:{ "myapp": { "master": { "master_0": { "host": "192.168.0.200", "port": "5066" }, "master_1": { "host": "192.168.0.201", "port": "5066" } }, "slave": { }, "failover": {"strategy": "loop_before_master" }, "filters": { "random": { "weights": { "master_0":2, "master_1":1 } } } } }
- 為了支援多讀多寫,因此需要將slave設定為空。
- 當前故障處理模式設定為loop_before_master,當訪問的節點故障時會自動遍歷下一個節點。
- 當前負載均衡策略使用的是random weights策略,在filters中設定為random,在weights中設定每一個節點訪問的權重,此策略在訪問一定的次數後,master_0與master_1訪問次數的比例為2:1。
- 連線示例。
<?php $loadbalanceconfig = "myapp" $servername = "192.168.0.200"; $username = "dbuser01"; $password = "xxxxxx"; $dbname = "db_name"; $port = "5066"; //非負載均衡建立連線 //$conn = new mysqli($servername, $username, $password, $dbname, $port); //負載均衡建立連線 $conn = new mysqli($loadbalanceconfig, $username, $password, $dbname); $sql = "select now() as Systemtime"; $result = $conn->query($sql); $conn->close(); ?>
- 在php.ini檔案中新增如下配置。
- JDBC Driver
- 成功連線DDM例項後,即可通過SQL命令操作資料庫。