ALIBABA CLOUD → STACKIT · ARCHITECTURE

PolarDB migration strategies for STACKIT

PolarDB has no one-to-one counterpart on STACKIT. In the run below, StackToIT therefore classifies each of the three PolarDB clusters as REDESIGN, names no target and leaves the choice to your architects. The choice follows the cluster's compatible engine: PostgreSQL Flex for PolarDB for PostgreSQL, MariaDB for PolarDB for MySQL, and a decision of its own for the Oracle-compatible edition.

Four options and what each one asks of you

The design question is not which STACKIT database is closest to PolarDB. It is which property of PolarDB your workload actually uses: the managed engine, the shared-storage design with many read-only nodes, or both.

OptionWhat you get on STACKITWhat you give up or must test
PostgreSQL Flex, for PolarDB for PostgreSQLA fully managed, self-service PostgreSQL deployment. An instance is a single node or a three-node replica set, and transaction logs are on by default for point-in-time recovery. PostgreSQL 14 to 18 are listed on the extensions page.Shared storage and cheap read-only nodes. Compare your extensions with the supported list, and run the workload on a replica set before you size it.
MariaDB, for PolarDB for MySQLA managed MariaDB service that STACKIT describes with MySQL compatibility and ACID transactions. Use MariaDB 10.11 or newer: as of November 2026, STACKIT lists 10.6 as deprecated and scheduled for decommissioning on 1 July 2027.MariaDB is not MySQL 8.0. Test the SQL dialect, the optimizer behaviour and every PolarDB-only setting before you commit.
Self-managed database on STACKIT servers or SKEThe engine and version you choose, including the one you run on PolarDB today, with your own replication topology.Backups, failover, patching and monitoring become yours. This is general practice, not something the run drafts.
Redesign the workload around the targetSplit the load (general practice): transactional data on a managed database, analytical reads on a copy or in a separate store.Application work. The assessment records it as an architecture and data change, not a configuration change.

The Oracle-compatible PolarDB edition (db_type = Oracle in the provider) appears in none of the STACKIT database pages we read. Treat it as a conversion project, not a migration.

A MySQL and a PostgreSQL cluster, assessed

A small estate written for this page and assessed by StackToIT on 4 November 2026. Left: the input. Right: the result StackToIT recorded for it, an excerpt of assessment.json with the values exactly as the run wrote them. assessment.json is written as a single line, so the pane shows selected fields of each unit, indented and nested as in the file, with the values unchanged.

Example inputmain.tf
resource "alicloud_polardb_cluster" "orders" {
  db_type       = "MySQL"
  db_version    = "8.0"
  db_node_class = "polar.mysql.x4.large"
  db_node_count = 3
  pay_type      = "PostPaid"
  vswitch_id    = alicloud_vswitch.db_a.id
  description   = "orders"
}

resource "alicloud_polardb_cluster" "analytics" {
  db_type       = "PostgreSQL"
  db_version    = "14"
  db_node_class = "polar.pg.g2.large"
  db_node_count = 2
  pay_type      = "PostPaid"
  vswitch_id    = alicloud_vswitch.db_a.id
  description   = "analytics"
}
StackToIT assessmentassessment.json
[
  {
    "id": "alicloud_polardb_cluster.orders",
    "result": {
      "class": "REDESIGN",
      "confidence": "LOW",
      "reason": "PolarDB separates compute from shared storage, which has no STACKIT counterpart. Choose the target by its compatible engine: PostgreSQL Flex or MariaDB, and test the workload there.",
      "axes": {
        "feasibility": "CONDITIONAL",
        "motion": "REARCHITECT",
        "change_types": [
          "ARCHITECTURE",
          "DATA"
        ]
      }
    }
  },
  {
    "id": "alicloud_polardb_cluster.analytics",
    "result": {
      "class": "REDESIGN",
      "confidence": "LOW",
      "reason": "PolarDB separates compute from shared storage, which has no STACKIT counterpart. Choose the target by its compatible engine: PostgreSQL Flex or MariaDB, and test the workload there.",
      "axes": {
        "feasibility": "CONDITIONAL",
        "motion": "REARCHITECT",
        "change_types": [
          "ARCHITECTURE",
          "DATA"
        ]
      }
    }
  }
]
  • REDESIGN, with a reason

    Both clusters get the same class and the same reason: PolarDB separates compute from shared storage, which has no STACKIT counterpart.

  • Feasibility is conditional

    The run marks feasibility as CONDITIONAL and the motion as REARCHITECT: a target exists for the data, but the architecture is not carried over.

  • Engine and version stay yours to read

    db_type and db_version are the inputs to your decision. The run does not choose between PostgreSQL Flex and MariaDB for you.

  • Node count is a sizing input

    db_node_count = 3 and 2 describe the PolarDB topology. On STACKIT the nodes belong to the instance type, so map them to a replica set deliberately.

The Oracle-compatible cluster, and a plain RDS neighbour

From the same run. The legacy cluster receives the same generic reason as the others, even though its engine is Oracle-compatible. The ApsaraDB RDS instance for PostgreSQL beside it has a direct target. assessment.json is written as a single line, so the pane shows selected fields of each unit, indented and nested as in the file, with the values unchanged.

Example inputmain.tf
resource "alicloud_polardb_cluster" "legacy" {
  db_type       = "Oracle"
  db_version    = "11"
  db_node_class = "polar.o.x4.large"
  pay_type      = "PostPaid"
  vswitch_id    = alicloud_vswitch.db_a.id
  description   = "legacy-billing"
}

resource "alicloud_db_instance" "reporting" {
  engine               = "PostgreSQL"
  engine_version       = "14.0"
  instance_type        = "pg.n2.medium.1"
  instance_storage     = 100
  instance_name        = "reporting"
  vswitch_id           = alicloud_vswitch.db_a.id
}
StackToIT assessmentassessment.json
[
  {
    "id": "alicloud_polardb_cluster.legacy",
    "result": {
      "class": "REDESIGN",
      "confidence": "LOW",
      "reason": "PolarDB separates compute from shared storage, which has no STACKIT counterpart. Choose the target by its compatible engine: PostgreSQL Flex or MariaDB, and test the workload there.",
      "axes": {
        "feasibility": "CONDITIONAL",
        "motion": "REARCHITECT",
        "change_types": [
          "ARCHITECTURE",
          "DATA"
        ]
      }
    }
  },
  {
    "id": "alicloud_db_instance.reporting",
    "result": {
      "class": "REPLATFORM",
      "confidence": "MEDIUM",
      "target": {
        "service": "STACKIT PostgreSQL Flex"
      },
      "reason": "Managed PostgreSQL to managed PostgreSQL: data moves with pg_dump/pg_restore or logical replication, and the instance class becomes a Flex flavor."
    }
  }
]
  • Read db_type yourself

    The reason text names PostgreSQL Flex or MariaDB for every PolarDB cluster. For db_type = Oracle neither is a drop-in, so the run's reason is a starting point and not an answer.

  • RDS is the contrast

    The RDS PostgreSQL instance is REPLATFORM with a named target, PostgreSQL Flex. The run says data moves with pg_dump and pg_restore or logical replication.

What to test before you pick a target

These items come from Alibaba Cloud's own FAQ for PolarDB for MySQL. They describe behaviour of the source that a plain engine swap does not reproduce.

  • Tables without a primary key

    PolarDB creates an implicit primary key for them by default. Find these tables first and give them an explicit key before the move; do not count on the target generating one for you.

  • Storage engines

    MyISAM, Memory and CSV tables are converted to InnoDB on PolarDB. Check what your dump contains.

  • Isolation level

    The SERIALIZABLE isolation level is not supported on PolarDB, so code that depends on it already runs differently today.

  • Read latency and replicas

    The FAQ states a millisecond-level replication lag between the primary and the read-only nodes, which grows under heavy writes or I/O bottlenecks. Measure read paths and lag on the target instead of assuming parity.

  • Replication out of PolarDB

    Enabling binlog lets you replicate to other MySQL databases, and Alibaba Cloud recommends Data Transmission Service for it. That is the source-side switch for a low-downtime move.

  • PolarDB-only settings

    The provider schema has imci_switch and serverless_type for PolarDB. The STACKIT database pages we read describe no equivalent, so list the clusters that set them.

What the run says about moving the data

Excerpt of migration/data-movement.md from the same run. The three PolarDB clusters are listed as stateful units without a proposed target, and the mechanism is left to a person.

StackToIT outputmigration/data-movement.md
| Unit | Source service | Target service | Application | Mechanism | State | Data class | RPO | Downtime tolerance |
|---|---|---|---|---|---|---|---|---|
| alicloud_db_instance.reporting | alicloud_db_instance | STACKIT PostgreSQL Flex |  | UNKNOWN | DECISION_REQUIRED | NOT_PROVIDED | NOT_PROVIDED | NOT_PROVIDED |
| alicloud_polardb_cluster.analytics | alicloud_polardb_cluster | NO_TARGET_PROPOSED |  | UNKNOWN | DECISION_REQUIRED | NOT_PROVIDED | NOT_PROVIDED | NOT_PROVIDED |
| alicloud_polardb_cluster.legacy | alicloud_polardb_cluster | NO_TARGET_PROPOSED |  | UNKNOWN | DECISION_REQUIRED | NOT_PROVIDED | NOT_PROVIDED | NOT_PROVIDED |
| alicloud_polardb_cluster.orders | alicloud_polardb_cluster | NO_TARGET_PROPOSED |  | UNKNOWN | DECISION_REQUIRED | NOT_PROVIDED | NOT_PROVIDED | NOT_PROVIDED |
  • NO_TARGET_PROPOSED

    This is the run being precise: it will not name a target for a REDESIGN unit. The RDS instance does get one.

  • Decision required

    Data class, recovery point and downtime tolerance are NOT_PROVIDED. Give them in the applications file and the run records them word for word; the data size is not in the Terraform at all.

How to decide, in order

Is the cluster db_type MySQL?
Candidate: STACKIT MariaDB 10.11 or newer. Test dialect and optimizer, then plan the move through binlog and a logical load.
Is it db_type PostgreSQL?
Candidate: PostgreSQL Flex. Check extensions against the supported list and plan pg_dump with pg_restore or logical replication.
Is it db_type Oracle?
No STACKIT counterpart named. Decide between a schema and code conversion to PostgreSQL and a self-managed option.
Do you use many read-only nodes?
Redesign the read path. A replica set has three nodes, so cache or split read-heavy work.
Can the application stop writing for a window?
If yes, a dump and restore is the simplest. If not, use replication and rehearse the cutover.

PolarDB to STACKIT: common questions

Does StackToIT pick a STACKIT target for PolarDB?

No. It classifies the cluster as REDESIGN with LOW confidence, writes no target and lists the cluster in data-movement.md as a unit that needs a decision. It points to PostgreSQL Flex or MariaDB by compatible engine.

Is MariaDB a safe target for PolarDB for MySQL?

It can be, but it is a different engine. STACKIT describes MariaDB with MySQL compatibility, and you still test dialect, optimizer and PolarDB-only settings. Use 10.11 or newer, because 10.6 is deprecated on STACKIT.

What happens to read-only nodes?

There is no equivalent of PolarDB's shared storage with many read-only nodes in the STACKIT pages we read. PostgreSQL Flex offers a three-node replica set; anything beyond that is a design change.

Does the run write Terraform for PolarDB?

No. For Alibaba Cloud the run writes terraform.tf, variables.tf and a README for the draft, and the PolarDB clusters stay with your architects.

Sources

Your next move: STACKIT.

Tell us about your estate. We show you what StackToIT delivers for it: target architecture, Terraform artifacts and a structured migration plan.