阿里云云原生数据库PolarDB对接使用完全指南:从集群创建到应用集成

apphuang2026年07月04日 17:20:593

一、认识PolarDB:云原生数据库的架构革新

在数据库技术向云原生演进的大趋势下,阿里云PolarDB凭借计算存储分离的架构设计,重新定义了云上数据库的使用体验。与传统数据库基于主从复制、数据需要反复拷贝的架构不同,PolarDB采用Shared Everything架构,将所有数据文件和Redo日志统一存放在共享存储设备上,主节点与所有只读副本共享同一份数据。这种设计从根本上解决了传统主从架构中数据同步延迟的难题,节点之间只需同步内存中的元数据信息,即可通过MVCC机制保障跨节点读取的一致性。

在存储层,PolarDB搭载了阿里云自主研发的分布式文件系统PolarFS,采用全用户态I/O栈设计,具备与本地SSD相当的低延迟高性能I/O能力。计算节点与存储节点之间通过25Gb高速RDMA网络互联,采用旁路内核的用户态网络协议层进行通讯,确保了事务与查询的极低延迟响应。

PolarDB的集群架构采用一写多读模式,一个集群包含一个主节点(可读可写)和最多15个只读节点。当应用程序使用集群地址时,PolarDB通过内置的代理层PolarProxy对外提供服务——代理层不仅负责安全认证与连接保护,还能智能解析SQL语句,将写操作路由到主节点、读操作均衡分发到多个只读节点,对应用程序而言整个集群如同一个单点数据库一样易用。PolarDB最高支持500TB存储空间,按实际用量动态扩容,数据库节点最多可扩容至16个,真正实现了存储与计算的无缝弹性。

需要先登录阿里云控制台,点击:阿里云控制台

二、集群创建:从零开始搭建PolarDB环境

2.1 计费模式选型

登录阿里云控制台后,在搜索栏中输入“PolarDB”进入云原生数据库产品页面,点击“创建实例”开始集群搭建。首先需要选择计费类型,阿里云PolarDB提供三种计费模式:包年包月适用于长期稳定业务,预付费用可享受较大折扣;按量付费适用于业务波动较大的场景,按实际使用时长计费;Serverless模式则是一种更极致的按需付费方式,无需预先选定固定规格,集群可根据业务负载自动弹性伸缩资源,特别适合业务流量不确定或存在明显波峰波谷的场景。

2.2 地域与可用区规划

地域和可用区的选择直接影响数据库的访问延迟与可用性。建议将PolarDB集群部署在离业务用户最近的地域,同时确保后续需要连接数据库的ECS实例与PolarDB集群位于同一地域甚至同一可用区,这样才能通过内网地址访问,充分发挥PolarDB的最佳性能。如果ECS与PolarDB位于同一VPC内,通过私网地址访问不仅延迟极低,还可节省公网流量费用。

2.3 数据库引擎与规格选择

PolarDB提供MySQL版、PostgreSQL版(兼容Oracle)等多个引擎选项。PolarDB MySQL版100%兼容MySQL 5.6/5.7/8.0,支持所有主流SQL语法,仅极少数边缘功能(如MyISAM引擎)受限。PolarDB PostgreSQL版则高度兼容PostgreSQL 11/14,并额外提供了对Oracle 11g与12c主流语法的兼容能力,支持存储过程、函数、触发器、分区表、序列、同义词等核心Oracle特性,帮助Oracle用户以极低改造成本平滑迁移上云。

在服务版本方面,PolarDB提供企业版和标准版两种选择。两者在核心架构和主要功能上保持高度一致,主要差异体现在计算和存储层的硬件配置上——企业版计算节点使用物理机,无虚拟化开销;标准版使用ECS服务器。首次测试或中小规模业务建议选择标准版最低配置以控制成本。

2.4 网络配置与VPC规划

创建集群时需要配置VPC(专有网络)和虚拟交换机。如果已有满足需求的VPC(例如已有ECS实例所在的VPC),可直接选用;若没有合适的VPC,可使用系统默认的VPC和交换机。部署模式可选择单节点(仅包含一个主节点)或多节点高可用模式。

三、安全配置:白名单与数据库账号

集群创建完成后,还不能立即使用——必须完成两项关键的安全配置:IP白名单和数据库账号。

3.1 IP白名单设置

默认情况下,PolarDB集群的IP白名单仅包含127.0.0.1,这意味着任何外部IP都无法访问该集群。进入集群详情页后,在左侧导航栏找到“安全设置”或“IP白名单”选项,将需要访问数据库的IP地址或IP段添加至白名单中。如果通过ECS访问且ECS与PolarDB位于同一VPC,可将ECS的内网IP添加至白名单,或将ECS所在的安全组添加至集群白名单。若在本地环境访问,需将本地公网IP添加至白名单。需要特别注意的是,切勿将0.0.0.0/0添加至白名单——这意味着允许所有来源访问,存在极大的安全风险。

3.2 数据库账号创建

在集群详情页的“账号管理”中创建数据库账号。PolarDB的数据库账号分为高权限账号和普通账号两种类型,权限存在差异。高权限账号拥有集群内所有数据库的管理权限,适用于日常运维和管理操作;普通账号则可根据业务需要授予特定数据库的读写或只读权限,适用于应用程序的数据库连接。创建账号时需设置账号名和密码,并指定该账号可访问的数据库及相应的权限级别。

四、连接地址解析:三种地址的定位与选择

PolarDB集群提供三种类型的连接地址:主地址、默认集群地址和自定义地址。理解这三种地址的区别是对接PolarDB的关键。

4.1 主地址

每个PolarDB集群有且仅有一个主地址。主地址始终连接到主节点,支持读写操作。当主节点发生故障时,主地址会自动切换到新的主节点。主地址不经过数据库代理,请求直接发往主节点,适用于不需要读写分离、对延迟极度敏感的场景。但主地址无法利用只读节点分担读流量,在高并发读场景下可能成为性能瓶颈。

4.2 默认集群地址(推荐)

创建PolarDB集群时,系统会同时生成一个默认集群地址。该地址的服务由数据库代理提供,支持自动读写分离——写请求自动路由到主节点,读请求自动分发到各个只读节点。默认集群地址适用于绝大多数业务场景,尤其是读多写少的互联网应用。应用程序只需连接这一个地址,即可享受读写分离带来的性能提升,无需在代码中区分主节点和只读节点。

4.3 自定义地址

一个PolarDB集群最多可创建5个自定义地址。自定义地址同样由数据库代理提供服务,可根据业务需求灵活配置读写模式(可读可写或只读)、负载均衡策略以及挂载的节点范围。例如,可以为报表分析业务创建一个只读自定义地址,仅挂载特定的只读节点,实现不同业务之间的资源隔离——某个只读节点故障只会影响对应业务,不会波及其他业务。

五、应用程序对接:多语言连接实战

5.1 准备工作

在编写代码连接PolarDB之前,需要准备好以下信息:集群的连接地址(推荐使用默认集群地址)、端口号(MySQL版默认为3306,PostgreSQL版兼容Oracle默认为1521)、数据库名称、以及前面创建的数据库账号和密码。连接地址可在集群详情页的“数据库连接”区域获取。

5.2 Java应用通过JDBC连接

PolarDB MySQL版使用标准的MySQL JDBC驱动即可连接,连接URL格式为:

jdbc:mysql://主机地址:3306/数据库名?useSSL=false&serverTimezone=UTC

Java代码示例:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class PolarDBConnectionDemo {
    public static void main(String[] args) {
        String url = "jdbc:mysql://pc-xxx.o.polardb.rds.aliyuncs.com:3306/mydb";
        String user = "myuser";
        String password = "mypassword";
        
        try (Connection conn = DriverManager.getConnection(url, user, password);
             Statement stmt = conn.createStatement()) {
            ResultSet rs = stmt.executeQuery("SELECT VERSION()");
            if (rs.next()) {
                System.out.println("PolarDB Version: " + rs.getString(1));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

对于PolarDB PostgreSQL版(兼容Oracle),需使用PostgreSQL JDBC驱动,URL格式为:

jdbc:postgresql://主机地址:1521/数据库名

5.3 Python应用通过PyMySQL连接

Python应用可使用PyMySQL库连接PolarDB MySQL版:

import pymysql

connection = pymysql.connect(
    host='pc-xxx.o.polardb.rds.aliyuncs.com',
    port=3306,
    user='myuser',
    password='mypassword',
    database='mydb',
    charset='utf8mb4'
)

try:
    with connection.cursor() as cursor:
        cursor.execute("SELECT VERSION()")
        result = cursor.fetchone()
        print(f"PolarDB Version: {result[0]}")
finally:
    connection.close()

PolarDB支持Java、Node.js、Go、PHP、.NET和Python等多种编程语言的SDK,开发者可以使用熟悉的语言构建与PolarDB交互的应用程序。不过需要注意的是,这些SDK主要用于调用PolarDB的OpenAPI进行集群管理(如创建集群、修改参数等),而非直接用于数据的增删改查操作。

5.4 Spring Boot项目集成

在Spring Boot项目中集成PolarDB极为简便,只需在application.yml中配置数据源即可:

spring:
  datasource:
    url: jdbc:mysql://pc-xxx.o.polardb.rds.aliyuncs.com:3306/mydb?useSSL=false&serverTimezone=Asia/Shanghai
    username: myuser
    password: mypassword
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      maximum-pool-size: 20
      minimum-idle: 5
      connection-timeout: 30000
      idle-timeout: 600000
      max-lifetime: 1800000

通过Spring Data JPA或MyBatis等ORM框架,开发者可实现零代码配置连接池、自动化SQL生成等高级功能,显著降低云数据库的使用门槛。

六、数据库代理高级配置:读写分离与连接池

6.1 读写分离精细化配置

PolarDB的数据库代理提供了丰富的配置选项,开发者可以在控制台创建或修改集群地址时进行精细化设置。核心配置项包括:

  • 读写模式:可选择“可读可写(自动读写分离)”或“只读”两种模式
  • 服务节点:从主节点和所有只读节点中选择哪些节点参与该地址的读请求处理
  • 负载均衡策略:只读模式下可选基于连接数或基于活跃请求数的负载均衡策略
  • 主库是否接受读:开启后查询SQL仅发送到只读节点,降低主节点负载
  • 事务拆分:开启后将事务中的非写操作拆分到只读节点执行,进一步提升读并发能力
  • 一致性级别:支持最终一致性(弱)、会话一致性(中)和全局一致性(强)三种级别

在强一致性读场景下,默认等待超时时间为3秒,可通过调整loose_replica_read_timeout参数进行控制。如果只读实例延迟超过设定阈值,读流量会自动切换到其他延迟正常的只读实例或回切到主库。

6.2 连接池配置最佳实践

PolarDB代理层支持会话级连接池和事务级连接池两种模式。开启事务级连接池后,客户端请求先与PolarDB代理建立连接,代理不会立即与后端数据库建连,而是从事务级连接池中查找是否存在可用连接(判断条件为user、dbname和系统变量三个参数值一致)。这种机制大幅减少了后端数据库的连接创建开销,在高并发场景下效果尤为显著。

在应用端配置连接池时需特别注意:许多应用使用默认连接池设置(如HikariCP的maximumPoolSize=10),在微服务架构下,10个服务实例就会产生100个连接,当服务实例扩容到50时连接数将暴增至500,可能超出数据库的连接数限制。建议将最大连接数设置为PolarDB实例连接数的80%左右,并合理配置空闲超时和连接生命周期。

七、数据迁移:从自建数据库到PolarDB的平滑过渡

7.1 DTS迁移方案概览

阿里云数据传输服务DTS(Data Transmission Service)提供了从自建MySQL、RDS MySQL、Amazon Aurora MySQL等多种数据源迁移至PolarDB的完整方案。DTS支持结构迁移、全量数据迁移和增量数据迁移三种类型,同时使用这三种迁移类型可实现在应用不停服的情况下平滑完成数据库迁移。

7.2 迁移前置条件

执行数据迁移前,需要满足以下前置条件:

  • 源数据库版本需符合DTS支持的版本范围(如自建MySQL需为5.1、5.5、5.6、5.7或8.0版本)
  • 目标PolarDB集群的存储空间须大于源数据库已占用的存储空间
  • 如需进行增量迁移,源数据库必须开启Binlog日志(PolarDB MySQL版需将loose_polar_log_bin参数设置为on)
  • Binlog日志需保留3天及以上(建议保留7天),否则DTS可能因无法获取Binlog导致任务失败
  • 待迁移的表需具备主键或唯一约束,否则可能导致目标库中出现重复数据

7.3 零停机迁移最佳实践

在实际迁移中,建议采用以下流程实现零停机迁移:

  1. 在业务低峰期启动DTS全量迁移任务,将源库的存量数据迁移至PolarDB
  2. 全量迁移完成后,DTS自动进入增量迁移阶段,实时同步源库的变更数据
  3. 在增量同步稳定运行后,将应用配置中的数据库连接地址切换为PolarDB集群地址
  4. 观察业务运行无误后,停止DTS迁移任务

需要注意的是,在将业务切换至目标集群前,务必先结束或释放DTS任务,避免任务被自动恢复后导致源端数据覆盖目标集群的数据。同时,迁移前需评估源库和目标库的性能,建议在CPU负载低于30%时执行数据迁移。

八、性能监控与运维管理

8.1 云监控告警配置

PolarDB控制台提供了与云监控服务深度集成的告警配置功能。进入集群详情页后,在左侧导航栏选择“性能监控”,点击“添加报警规则”即可创建自定义告警。可监控的关键指标包括:CPU使用率、内存使用率、磁盘空间使用率、连接数、QPS/TPS、慢查询数量等。建议针对核心指标设置合理的阈值告警,例如CPU使用率持续超过80%时触发告警,以便及时响应潜在的性能问题。

8.2 慢查询分析与优化

PolarDB控制台提供了慢SQL分析功能。在左侧导航栏选择“诊断与优化”>“慢SQL”,即可查看慢日志明细。分析慢查询时,重点关注“扫描行数”与“返回行数”的对比——如果扫描行数远大于返回行数,说明查询缺少合适的索引或SQL写法存在优化空间。常见的优化手段包括:创建合理索引、调整查询条件顺序、避免SELECT *、使用分区表等。

8.3 参数调优

PolarDB允许在控制台修改集群和节点的参数。对于MySQL版,关键参数包括:innodb_buffer_pool_size(缓冲池大小)、max_connections(最大连接数)、query_cache_size(查询缓存大小)等。需要根据业务负载特征逐步调整参数,每次修改后观察性能变化,避免一次性大幅调整导致不稳定。

九、兼容性注意事项

虽然PolarDB MySQL版宣称100%兼容MySQL,但在实际使用中仍需注意以下限制:

  • 暂不支持MyISAM存储引擎,仅支持InnoDB引擎
  • 部分低版本MySQL语法(如PASSWORD()函数)可能需要调整
  • 相同SQL在PolarDB下可能因分布式架构产生不同的执行计划,建议迁移后逐一验证核心查询的性能
  • 建议使用DTS工具在迁移前自动检测兼容性问题

对于PolarDB PostgreSQL版(兼容Oracle),虽然支持95%以上的Oracle SQL语句与PL/SQL代码,但仍需注意:插件支持有限(部分扩展需手动安装)、某些冷门API可能不兼容。迁移前建议在测试环境中充分验证业务相关的高级特性。

十、问答环节

问1:PolarDB的集群地址和主地址有什么区别?我应该用哪个?

答:主地址始终连接到主节点,支持读写但不经过数据库代理;集群地址(默认集群地址)经过数据库代理,支持自动读写分离。绝大多数业务场景推荐使用集群地址,可充分利用只读节点分担读压力。

问2:我的应用是Java Spring Boot,如何连接PolarDB?

答:在application.yml中配置数据源即可,使用标准的MySQL JDBC URL(jdbc:mysql://地址:3306/库名),驱动使用com.mysql.cj.jdbc.Driver。PolarDB MySQL版完全兼容MySQL协议,无需使用特殊驱动。

问3:从自建MySQL迁移到PolarDB需要停机吗?

答:不需要。通过DTS的全量+增量迁移方案,可以先迁移存量数据,再实时同步增量变更,最后在业务低峰期切换应用连接地址即可实现零停机迁移。

问4:PolarDB支持哪些编程语言?

答:PolarDB支持Java、Node.js、Go、PHP、.NET和Python等主流编程语言。由于PolarDB MySQL版完全兼容MySQL协议,任何支持MySQL的语言/框架均可直接连接使用。

问5:如何降低PolarDB的使用成本?

答:建议从以下几方面着手:选择包年包月计费(长期稳定业务)、使用Serverless模式(波动业务)、确保ECS与PolarDB同地域通过内网访问免流量费、合理选择节点规格避免资源浪费、利用只读节点分担读压力降低主节点规格需求。

问6:PolarDB的白名单应该怎么配置才安全?

答:遵循最小权限原则——仅添加确实需要访问数据库的IP地址或安全组。切勿添加0.0.0.0/0。如果通过ECS访问且同VPC,优先使用内网IP或安全组方式添加。

相关文章

买阿里云服务器能便宜吗?十年代理揭秘 3 大省钱攻略!

买阿里云服务器能便宜吗?十年代理揭秘 3 大省钱攻略!

作为深耕阿里云代理领域 10 年的 “老司机”,经常被问到:“买阿里云服务器能便宜吗?有没有优惠价格?” 今天就用实打实的行业经验告诉你:不仅能便宜,选对渠道还能省一大笔! 这篇文章带你解锁阿里云服务…

做了 10 年腾讯云代理,我想跟你聊聊返佣那些事儿​

做了 10 年腾讯云代理,我想跟你聊聊返佣那些事儿​

最近总有朋友问我:“腾讯云有返点吗?腾讯云服务器能拿佣金不?返佣比例到底有多少?” 作为一个在腾讯云代理行业摸爬滚打了 10 年的 “老人”,今天就来跟大家好好…

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商的核心价值定位1. 代理商的角色与职责阿里云代理商作为阿里云生态的核心合作伙伴,承担着双重核心职能:• 产品销售:负责推广销售阿里云全系列云产品,包括云服务器ECS、云数据库RDS、对象存…

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

01一、阿里云代理商的核心价值定位1. 代理商的角色与职责阿里云代理商作为阿里云生态的核心合作伙伴,承担着双重核心职能:• 产品销售:负责推广销售阿里云全系列云产品,包括云服务器ECS、云数据库RDS…

阿里云代理商有哪些?阿里云代理返点是真的么?

阿里云代理商有哪些?阿里云代理返点是真的么?

一,阿里云代理商基本介绍阿里云代理商通俗一点,就是指从事阿里云云服务器,云数据库等阿里云公有云产品销售的代理商,每销售一件阿里云公有云产品出去,阿里云给予该代理商一定比例的提成。在阿里云官方定义中,这…

2026阿里云代理商生态全解析:五级代理体系、返佣政策与企业上云指南

2026阿里云代理商生态全解析:五级代理体系、返佣政策与企业上云指南

一、阿里云五级代理体系:权益阶梯与合作价值1. 五级代理的核心权益差异阿里云构建了多层次的代理生态体系,涵盖全国总代理、区域核心代理、行业ISV(独立软件开发商)、金牌/银牌认证代理及标准代理五大核心…