连接全球数据库网络

全球数据库网络中每个子集群(主集群和从集群)都提供了独立的集群地址,您可以根据应用所在的地域,连接就近的集群地址,从而连接到GDN。GDN会自动进行读写分离,读请求通常情况下会直接发往本地,而写请求则被转发至主集群。

读写分离与请求路由

GDN中的集群(主集群和从集群)读写请求路由,是由每个集群的数据库代理配置所决定。您的应用程序无需修改代码,只需连接到相应集群的地址,读写请求便会按以下逻辑自行路由:

  • 写请求(如INSERTUPDATEDELETE等)和事务中的所有请求,会被自动转发到主集群的主节点处理。

  • 读请求默认会路由到本地从集群的只读节点,实现就近访问。如果开启了会话一致性,部分读请求也可能被路由到主集群的主节点以保证数据一致性。

点击展开查看详细转发逻辑

目标节点

转发的请求

只发往主集群的主节点

  • DML操作(如INSERTUPDATEDELETE等)

  • DDL操作(如建表或库、删表或库、变更表结构等)

  • SHOW命令

  • BEGINCOMMIT等事务相关命令

  • LISTENUNLISTENNOTIFY命令

  • ANALYZE命令

  • 两阶段提交命令

  • 事务中的请求(根据事务拆分配置会有变化)

  • 函数定义与调用(根据自定义函数路由规则配置会有变化)

  • 使用临时表的请求

  • 多语句Multi Statements

  • 包含写请求的PREPARE

发往只读节点或主节点

  • 非事务中的读请求

  • EXPLAIN命令

  • 包含读请求的PREPARE

总是发往所有节点

  • USE命令

  • DISCARDDEALLOCATE命令

说明
  • 读写模式可读可写(自动读写分离)模式的集群地址或自定义地址支持GDN的读写分离服务。

  • 主地址读写模式只读模式的自定义地址不支持GDN的读写分离服务。

  • 为降低主从集群间的复制延迟对业务可能带来的影响,建议您在从集群上设置自定义集群地址时,将主库是否接受读设置为,并设置一致性级别最终一致性(弱)

查看集群地址

  1. 登录PolarDB控制台,单击左侧导航栏中的全球数据库网络(GDN)

  2. 全球数据库网络(GDN)页面,找到目标GDN,单击全球数据库网络ID进入GDN详情页。

  3. 集群列表区域内,找到目标从集群,单击集群地址栏的查看,即可在弹出的对话框中查看集群地址详情。image

    说明
    • 仅支持查看默认集群的连接地址信息,包括私网公网地址。

    • 如需获取更多连接地址的详细信息,请单击查看或管理更多地址,系统将跳转至目标集群的详情页面,您可以在数据库连接区域中查看更多连接地址。

连接全球数据库集群

各个地域的应用可直接连接就近的集群地址,从而连接到GDN,GDN会自动进行读写分离。连接数据库集群的方法有很多种,您可以根据实际业务需求来选择适合的连接方式。以下列举了部分连接数据库集群的示例:

使用DMS连接集群

DMS是阿里云提供的图形化的数据管理工具,它是一种集数据管理、结构管理、用户授权、安全审计、数据趋势、数据追踪、BI图表、性能与优化和服务器管理于一体的数据管理服务。您无需借助其他工具,即可直接在DMS上管理您的PolarDB集群。

  1. 前往PolarDB控制台,在集群列表中单击目标集群ID进入集群详情页。在页面右上角单击登录数据库image

  2. 在弹出的对话框中,输入集群中创建的数据库账号数据库密码,单击登录image

  3. 登录后,您可以在左侧导航栏的数据库实例 > 已登录实例列表中查看到所登录的PolarDB集群,并进行相应的管理操作。image

使用客户端连接集群

您可以使用任何通用的客户端连接PolarDB集群。此处pgAdmin 4 v9.0版本为例,其它客户端的操作类似。

  1. 下载并安装pgAdmin 4客户端。

  2. 打开pgAdmin 4客户端,右键单击Servers,选择Register > Server...image

  3. General页设置连接名称,Connection页设置要连接的集群信息,并单击Saveimage

    image

    参数

    说明

    Host name/address

    PolarDB集群的数据库连接地址与端口

    • 如果您是使用ECS访问PolarDB,并且ECSPolarDB位于同一VPC内,请选择私网地址与端口。

    • 如果您是在本地环境中访问PolarDB,请选择公网地址与端口。

    • 默认端口号为1521

    Port

    Username

    PolarDB集群的数据库账号和密码

    Password

  4. 查看连接结果。若连接信息无误,会出现如下界面,则表示连接成功。image

    说明

    postgres是默认的系统数据库,请勿在该数据库中进行任何操作。

使用命令行连接集群

您可以前往PostgreSQL官网网站下载并使用psql工具连接PolarDB数据库集群。您也可以使用PolarDB提供的PolarDB-Tools工具包中的psql工具连接PolarDB数据库集群

说明

语法

psql -h <host> -p <port> -U <username> -d <dbname>

参数

描述

host

PolarDB集群的数据库连接地址与端口

  • 如果您是使用ECS访问PolarDB,并且ECSPolarDB位于同一VPC内,请选择私网地址与端口。

  • 如果您是在本地环境中访问PolarDB,请选择公网地址与端口。

  • 默认端口号为1521

port

username

PolarDB集群的数据库账号

dbname

需要管理维护的数据库

示例

psql -h pc-xxx.rwlb.rds.aliyuncs.com -p 1521 -U testusername -d postgres

使用应用程序连接集群

连接PolarDB PostgreSQL版(兼容Oracle)集群的方式与连接其他PostgreSQL数据库的方式一样,仅需将数据库连接地址、端口、账号及密码等进行替换即可。以下为您列举部分开发语言如何通过应用程序访问PolarDB数据库:

Java

此处以Maven项目为例,使用PostgreSQL JDBC驱动连接PolarDB PostgreSQL版(兼容Oracle)集群。

  1. 首先,您需要在pom.xml文件中添加PostgreSQL JDBC驱动的依赖,代码示例:

    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>42.2.18</version>
    </dependency>
  2. 连接集群。请将参数<HOST><PORT><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 PolarDBConnection {
        public static void main(String[] args) {
            // 数据库URL, 用户名, 密码
            String url = "jdbc:postgresql://<HOST>:<PORT>/<DATABASE>";
            String user = "<USER>";
            String password = "<PASSWORD>";
    
            try {
                // 加载JDBC驱动
                Class.forName("org.postgresql.Driver");
                
                // 建立连接
                Connection conn = DriverManager.getConnection(url, user, password);
                
                // 创建Statement对象
                Statement stmt = conn.createStatement();
                
                // 执行SQL查询
                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 e) {
                e.printStackTrace();
            }
        }
    }

Python

此处以Python3为例,使用psycopg2库连接PolarDB PostgreSQL版(兼容Oracle)集群。

  1. 首先,您需要安装psycopg2库。如果您还没有安装,可以通过以下命令进行安装:

    pip3 install psycopg2-binary
  2. 连接集群。请将参数<HOST><PORT><USER><PASSWORD><DATABASE><YOUR_TABLE_NAME>进行替换。

    import psycopg2
    
    try:
        # 连接参数
        conn = psycopg2.connect(
            host="<HOST>",  # 数据库主机地址
            database="<DATABASE>",  # 数据库名称
            user="<USER>",  # 用户名
            password="<PASSWORD>",  # 密码
            port="<PORT>"  # 端口
        )
    
        # 创建游标对象
        cursor = conn.cursor()
    
        # 执行查询
        cursor.execute("SELECT * FROM <YOUR_TABLE_NAME>")
    
        # 获取所有结果
        records = cursor.fetchall()
        for record in records:
            print(record)
            
    except Exception as e:
        print("错误:", e)
    finally:
        # 关闭连接
        if 'cursor' in locals():
            cursor.close()
        if 'conn' in locals():
            conn.close()

Go

此处以go1.23.0为例,使用database/sql包和lib/pq驱动来连接PolarDB PostgreSQL版(兼容Oracle)集群。

  1. 首先,您需要安装lib/pq驱动。您可以通过以下命令进行安装:

    go get -u github.com/lib/pq
  2. 连接集群。请将参数<HOST><PORT><USER><PASSWORD><DATABASE><YOUR_TABLE_NAME>进行替换。

    package main
    
    import (
        "database/sql"
        "fmt"
        "log"
    
        _ "github.com/lib/pq" // 初始化驱动
    )
    
    func main() {
        // 连接字符串格式
        connStr := "user=<USER> password=<PASSWORD> dbname=<DATABASE> host=<HOST> port=<PORT> sslmode=disable"
    
        // 打开数据库连接
        db, err := sql.Open("postgres", connStr)
        if err != nil {
            log.Fatal(err)
        }
        defer db.Close() // 程序退出前关闭连接
    
        // 测试连接是否成功
        err = db.Ping()
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println("Connected to PostgreSQL!")
    
        // 执行查询示例
        rows, err := db.Query("SELECT * FROM <YOUR_TABLE_NAME>")
        if err != nil {
            log.Fatal(err)
        }
        defer rows.Close()
    }
    

相关API

API

描述

DescribeDBClusterEndpoints

查询PolarDB集群的连接地址信息。

ModifyDBClusterEndpoint

修改PolarDB集群地址属性,包括读写模式、新节点是否自动加入本地址、一致性级别、事务拆分、主库是否接受读、连接池等。