全部產品
Search
文件中心

PolarDB:串連資料庫

更新時間:Jan 09, 2025

本文將為您介紹如何串連PolarDB MySQL版叢集。

準備工作

在串連資料庫叢集前,您需要進行以下操作:

  • 擷取資料庫連接地址與連接埠

    您可以前往PolarDB控制台,在叢集列表中單擊目的地組群ID進入叢集詳情頁。在資料庫連接中擷取資料連線地址。image

    說明
    • 推薦使用叢集地址,預設連接埠號碼為3306。

    • 請根據您的訪問環境選擇私網公網

      • 如果您是使用ECS訪問PolarDB,並且ECS與PolarDB位於同一VPC內,請選擇私網

      • 如果您是在本地環境中訪問PolarDB,請選擇公網。公網地址單擊右側申請即可。

    • 公網即網際網路,通過公網訪問將無法實現PolarDB叢集的最佳效能。

    • 暫不支援使用虛擬機器主機和輕量伺服器使用私網地址串連PolarDB叢集。

    • 更多資訊,請參見串連地址(主地址、叢集地址和自訂地址)

  • 建立資料庫帳號

    您可以前往PolarDB控制台,在叢集列表中單擊目的地組群ID進入叢集詳情頁。在配置與管理 > 帳號管理中建立資料庫帳號。image

    說明
    • 資料庫帳號類型分為高許可權帳號普通帳號,這兩種帳號的許可權存在差異。您可以根據實際業務需求選擇建立相應的資料庫帳號。

    • 更多資訊,請參見建立和管理資料庫帳號

  • 設定叢集白名單

    您可以前往PolarDB控制台,在叢集列表中單擊目的地組群ID進入叢集詳情頁。在配置與管理 > 叢集白名單中添加IP白名單或安全性群組。

    image

    說明
    • 如果您是使用ECS訪問PolarDB,並且ECS與PolarDB位於同一VPC內,請忽略當前步驟。系統已將ECS所在的VPC網段添加至default分組中了。

    • 如果您是使用ECS訪問PolarDB,但ECS與PolarDB不在同一VPC內,您可以選擇將ECS的公網IP地址添加至新的IP白名單分組,或將ECS所在的安全性群組添加至叢集白名單中。

    • 如果您是在本地環境中訪問PolarDB,請將您本地環境的公網IP地址添加至新的IP白名單分組中。

      本地環境的公網IP地址擷取方法如下:

      • Linux作業系統:開啟終端,輸入curl ifconfig.me命令後斷行符號。

      • Windows作業系統:開啟命令提示字元,輸入curl ip.me命令後斷行符號。

      • macOS作業系統:開啟終端,輸入curl ifconfig.me命令後斷行符號。

      若您的本網環境存在代理等情況,以上方式擷取的IP可能並非您的真實公網IP。您可以將IP段0.0.0.0/0添加至PolarDB叢集白名單中,成功串連叢集後,執行SHOW PROCESSLIST;命令擷取真實公網IP地址,並將其加入到叢集白名單中。隨後刪除白名單中的IP段0.0.0.0/0

      image

    • IP段0.0.0.0/0表示允許所有的訪問源訪問叢集,將其設定在叢集白名單中存在極大的風險,如非必要,切勿將其添加至白名單。

    • 更多資訊,請參見設定白名單設定安全性群組

完成準備工作後,您就可以串連資料庫叢集了。

串連資料庫叢集

串連資料庫叢集的方法有很多種,您可以根據實際業務需求來選擇適合的串連方式。以下列舉了部分串連資料庫叢集的樣本:

使用DMS串連叢集

DMS是阿里雲提供的圖形化的資料管理工具,它是一種集資料管理、結構管理、使用者授權、安全審計、資料趨勢、資料追蹤、BI圖表、效能與最佳化和伺服器管理於一體的資料管理服務。您無需藉助其他工具,即可直接在DMS上管理您的PolarDB叢集。

  1. 前往PolarDB控制台,在叢集列表中單擊目的地組群ID進入叢集詳情頁。在頁面右上方單擊登入資料庫image

  2. 在彈出的對話方塊中,輸入PolarDB MySQL版叢集中建立的資料庫帳號資料庫密碼,單擊登入image

  3. 登入後,您可以在左側導覽列的已登入執行個體中查看到所登入的PolarDB MySQL版叢集,並進行相應的管理操作。image

使用用戶端串連叢集

您可以使用任何通用的用戶端串連PolarDB叢集。此處以MySQL Workbench 8.0.29版本為例,其它用戶端的操作類似。

  1. 安裝MySQL Workbench。官方下載地址請參見MySQL Workbench下載頁面

  2. 開啟MySQL Workbench,選擇Database > Connect to Database

  3. 輸入串連資訊,單擊OK

    串連介面

    參數

    說明

    樣本

    Hostname

    資料庫連接地址

    pc-2***.rwlb.rds.aliyuncs.com

    Port

    資料庫連接地址的連接埠號碼,與資料庫連接地址相對應。

    說明

    預設連接埠為3306。

    3306

    Username

    資料庫帳號

    polardb_mysql_user

    Password

    資料庫帳號密碼。

    Pass***233

使用命令列串連叢集

如果您的伺服器安裝了MySQL用戶端,可以通過命令列串連PolarDB MySQL版資料庫叢集。

文法

mysql -h<串連地址> -P<連接埠> -u<資料庫使用者名稱> -p<資料庫使用者密碼>

樣本

mysql -h pc-2***.rwlb.rds.aliyuncs.com -P3306 -upolardb_mysql_user -pPass***233

參數

說明

樣本

-h

資料庫連接地址

pc-2***.rwlb.rds.aliyuncs.com

-P

資料庫連接地址的連接埠號碼,與資料庫連接地址相對應。

說明
  • 預設連接埠為3306。

  • 如果連接埠號碼為預設連接埠,該參數可以不填寫。

3306

-u

資料庫帳號

polardb_mysql_user

-p

資料庫帳號密碼。

說明

該參數為必填參數。

  • 如果不填寫該參數,在Enter password後會重新要求輸入密碼。

  • 如果填寫該參數,-p與資料庫密碼之間不能有空格。

Pass***233

使用應用程式串連叢集

串連PolarDB MySQL版叢集的方式與串連其他MySQL資料庫的方式一樣,僅需將資料庫連接地址、連接埠、帳號及密碼等進行替換即可。以下為您列舉部分開發語言如何通過應用程式訪問PolarDB資料庫:

Java

此處以Maven專案為例,使用MySQL JDBC驅動串連PolarDB MySQL版叢集。

  1. 首先,您需要在pom.xml檔案中添加MySQL JDBC驅動的依賴,程式碼範例:

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.27</version>
    </dependency>
  2. 串連叢集。請將參數<HOST>、連接埠號碼、<USER><PASSWORD><DATABASE><YOUR_TABLE_NAME><YOUR_TABLE_COLUMN_NAME>進行替換。

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    public class DatabaseConnection {
       public DatabaseConnection() {
       }
    
       public static void main(String[] args) {
          // PolarDB叢集串連地址、連接埠、需要串連的資料庫名
          String url = "jdbc:mysql://<HOST>:3306/<DATABASE>?useSSL=false&serverTimezone=UTC";
          // 資料庫帳號
          String user = "<USER>";
          // 資料庫帳號的密碼
          String password = "<PASSWORD>";
    
          try {
             Class.forName("com.mysql.cj.jdbc.Driver");
             Connection conn = DriverManager.getConnection(url, user, password);
             Statement stmt = conn.createStatement();
             // 需要檢索的資料表名
             ResultSet rs = stmt.executeQuery("SELECT * FROM `<YOUR_TABLE_NAME>`");
    
             while(rs.next()) {
                // 需要檢索的資料表的列名
                System.out.println(rs.getString("<YOUR_TABLE_COLUMN_NAME>"));
             }
    
             rs.close();
             stmt.close();
             conn.close();
          } catch (Exception var7) {
             var7.printStackTrace();
          }
    
       }
    }

Python

此處以Python3為例,使用PyMySQL庫串連PolarDB MySQL版叢集。

  1. 首先,您需要安裝PyMySQL庫。如果您還沒有安裝,可以通過以下命令進行安裝:

    pip3 install PyMySQL
  2. 串連叢集。請將參數<HOST>、連接埠號碼、<USER><PASSWORD><DATABASE><YOUR_TABLE_NAME>進行替換。

    import pymysql
    
    # 資料庫連接參數
    host = '<HOST>'  # PolarDB叢集串連地址
    port = 3306  # 預設連接埠3306
    user = '<USER>'  # 資料庫帳號
    password = '<PASSWORD>'  # 資料庫帳號的密碼
    database = '<DATABASE>'  # 需要串連的資料庫名
    
    try:
        # 建立資料庫連接
        connection = pymysql.connect(
            host=host,
            port=port,
            user=user,
            passwd=password,
            db=database
        )
    
        # 擷取操作遊標
        with connection.cursor() as cursor:
            # 執行 SQL 查詢
            sql = "SELECT * FROM `<YOUR_TABLE_NAME>`"  # 需要檢索的資料表名
            cursor.execute(sql)
    
            # 擷取查詢結果
            results = cursor.fetchall()
            for row in results:
                print(row)
    
    finally:
        # 關閉資料庫連接
        if 'connection' in locals() and connection.open:
            connection.close()
    

Go

此處以go1.23.0為例,使用database/sql包和go-sql-driver/mysql驅動來串連PolarDB MySQL版叢集。

  1. 首先,您需要安裝go-sql-driver/mysql驅動。您可以通過以下命令進行安裝:

    go get -u github.com/go-sql-driver/mysql
  2. 串連叢集。請將參數<HOST>、連接埠號碼、<USER><PASSWORD><DATABASE><YOUR_TABLE_NAME>進行替換。

    package main
    
    import (
        "database/sql"
        "fmt"
        "log"
        _ "github.com/go-sql-driver/mysql"
    )
    
    func main() {
        // 資料庫連接參數
        dbHost := "<HOST>"       // PolarDB叢集串連地址
        dbPort := "3306"         // 預設連接埠3306
        dbUser := "<USER>"       // 資料庫帳號
        dbPass := "<PASSWORD>"   // 資料庫帳號的密碼
        dbName := "<DATABASE>"   // 需要串連的資料庫名
    
        // 構建 DSN (Data Source Name)
        dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", dbUser, dbPass, dbHost, dbPort, dbName)
    
        // 開啟資料庫連接
        db, err := sql.Open("mysql", dsn)
        if err != nil {
            log.Fatalf("Failed to connect to database: %v", err)
        }
        defer db.Close()
    
        // 測試連接
        err = db.Ping()
        if err != nil {
            log.Fatalf("Failed to ping database: %v", err)
        }
    
        // 建立一個操作遊標
        var result string
        err = db.QueryRow("SELECT VERSION()").Scan(&result)
        if err != nil {
            log.Fatalf("Failed to execute query: %v", err)
        }
    
        // 輸出資料庫版本
        fmt.Printf("Connected to database, version: %s\n", result)
    
        // 執行 SQL 查詢
        rows, err := db.Query("SELECT * FROM `<YOUR_TABLE_NAME>`") // 需要檢索的資料表名
        if err != nil {
            log.Fatalf("Failed to execute query: %v", err)
        }
        defer rows.Close()
    
        // 處理查詢結果
        for rows.Next() {
            var id int
            var name string
            if err := rows.Scan(&id, &name); err != nil {
                log.Fatalf("Failed to scan row: %v", err)
            }
            fmt.Printf("ID: %d, Name: %s\n", id, name)
        }
    
        // 檢查是否有錯誤
        if err := rows.Err(); err != nil {
            log.Fatalf("Error during iteration: %v", err)
        }
    }
    

常見問題

ECS無法串連PolarDB叢集

請您按以下步驟進行排查:

  1. 檢查PolarDB叢集的運行狀態是否為運行中

  2. 檢查資料庫連接地址、連接埠、帳號及密碼是否正確。更多資訊,請參見擷取資料庫連接地址

  3. 檢查網路因素,您可以在ECS內執行ping 資料庫連接地址telnet 資料庫連接地址 連接埠來測試網路連通性。

  4. 若您使用的是私網地址:

    1. 檢查ECS與PolarDB叢集是否位於同一VPC下。若不在同一VPC下,則無法使用私網地址。您可以使用以下任意一種解決方案使ECS與PolarDB叢集位於同一VPC下:

      • 切換ECS所在的VPC。

      • PolarDB叢集使用的是預設VPC,可以切換PolarDB叢集所在的VPC。更多資訊,請參見修改預設VPC和交換器

      • 使用雲企業網實現VPC之間的互連。更多資訊,請參見同地區VPC互連

    2. 檢查ECS的私網IP地址、IP段或安全性群組是否已添加至PolarDB叢集的白名單中。更多資訊,請參見設定叢集白名單

  5. 若您使用的是公網地址,檢查ECS的公網IP地址或安全性群組是否已添加至PolarDB叢集的白名單中。更多資訊,請參見設定叢集白名單

說明

暫不支援使用虛擬機器主機和輕量伺服器使用私網地址串連PolarDB叢集。

本地環境無法串連PolarDB叢集

請您按以下步驟進行排查:

  1. 檢查PolarDB叢集的運行狀態是否為運行中

  2. 檢查資料庫連接地址、連接埠、帳號及密碼是否正確。更多資訊,請參見擷取資料庫連接地址

    說明

    資料庫連接地址需為公網地址。若您使用的是ECS並與PolarDB叢集位於同一VPC下,可以使用私網地址。

  3. 檢查網路因素,您可以在本地環境執行ping <資料庫連接地址>telnet <資料庫連接地址> <連接埠>來測試網路連通性。

  4. 檢查本地環境的公網IP地址或IP段是否已添加至PolarDB叢集的白名單中。更多資訊,請參見設定叢集白名單

    本地環境的公網IP地址擷取方法如下:

    • Linux作業系統:開啟終端,輸入curl ifconfig.me命令後斷行符號。

    • Windows作業系統:開啟命令提示字元,輸入curl ip.me命令後斷行符號。

    • macOS作業系統:開啟終端,輸入curl ifconfig.me命令後斷行符號。

    若您的本網環境存在代理等情況,以上方式擷取的IP可能並非您的真實公網IP。您可以將IP段0.0.0.0/0添加至PolarDB叢集白名單中,成功串連叢集後,執行SHOW PROCESSLIST;命令擷取真實公網IP地址,並將其加入到叢集白名單中。隨後刪除白名單中的IP段0.0.0.0/0

    image

無法串連PolarDB叢集,報錯:Access denied for user 'xxx'@'xxx' (using password: YES)

資料庫帳號或密碼錯誤,請檢查您是否輸入正確。您可以前往PolarDB控制台,在配置與管理 > 帳號管理中管理資料庫帳號和密碼。

無法串連PolarDB叢集,報錯:Unknown MySQL server host 'xxx'

資料庫連接地址錯誤,請檢查您是否輸入正確,正確格式為pc-xxxxxx.rwlb.rds.aliyuncs.com。您可以前往PolarDB控制台,在基本資料 > 資料庫連接中管理您的資料庫連接地址。

無法串連PolarDB叢集,報錯:Can't connect to MySQL server on 'xxx'或Connection timed out

可能是您當前環境的公網IP地址或IP段未被添加至PolarDB叢集的白名單中,或您填寫的公網IP地址或IP段存在錯誤。

本地環境的公網IP地址擷取方法如下:

  • Linux作業系統:開啟終端,輸入curl ifconfig.me命令後斷行符號。

  • Windows作業系統:開啟命令提示字元,輸入curl ip.me命令後斷行符號。

  • macOS作業系統:開啟終端,輸入curl ifconfig.me命令後斷行符號。

若您的本網環境存在代理等情況,以上方式擷取的IP可能並非您的真實公網IP。您可以將IP段0.0.0.0/0添加至PolarDB叢集白名單中,成功串連叢集後,執行SHOW PROCESSLIST;命令擷取真實公網IP地址,並將其加入到叢集白名單中。隨後刪除白名單中的IP段0.0.0.0/0

image

相關文檔