Google Cloud Database Migration Service: Moving Your Data Without Stopping the Show
A friendly, in-depth guide to how Google Cloud's managed migration service copies, converts and continuously syncs databases into Cloud SQL and AlloyDB, so your applications stay online while the move happens.
Imagine you are moving from an old apartment to a new house, but you are not allowed to close your shop for even one afternoon. Customers keep walking in, buying things and writing in your ledger while the moving trucks are loading boxes. The trick is to carry everything over slowly, keep a careful list of every new sale that happens during the move, and then hand over the keys at a moment when almost nothing is left to carry. That is exactly the problem that Google Cloud Database Migration Service solves for databases, and in this guide we will walk through it one idea at a time.
1What Is Database Migration Service?
Database Migration Service, usually shortened to DMS, is Google Cloud’s managed tool for moving databases into Google Cloud.
A database is an organized collection of information, such as customer names, orders, bank balances or student marks. Applications read from it and write to it all day long. When a company decides to run that database on Google Cloud instead of in its own server room, someone has to copy every table, every row and every rule across safely. Doing that by hand is slow, risky and stressful.
DMS does the heavy lifting for you. It is a fully managed service, which means Google runs and watches the machinery that performs the copy. You do not create migration servers, you do not size them, and you do not patch them. You describe where your data lives today, where you want it to live tomorrow, and DMS takes care of the transfer, including the schema, the metadata and the data itself.
Think of DMS as a professional moving company that also keeps your shop open. The movers pack the old shop, drive the boxes over, and keep a notebook of every sale made while they were driving. Before they leave, they unpack that notebook at the new shop so nothing is lost.
Where DMS fits in the Google Cloud family
DMS does not store your data for the long term. It is a bridge, not a destination. The destinations are Google Cloud databases, mainly Cloud SQL (Google’s managed MySQL, PostgreSQL and SQL Server) and AlloyDB for PostgreSQL (a high-performance PostgreSQL-compatible database). Once the migration is finished, DMS steps away and your applications talk directly to the new database.
2Why Do Teams Migrate Databases at All?
Understanding the motivation makes every later design choice easier to follow.
Nobody migrates a database for fun. A database is usually the most sensitive part of any system, because losing or corrupting data is far worse than a slow web page. Teams migrate only when the benefits clearly outweigh the risks. Knowing the common reasons helps you choose the right strategy.
Less Operational Work
Managed databases handle backups, patching, failover and storage growth so engineers can focus on the application.
Data Center Exit
Hardware leases end, buildings close, and companies decide to stop running their own server rooms.
Licensing Costs
Moving from a commercial engine to open-source PostgreSQL can reduce license bills significantly.
Scale and Performance
Cloud databases can grow storage and add read replicas far faster than a physical server can be upgraded.
Reliability
High availability options and automated backups are built in rather than assembled by hand.
Modernization
Teams want to be closer to analytics, machine learning and other cloud services that sit beside the database.
What makes migration hard?
The first difficulty is size. Databases can hold terabytes, and copying that much data takes hours or days. The second difficulty is change. While you copy, customers keep creating new records, so the copy is out of date the moment it finishes. The third difficulty is difference. If the old and new database engines speak slightly different dialects, the structure itself must be translated.
Many beginners think a migration is just copying a file. A live database is constantly changing, so a simple file copy would capture a half-finished, inconsistent picture. Proper migration tools understand the database’s internal change log.
3Core Concepts and Vocabulary
Before going deeper, let us define every word you will meet in the console and the documentation.
Source Database
The database you are moving away from. It might be on-premises, in another cloud, or already inside Google Cloud.
Destination Database
The Cloud SQL or AlloyDB instance that will receive the data and become your new home.
Connection Profile
A saved description of how to reach a database: its address, credentials and security settings. You create one for the source and one for the destination.
Migration Job
The actual unit of work. A job ties a source profile to a destination, picks the migration type and runs the whole process.
Full Dump (Backfill)
The first big copy of all existing data. Google also calls the historical snapshot a backfill when discussing pricing.
Change Data Capture (CDC)
The process of reading the source’s change log and replaying every new insert, update and delete on the destination.
Promotion
The final step where the destination stops being a replica and becomes the real, independent, writable database.
Conversion Workspace
An editor-like area used in cross-engine moves to translate schema and code from one database dialect to another.
A connection profile is like a contact card with an address and a door key. A migration job is the moving schedule that says which truck goes from which card to which card, and promotion is the moment the new address officially becomes your home.
DMS is a regional service. The connection profiles, migration jobs, destination databases and conversion workspaces for one migration must all live in the same Google Cloud region.
4Homogeneous and Heterogeneous Migrations
The single most important classification in DMS is whether the database engine changes during the move.
A homogeneous migration keeps the same database engine. For example, you move a MySQL database into Cloud SQL for MySQL. The language the database speaks stays the same, so the structure and code carry over directly.
A heterogeneous migration changes the engine. A classic example is moving an Oracle database into PostgreSQL. Oracle and PostgreSQL use different data types, different built-in functions and different procedural languages, so the structure and code must be converted before data can flow.
A homogeneous move is like moving a book from one English bookshelf to another. A heterogeneous move is like translating the book from English into French first, then shelving it. The second job needs a translator, and translators sometimes need help with tricky sentences.
| Aspect | Homogeneous | Heterogeneous |
|---|---|---|
| Engine change | No, same engine | Yes, different engine |
| Example paths | MySQL to Cloud SQL for MySQL; PostgreSQL to Cloud SQL or AlloyDB; SQL Server to Cloud SQL for SQL Server | Oracle to Cloud SQL or AlloyDB for PostgreSQL; SQL Server to PostgreSQL |
| Schema work | Migrated as-is | Converted using a conversion workspace |
| Application changes | Usually minimal | Often needed, because SQL dialects differ |
| Effort and risk | Lower | Higher, with more testing required |
| DMS pricing | No additional charge for native migrations | Charged by volume of data processed |
If you have the freedom to choose, a homogeneous lift-and-shift first and a later modernization second is often safer than changing engine and location at the same time. Changing one big thing per project keeps debugging simple.
5One-Time and Continuous Migrations
Your second big choice is how long the source and destination stay in sync.
A one-time migration performs a full dump and load only. It copies everything that exists at that moment and then stops. It does not follow later changes, so you need to stop writes on the source during the process to avoid losing data. This is a good fit for small databases, test environments, or systems that can tolerate a maintenance window.
A continuous migration starts with the same full dump, but then it keeps listening to the source’s change log and applying every change to the destination. The two databases stay almost identical until you decide to switch. Because the final switch only needs to wait for a tiny backlog, downtime can shrink from hours to minutes.
Continuous Migration Wins When
- The database is large and a long outage is unacceptable
- You want time to test the new database with real, fresh data
- You need a rehearsal cutover before the real one
- Business rules demand minimal downtime
One-Time Migration Wins When
- The data set is small and copying takes minutes
- A scheduled maintenance window is acceptable
- The source cannot be configured for change logging
- You only need a snapshot for a test or proof of concept
A one-time migration is like photocopying a notebook and walking away. A continuous migration is like having a friend sit next to you, copying each new line into a second notebook as you write, so the second notebook is always almost current.
6Supported Sources and Destinations
DMS supports a defined list of engines, versions and hosting locations, and the list changes over time.
The destination side is deliberately narrow. DMS moves data into Google Cloud, specifically into Cloud SQL and AlloyDB for PostgreSQL. It is not a general-purpose tool for moving data out of Google Cloud or between two other clouds.
MySQL to Cloud SQL for MySQL
Sources include self-managed MySQL on-premises or on cloud virtual machines, Amazon RDS, Amazon Aurora, Microsoft Azure Database for MySQL and Cloud SQL itself. MariaDB is not compatible. The destination should be the same major version or one version higher than the source.
PostgreSQL to Cloud SQL for PostgreSQL
Sources include self-managed PostgreSQL, Amazon RDS and Aurora, Azure Database for PostgreSQL Flexible Server and other Cloud SQL instances. The service migrates the whole database server, including all databases inside it.
PostgreSQL to AlloyDB for PostgreSQL
A homogeneous path for teams that want the higher performance and scale of AlloyDB while keeping PostgreSQL compatibility.
SQL Server to Cloud SQL for SQL Server
A homogeneous path that supports certain editions and versions, with some older or limited editions excluded. Always check the current compatibility table before planning.
Oracle to Cloud SQL or AlloyDB for PostgreSQL
A heterogeneous path with conversion workspaces. Supported Oracle sources include self-hosted single instances, Exadata, Real Application Clusters, Active Data Guard, Bare Metal Solution and Amazon RDS for Oracle. Several versions from 11g through 21c are covered, while Oracle Autonomous Database is not supported.
SQL Server to PostgreSQL
A heterogeneous path for teams leaving a commercial engine for open-source PostgreSQL, again with edition and version limits that you must verify.
Version lists, minor-version support and new migration paths are updated regularly. Treat any list in an article, including this one, as a starting point and confirm against the official supported databases page before you finalize a plan.
7Architecture and Components
Let us look at the building blocks that appear when a migration runs.
At the highest level, there are four players. The source database holds the original data. DMS acts as the coordinator and data mover. A network path connects the source to the destination. The destination database receives the data. Everything you configure in the console is really about describing these four players and the road between them.
flowchart LR
A["Source database on-premises or other cloud"] --> N["Secure network path"]
N --> D["Database Migration Service"]
D --> T["Destination Cloud SQL or AlloyDB"]
D --> M["Monitoring and logs"]
C["Conversion workspace for cross-engine moves"] --> T
In the diagram, notice that the conversion workspace connects to the destination, not to the data stream. The workspace prepares the structure of the new database, while the migration job fills it with data. These are two related but separate activities.
The components in plain words
Source Connection Profile
Holds the address, port, username and security details used to read from the source.
Destination Instance
The Cloud SQL or AlloyDB instance. DMS can create the Cloud SQL destination for you or use one you prepared.
Migration Job
Runs the dump, tracks replication and exposes status, lag and errors in one place.
Networking Method
The route from destination to source, such as an IP allowlist, reverse SSH tunnel, VPC peering or Private Service Connect.
During migration, it is the destination that reaches out to the source to pull data. That is why most network setup work is about letting the destination see the source, not the other way round.
8How a Migration Works Internally
Every continuous migration follows the same story: copy, catch up, switch.
When you start a continuous migration job, DMS first records a consistent starting point in the source’s change log. It then performs the full dump, copying the existing data to the destination. While the dump runs, the source keeps accepting writes, and those writes are safely recorded in the log.
After the dump finishes, DMS switches into change data capture mode. It reads the recorded changes from the log in order and applies them to the destination. At first there may be a backlog, but the destination quickly catches up, and from then on the gap between the two systems is measured in seconds or less.
Prepare the Source
Enable the source settings that expose a change log and create a user with enough permissions for DMS to read data and the log.
Create Profiles and the Job
Describe the source, choose the destination, pick the migration type and select a networking method.
Full Dump
DMS reads existing data and loads it into the destination. Large databases spend most of their time in this phase.
Change Data Capture
DMS replays ongoing inserts, updates and deletes so the destination keeps up with the source.
Verify and Promote
You check the data, stop writes on the source, wait for lag to reach zero and promote the destination.
sequenceDiagram
participant App as Application
participant Src as Source database
participant DMS as Migration job
participant Dst as Destination database
App->>Src: Normal reads and writes
DMS->>Src: Mark starting point in change log
DMS->>Src: Read existing data
DMS->>Dst: Load full dump
App->>Src: More writes continue
DMS->>Src: Read new changes
DMS->>Dst: Apply changes in order
App->>Dst: After promotion, app points here
Think of a bank statement. The full dump is like copying last month’s statement. Change data capture is like copying each new transaction as it appears, until your copy shows the same balance as the bank’s own record.
9Data Flow and Migration Lifecycle
A migration job moves through recognizable phases, and knowing them helps you read the console correctly.
A job begins as a configuration that has not yet started. Once you start it, it enters the full dump phase. When the dump completes, continuous jobs move into change data capture and stay there for as long as you wish. One-time jobs behave differently: after the dump, they reach a state described in the documentation as ready for promote, because there are no changes left to follow.
Promotion is the last meaningful action. It tells DMS to stop replication and convert the destination into a standalone database that your applications can write to. After promotion, the link between old and new is cut, and the old source no longer receives updates.
flowchart TD
A["Job created"] --> B["Full dump running"]
B --> C{"Migration type"}
C -->|"Continuous"| D["Change data capture running"]
C -->|"One-time"| E["Ready for promote"]
D --> F["Lag near zero and checks passed"]
F --> G["Promote"]
E --> G
G --> H["Destination is independent and writable"]
Exact status names can differ slightly between console versions and migration paths. Learn the idea behind each phase rather than memorizing labels, and always read the current documentation for your specific path.
Why replication lag is the number to watch
Replication lag is the delay between something happening on the source and the same thing appearing on the destination. A small, steady lag means the destination is healthy. A growing lag means the destination cannot keep up, often because it is under-sized or the source is receiving unusually heavy writes.
10Connectivity: Building the Road Between Source and Destination
Choosing the right network method is often the longest conversation in a migration project.
DMS offers several ways for the destination to reach your source. The right choice depends on where the source lives, how sensitive the data is, how big the migration is and how much network setup your organization permits. Understanding the trade-offs early prevents painful rework later.
| Method | How It Works | Best For | Watch Out For |
|---|---|---|---|
| IP allowlist | The source accepts connections from the destination’s outgoing public IP address | Quick proofs of concept and small moves | Traffic crosses the public internet, so it is less secure |
| Reverse SSH tunnel | A tunnel through a cloud VM lets the destination reach the source securely | Short-lived moves when no Google Cloud VPC reaches the source | You own and pay for the VM; performance is limited |
| VPC peering | Networks are connected privately, often together with VPN or Interconnect | Long-running or high-volume migrations | Needs a VPC that can already reach the source |
| Private Service Connect interfaces | A network attachment in your VPC lets the destination reach private source IPs | Private connectivity without using peering quota | Needs firewall changes; attachment cannot be modified afterwards |
flowchart LR
S["On-premises source"] --- V["VPN or Interconnect"]
V --- P["Your Google Cloud VPC"]
P --- X["Peering or Private Service Connect"]
X --- D["Destination database"]
An IP allowlist is like using a public road and posting a guard at your gate. A reverse tunnel is a private covered bridge. VPC peering or Private Service Connect is a private road that never touches the public highway at all.
AlloyDB uses private services access, which relies on VPC peering internally. Transitive peering is not supported, so if the source lives in a different peered network, an intermediary proxy such as a reverse SSH setup may be needed.
11Conversion Workspaces for Cross-Engine Migrations
When the engine changes, the structure and code must be translated before data can move.
An Oracle database often contains thousands of objects: tables, indexes, views, sequences, packages, functions and stored procedures. Each has Oracle-specific syntax. A conversion workspace is an interactive area in DMS where these objects are converted into PostgreSQL syntax, reviewed, fixed and then applied to the destination.
Conversion happens in rounds, not all at once. You add a group of objects, run the conversion, read the issues, fix them and test in the destination. Then you add the next group. This staged approach keeps a huge conversion manageable, and it lets different people work on different areas.
Create the Workspace
Point it at your source and choose the PostgreSQL destination type.
Run the Initial Conversion
DMS translates what it can automatically and flags what it cannot.
Review and Fix Issues
Engineers edit problem objects, with optional Gemini-assisted explanations and fix suggestions for tricky code.
Apply to the Destination
Converted objects are created in the destination database, ready to receive data.
A converted function that compiles is not the same as a function that behaves identically. Date handling, empty-string rules, number precision and sorting can differ between engines, so run your real application tests against the converted database.
Conversion is usually the largest chunk of effort in a heterogeneous project, not the data copy. Experienced teams start conversion early, run it repeatedly and treat remaining issues as a backlog to be tracked sprint by sprint.
12Preparing the Source and the Destination
Most failed migrations fail during preparation, not during the migration itself.
Preparation has two halves. On the source, you prepare for access and for change tracking. On the destination, you prepare capacity and connectivity. Doing both carefully before pressing start saves days of troubleshooting.
Source preparation
The source must allow the destination to connect, and for continuous migrations it must expose a change log in the format DMS understands. This usually means changing database configuration settings, which may require a restart in some engines. A dedicated migration user with only the permissions needed is better than reusing an administrator account.
Destination preparation
The destination should have enough compute and memory to handle the full dump and the live changes at the same time. Many teams scale the destination up during migration and scale it back down afterwards. Storage should have headroom, because the migrated data plus indexes and logs can be larger than expected.
Enable the APIs
The Database Migration Service API and related services such as Compute Engine, Cloud SQL Admin and Cloud Storage must be enabled in the project.
Grant the Roles
The person creating the job needs suitable roles, such as the Database Migration Admin role, plus rights on the destination service.
Review Limitations
Read the known limitations for your path: data types, object types, size limits and unsupported features.
Plan the Network
Choose a connectivity method, open firewalls and test reachability before creating the job.
Pick the Region
Choose a destination region close to your applications and users, since all migration entities must share one region.
Freeze Schema Changes
Avoid structural changes on the source while the migration runs, because they can interrupt replication.
Use the connection profile test feature before starting a job. A failed test in the first five minutes is far cheaper than a failed job after a ten-hour dump.
13Security Considerations
You are moving your most valuable asset, so security must be designed in from the start.
Security in a migration has four layers: who may operate the migration, how the data travels, how the data is protected at rest, and how credentials are handled. Each layer has its own tools.
Access Control
Use Identity and Access Management roles so only authorized people can create, run and promote migration jobs. Prefer least privilege over broad administrator roles.
Encryption in Transit
Use SSL or TLS certificates for the source connection. For Oracle, DMS supports TLS for version 12 and later.
Encryption at Rest
Cloud databases are encrypted by default. If your policy requires customer-managed encryption keys, plan them before creating the destination.
Private Networking
Prefer private connectivity methods over public IP allowlists for sensitive or regulated workloads.
Credentials and cleanup
The migration user on the source holds powerful read access, so treat its password like a key to the vault. Use a unique password, limit its network access, and remove or disable the account when the migration is complete. Delete connection profiles and jobs you no longer need, because they hold connection details.
Data residency and compliance
Because DMS is regional, you choose exactly where the destination data will live. This matters for regulations that restrict where personal data may be stored. Confirm the region choice with your compliance team before building anything.
Leaving a temporary public IP allowlist open after the migration ends. Once cutover is complete, remove every temporary firewall rule, tunnel VM and network attachment you created only for the migration.
14Monitoring, Logging and Metrics
A migration you cannot observe is a migration you cannot trust.
DMS shows job status and progress in the console, and it integrates with Google Cloud’s logging and monitoring tools. During the full dump phase, you mainly watch progress and errors. During change data capture, you mainly watch replication lag, because lag tells you how far behind the destination is.
What to alert on
Set alerts for jobs that fail, for lag that grows beyond a threshold you define, and for destination resource pressure such as high CPU or low disk space. Alerts let you react at night or on weekends without staring at a screen.
Verifying completeness
Monitoring tells you the process is healthy, but it does not prove the data is correct. Validation is a separate step. Compare row counts between source and destination, compare checksums or sampled records for critical tables, and run business-level checks such as totals of orders or balances.
Monitoring is like watching the moving truck’s GPS to confirm it is on the road. Validation is opening the boxes at the new house and checking that the plates are not broken.
Some items are outside the automatic migration scope for certain paths, such as particular users, certain schemas or specific object types. Read the completeness guidance for your path and plan manual steps for those items.
15Cutover and Promotion Strategy
Cutover is the short, careful moment when production traffic changes address.
Cutover is where all the preparation pays off. Because continuous migration keeps the destination almost current, the cutover itself can be a quick, scripted event. The key is to treat it like a rehearsed procedure rather than an improvisation.
Confirm Readiness
Lag is small and steady, validation checks are passed, and the application has been tested against the destination.
Stop Writes on the Source
Pause the application or put it into read-only mode so no new changes appear on the old database.
Let the Backlog Drain
Wait until replication lag reaches zero so the destination has every last change.
Promote
Promote the destination so it becomes independent and writable.
Repoint and Verify
Switch application connection settings to the new database and run smoke tests on key business flows.
flowchart LR
A["Application writes to source"] --> B["Pause writes"]
B --> C["Drain remaining changes"]
C --> D["Promote destination"]
D --> E["Application writes to destination"]
Plan the way back
Before promotion, decide what happens if the new database misbehaves. After promotion, the old source no longer receives new writes, so a rollback means either returning to a stale source or building a reverse path. Many teams keep the source untouched and read-only for a defined period, and decide in advance how long that period lasts.
16Limitations and Gotchas
Every tool has edges, and knowing them in advance turns surprises into planned work.
DMS publishes known limitations for each migration path. They cover data types, object types, database sizes and behaviors during replication. The exact list differs between MySQL, PostgreSQL, SQL Server and Oracle paths, so you must read the one matching your scenario. Several patterns appear again and again.
Tables Without Primary Keys
Row-level replication needs a way to identify rows. For PostgreSQL migrations, tables without primary keys support the initial snapshot and inserts during change capture, while updates and deletes on those tables must be handled manually. Adding primary keys before migration is the cleanest fix.
Materialized Views
In PostgreSQL paths, the structure of a materialized view is migrated, but not the data inside it. You refresh it on the destination after migration.
Large Objects
Special large-object storage in PostgreSQL has particular behaviors during change capture. Test applications that rely on it.
Unsupported Editions and Engines
MariaDB is not compatible, Oracle Autonomous Database is not supported, and some older or limited SQL Server editions are excluded.
Whole-Server Scope for PostgreSQL
The PostgreSQL path migrates the entire database server, including every database in it, rather than a hand-picked single table. Plan accordingly if you only want part of the data.
Destination Version Rules
For MySQL, the destination should be the same major version or one version higher, and certain features differ for the newest destination versions.
Run a rehearsal migration on a copy of your data early in the project. Rehearsals surface limitation issues while you still have time to fix them, not on cutover night.
17Understanding the Cost
The pricing model is simple in principle, but the total bill includes more than the DMS line.
For homogeneous migrations into Cloud SQL or AlloyDB for PostgreSQL, Google offers DMS at no additional charge. You still pay for the destination database itself and for related resources such as storage or network. For heterogeneous migrations, pricing is based on gigabytes processed, split into two parts: the backfill of existing data and the change data capture of ongoing changes.
Google’s pricing documentation describes a monthly free allowance for backfill and then a per-gigabyte rate above it, and rates vary by region and volume tier. Because prices are updated over time, always confirm current numbers on the official pricing page and use the pricing calculator for your region.
| Cost Item | Applies To | Notes |
|---|---|---|
| DMS service fee | Heterogeneous migrations | Charged by volume for backfill and change capture |
| DMS service fee | Native homogeneous migrations | No additional charge |
| Destination instance | All migrations | Normal Cloud SQL or AlloyDB pricing, including storage |
| Networking | Often | Interconnect, VPN, tunnel VMs and data transfer can add cost |
| Encryption keys storage | If using customer-managed keys | Related key and storage services are billed separately |
| People and testing time | Always | Usually the largest cost in a heterogeneous project |
Do not leave migration jobs running for months out of forgetfulness. Continuous jobs with change capture accumulate usage, so promote or delete them once cutover is done.
18Design Patterns and Anti-Patterns
Teams that succeed repeat a few habits, and teams that struggle repeat a few mistakes.
Helpful patterns
Rehearse First
Run the full process on a non-production copy, including cutover, before touching production.
Migrate, Then Modernize
Lift and shift first, then refactor, so that each problem has a single clear cause.
Read-Only Verification Window
Run reports and read-heavy tests against the destination while replication continues, before switching writes.
Runbook Cutover
Write a numbered cutover checklist with owners and times, and practice it.
Anti-patterns to avoid
Problem
The team starts the migration job in production with no rehearsal and no rollback plan.
Why It’s Harmful
Any surprise, such as an unsupported data type or a network rule, appears at the worst possible time, with business pressure rising and no tested response.
Correct Approach
Rehearse on a copy, document limitations found, define rollback conditions and agree who decides to proceed or stop.
Problem
An under-sized destination is chosen to save money during the migration.
Why It’s Harmful
The destination cannot apply changes as fast as they arrive, so lag grows, the cutover window stretches and the saving disappears.
Correct Approach
Size generously during migration and scale down afterwards based on real production metrics.
Problem
The team treats the converted schema in a cross-engine migration as finished once it compiles.
Why It’s Harmful
Behavior differences between engines cause silent bugs, such as different handling of empty values or rounding, that only show up in production.
Correct Approach
Run complete functional and performance tests on the converted database with realistic data.
19Best Practices and Common Mistakes
A short checklist of habits that experienced migration teams share.
Best Practices
- Read the supported databases and known limitations pages for your exact path
- Add primary keys to tables that lack them before migrating
- Choose private connectivity for production and sensitive data
- Test connection profiles before starting any job
- Scale the destination up for the migration and down afterward
- Validate data with counts, checksums and business totals
- Write and rehearse a cutover runbook
- Clean up profiles, jobs, tunnels and firewall rules afterward
Common Mistakes
- Assuming every object and user is migrated automatically
- Changing the schema on the source during replication
- Starting cutover before lag is near zero
- Ignoring application and driver compatibility with the new engine
- Leaving temporary public access open
- Forgetting to plan for rollback
- Picking a destination region without checking latency to users
Ownership and communication
Migrations touch many teams: database administrators, application developers, network engineers, security staff and business owners. Name one person who owns the overall plan and keep a shared checklist. Announce the cutover window early, and tell support teams what to watch for afterward.
Keep an eye on performance for the first weeks. Query plans, caching and index usage can behave differently in a new environment, and small tuning changes often deliver large improvements.
20Real-World Scenarios
These typical situations show how the ideas fit together in practice.
Retail Company Leaving a Data Center
An online store runs MySQL in its own server room. It chooses a continuous homogeneous migration into Cloud SQL for MySQL over a VPN and a private network path. It rehearses twice, then cuts over during a quiet night with a few minutes of read-only mode.
Bank Replacing Commercial Licensing
A financial services team moves an Oracle database to AlloyDB for PostgreSQL. It spends months in a conversion workspace fixing procedures, runs both systems in parallel for validation and cuts over only after audit sign-off.
Startup Moving from Another Cloud
A small team on Amazon RDS for PostgreSQL wants to consolidate on Google Cloud. It uses a continuous migration to Cloud SQL for PostgreSQL, adds primary keys to a few legacy tables first, and finishes the whole move in a weekend.
Software Vendor Moving Customer Databases
A vendor migrates dozens of separate SQL Server databases, one customer at a time. It builds a repeatable runbook and reuses the same checks for each, so every move becomes faster than the last.
Proof of Concept for a Large Program
An enterprise runs a one-time migration of a small test database to measure copy speed, compatibility problems and estimated costs before approving a larger program.
The common thread in all of these is preparation. Success depends less on clever tooling and more on clear scoping, honest testing and a calm, practiced cutover.
21How DMS Compares with Other Migration Services
Every major cloud has its own migration service, and each is built around its own destination.
Amazon Web Services and Microsoft Azure also offer database migration services, and all three promise low-downtime replication into their own platforms. They differ in supported engines, pricing models and tooling. A simple way to choose is to look at where you want to land: the best migration service is usually the one native to your destination.
| Aspect | Google Cloud DMS | Other Cloud Migration Services |
|---|---|---|
| Destination focus | Cloud SQL and AlloyDB | Their own cloud’s databases |
| Infrastructure | Fully managed, no instance to size | Varies by service and tier |
| Homogeneous pricing | No additional DMS charge for native paths | Different models, often compute-based |
| Cross-engine help | Conversion workspaces with Gemini assistance | Separate schema conversion tools in some clouds |
If your destination is not Cloud SQL or AlloyDB, such as BigQuery, Spanner or a self-managed database on virtual machines, you will need other tools like Datastream, export and import workflows or partner products.
22Planning a Migration Project from Start to Finish
The tool is only one piece; a good project plan decides whether the migration feels calm or chaotic.
Many beginners open the console and start creating profiles on day one. Experienced teams do the opposite. They spend the first weeks understanding what they own, what depends on what, and what could go wrong. DMS makes the technical copy easier, but it cannot tell you which databases matter most, who must approve the cutover, or which application quietly reads a table nobody remembers.
Start with an inventory
List every database you intend to move. For each one, record the engine and version, the approximate size, the daily growth, the peak write rate, the applications that use it and the people who own it. This list is your map. Without it, surprises appear late, such as a reporting tool that connects directly to the old server and breaks the moment the address changes.
Group databases into waves
If you have many databases, do not move them all at once. Group them into waves. Put small, low-risk systems in the first wave so the team learns the process cheaply. Put the most critical and complex systems in later waves, after the runbook has been tested several times. Each wave teaches you something that makes the next wave safer.
Assess
Inventory databases, check engine and version against the supported list, and identify unsupported features early.
Plan
Choose migration type, destination service, region, network method, waves and a target date with a buffer.
Prepare
Enable APIs, grant roles, configure the source, build the destination and open the network path.
Rehearse
Run the entire migration on a copy and measure copy speed, lag behavior and application compatibility.
Migrate and Cut Over
Run the production job, validate, then follow the cutover runbook.
Optimize and Close
Tune the new database, remove temporary resources and record lessons learned.
Define who does what
| Role | Main Responsibility |
|---|---|
| Project owner | Owns the plan, schedule and go or no-go decision |
| Database administrator | Prepares the source, builds the destination, watches lag and runs validation |
| Application developers | Fix compatibility issues, update connection settings and run functional tests |
| Network engineers | Build and test connectivity, firewalls, VPN or Interconnect |
| Security and compliance | Approve region, encryption, access and data handling |
| Quality assurance | Execute test plans before and after cutover |
| Business owner | Approves the downtime window and signs off on results |
Agree on go or no-go criteria
Before the cutover night, write down exactly what must be true to proceed. For example: replication lag stays under a defined number of seconds, validation reports show no unexplained differences, test teams have signed off, and rollback steps have been reviewed. Written criteria stop emotional decisions at midnight.
Whatever date you choose, add schedule buffer for surprises. Network approvals, firewall tickets and security reviews in large companies often take longer than the actual data copy.
23Sizing the Destination and Estimating Migration Time
Two questions arrive in every planning meeting: how big should the new database be, and how long will the copy take?
Neither question has a single formula, because the answer depends on your own data and your own network. What you can do is understand the factors that matter, measure them in a rehearsal and then decide with evidence instead of guesses.
Filling a swimming pool through a garden hose is slow no matter how big the pool is, and a wide hose into a tiny bucket overflows. Migration speed is limited by the narrowest part of the chain: the source’s ability to read, the network pipe, or the destination’s ability to write.
flowchart LR
A["Source read speed"] --> B["Network bandwidth and latency"]
B --> C["Migration service processing"]
C --> D["Destination write speed"]
D --> E["Index building and storage"]
Factors that influence duration
| Factor | Why It Matters | What You Can Do |
|---|---|---|
| Total data size | More data means a longer full dump | Measure real size including indexes and large objects |
| Number and size of tables | One enormous table can dominate the timeline | Identify the largest tables during assessment |
| Network bandwidth | A thin or shared link slows everything | Use dedicated connectivity for large moves |
| Source load | A busy source reads slowly and may suffer | Schedule heavy phases off-peak where possible |
| Destination size | Small CPU or memory slows loading and change replay | Scale up during migration |
| Change rate | Heavy writes enlarge the backlog | Watch lag and cut over during quieter periods |
| Indexes and constraints | They add work for every loaded row | Follow the documented behavior for your path |
Sizing the destination
A sensible habit is to size the destination for the busiest moment of the migration, not for the average day. During the full dump the destination is loading data quickly. During change capture it must replay changes at least as fast as they arrive. If either role is starved of resources, lag grows. After cutover, you can compare real production metrics and shrink the instance if it is oversized.
Storage planning
Storage needs include the migrated data, indexes, temporary files and logs. A common beginner surprise is that the destination uses more space than the source reports, especially when the engines store data differently or when many indexes are created. Leave generous headroom, and enable automatic storage growth where it is available so a long migration does not stop on a full disk.
Time the rehearsal full dump, then scale your estimate using the ratio of production size to rehearsal size. Add a safety margin, because production networks are rarely quieter than test networks.
Any speed quoted by a vendor or a blog is measured on someone else’s hardware. Your own rehearsal is the only number that truly applies to you.
24Inside the MySQL Path
The MySQL to Cloud SQL for MySQL route is the classic homogeneous migration, and its ideas repeat in other paths.
MySQL records every change to data in a special file called the binary log. Think of it as a diary that lists every insert, update and delete in the order it happened. For continuous migration, DMS relies on this diary. After the full dump, it reads the diary from the starting position and replays each entry on the destination.
If the full dump is a photograph of a busy street, the binary log is a video recording that started at the exact instant the photograph was taken. Playing the video forward brings the photograph up to date.
What the source needs
Binary Logging Enabled
The source must write a binary log in the format DMS expects, usually row-based, so each changed row is captured exactly.
Log Retention
Logs must be kept long enough for the full dump to finish, otherwise the starting position disappears before DMS needs it.
Migration User
A dedicated account with the privileges needed to read data and replicate changes, and nothing more.
Network Access
The destination must be able to reach the source through one of the supported connectivity methods.
Managed sources need parameter changes
If the source is Amazon RDS or Aurora, you cannot edit server files directly. Instead you change settings through the provider’s parameter configuration and sometimes reboot the instance. Plan this carefully, because a reboot on a busy production database is itself an outage.
Version and feature considerations
For MySQL, the destination should be the same major version as the source or one version higher. Moving to a much newer version in one jump, or to an earlier version, is not recommended. The newest destination versions can come with extra limitations, for instance around certain backup-file based loading methods, so read the notes for your chosen version.
Character sets, collations and time zone settings deserve a quick check. If the old server used unusual settings, text comparison or sorting could differ on the destination. Compare settings early and test a sample of text-heavy queries.
Initial load choices
DMS supports different ways of performing the initial load for MySQL, including a logical approach that reads data through database connections and, in some scenarios, an approach that works from physical backup files. Each has its own prerequisites and limitations, and the choice influences speed and compatibility. For very large databases, physical approaches can be faster, but they require more preparation.
Database accounts, grants and some server-level settings are not always carried across automatically. Make a list of application users and verify their access on the destination before cutover.
25Inside the PostgreSQL Path
PostgreSQL uses a different change-tracking idea, and its details explain several of the limitations you saw earlier.
PostgreSQL writes every change first to a write-ahead log, a durable journal that exists mainly for crash recovery. Logical replication takes information from that journal and presents it as row-level changes that another system can consume. DMS uses this approach to follow a PostgreSQL source during continuous migration.
The write-ahead log is like a shop’s receipt roll. Logical replication reads the roll and tells the second shop exactly which items were sold, in order, so the second shop can update its own shelves.
Why primary keys matter so much
To change a row on the destination, the system must say which row. A primary key is the unique name tag of a row. When a table has no primary key, the system cannot reliably point to a single row for an update or delete. That is why the documentation notes that tables without primary keys support the initial snapshot and inserts, while updates and deletes need manual handling.
Whole-server migration
The PostgreSQL path moves the entire server, meaning every database within it. This is a different mindset from picking individual tables. Before you start, review all databases on the source and decide whether any should be cleaned up, archived or excluded through other means.
Things that are not carried automatically
Structural Changes
Logical replication generally replays data changes, not schema changes. Avoid creating, altering or dropping objects on the source during migration.
Sequences
Counters that generate identifiers must be checked after migration so new records do not collide with existing ones.
Materialized View Contents
Only the definition moves, so refresh the view on the destination.
Extensions
Make sure every extension your application needs is available on the destination service and version.
Roles and Permissions
Review database roles and grants, because managed services restrict some powerful privileges.
Large Objects
Applications that store files inside the database through large-object features need extra testing.
Choosing between Cloud SQL and AlloyDB
Both are PostgreSQL-compatible and both are supported destinations. Cloud SQL is the familiar, general-purpose managed service. AlloyDB is aimed at demanding workloads that need higher performance and scale. Because DMS supports both, you can choose based on workload needs and budget rather than on tool limitations. Networking differs slightly, since AlloyDB uses private services access, so review the connectivity rules for your choice.
A quick audit listing every table without a primary key is one of the most valuable preparation tasks for PostgreSQL migrations. Fixing those tables early removes a whole class of cutover surprises.
26Inside the Oracle to PostgreSQL Path
This is the most demanding scenario because two things change at once: the engine and the dialect of your code.
An Oracle environment often contains decades of accumulated logic. Tables are only the beginning. Business rules live in packages, triggers and procedures written in Oracle’s own procedural language. Moving to PostgreSQL means translating that logic, not just the data. This is why the conversion workspace is central, and why timelines for this path are longer.
How change tracking works here
Oracle tracks changes using a system change number, a counter that increases with every committed transaction. DMS uses information from Oracle’s log files to follow changes after the initial load. For this to work, the source must be configured to keep the needed logging information. If you perform the full load yourself outside DMS, you can supply a starting change number so replication begins at the correct point.
Typical translation challenges
Data Types
Oracle’s flexible numeric type, its date type that also stores time, and its character types do not map one-to-one onto PostgreSQL types. Choosing the right target type affects precision, storage and performance.
Empty Strings and Nulls
Oracle treats an empty text value as null, while PostgreSQL treats them as different things. Application logic that depends on this can behave differently after migration.
Procedural Code
Packages, collections and exception handling constructs do not have direct equivalents. They are rewritten into PostgreSQL functions and procedures, sometimes with a different structure.
Hierarchical Queries and Proprietary Syntax
Oracle-specific query features, join styles and built-in functions must be rewritten in standard-compatible or PostgreSQL-specific forms.
Sequences, Synonyms and Schemas
Oracle’s organization of users and schemas differs from PostgreSQL’s, so naming and permissions must be redesigned carefully.
Using Gemini assistance wisely
DMS conversion workspaces include Gemini-assisted workflows that can explain what a piece of code does and suggest fixes for conversion problems. This can save time on unfamiliar legacy code. However, treat suggestions as drafts from a helpful colleague, not as verified answers. Every converted object still needs review and testing by someone who understands the business rule behind it.
flowchart TD
A["Oracle source objects"] --> B["Conversion workspace"]
B --> C["Automatic conversion"]
C --> D{"Issues found"}
D -->|"Yes"| E["Review and fix, optionally with Gemini help"]
E --> B
D -->|"No"| F["Apply schema to destination"]
F --> G["Migration job loads data and follows changes"]
Teams often underestimate procedural code. Count the lines and objects in packages and procedures during assessment, because that volume predicts the real effort better than database size does.
27Testing and Validation Strategy
Testing is how you turn hope into confidence.
A successful migration job proves only that data moved. It does not prove that the data is right, that your application works, or that performance is acceptable. A complete strategy tests several different things, and each answers a different question.
Structure Check
Are all expected tables, indexes, constraints, views and routines present on the destination?
Data Reconciliation
Do row counts, sums and sampled records match between source and destination?
Functional Testing
Do the application’s main user journeys work against the new database?
Performance Testing
Do the busiest and slowest queries run as fast as before, or faster, under realistic load?
Operational Testing
Do backups, restores, failover and monitoring alerts work as designed?
Security Testing
Are accounts, permissions, encryption and network rules correct?
Reconciliation in practice
Start with simple counts per table. Then compare aggregated business values such as total order amount per day or customer count per region. For critical tables, compare checksums or sample specific records in full. Remember that a continuous migration is a moving target, so run comparisons when lag is minimal, or compare data older than a safe cutoff time.
Parallel run for critical systems
For high-stakes systems, some teams run a parallel period. The application continues to use the source, while a copy of its traffic or its reports are run against the destination and the results are compared. Differences point to conversion bugs or compatibility problems without any customer impact.
flowchart LR
A["Rehearsal migration"] --> B["Structure and data checks"]
B --> C["Functional and performance tests"]
C --> D{"All criteria met"}
D -->|"No"| E["Fix and repeat"]
E --> A
D -->|"Yes"| F["Approve production cutover"]
Save the results of every validation step. Auditors, managers and your future self will want proof that the migration was checked, and good evidence also speeds up any investigation if a problem appears later.
28Troubleshooting Common Problems
Problems are normal, and most of them fall into a few families.
When a job misbehaves, resist the urge to change many things at once. Work from the outside in: first the network, then permissions, then source configuration, then destination health, and finally data-specific issues. Each check is cheap and rules out a whole category.
The Connection Test Fails
Usually a network or credential issue. Check firewall rules, allowlisted addresses, tunnel health, the port and the username. Confirm that the correct connectivity method was chosen for where the source actually lives.
The Job Fails Right After Starting
Often caused by missing source configuration, such as change logging not enabled, or by insufficient privileges for the migration user. Read the error message carefully and compare it with the prerequisites for your path.
Replication Lag Keeps Growing
Look at destination CPU, memory and disk, check whether the source write volume spiked, and check network throughput. Scaling up the destination often solves it quickly.
The Destination Runs Out of Storage
Migrated data plus indexes can exceed estimates. Increase storage, enable automatic growth and review whether temporary files or logs are consuming space.
The Job Stops After a Source Restart or Failover
Source maintenance can interrupt replication or remove needed logs. Check whether log retention was long enough, and whether the job can resume or must be restarted.
Rows or Objects Are Missing
Compare against the known limitations for your path. Items such as tables without primary keys or particular object types may need manual handling.
Text Looks Wrong After Migration
Suspect character set or collation differences. Compare settings between source and destination and test with accented or non-Latin text.
Escalating effectively
If you contact support, gather the migration job name, region, project, timestamps, the exact error text and a description of what changed recently. Good evidence shortens the conversation dramatically.
Whenever you adjust a setting, note it and observe the effect. Changing five settings together leaves you unsure which one helped or hurt.
29After the Cutover: Operations and Optimization
Promotion is not the end; the first weeks on the new database decide whether the project feels like a success.
Once the application runs on the destination, a new phase begins. You are no longer a migration team; you are the operators of a new production system. This phase includes tuning, protection and cleaning up everything that was only needed temporarily.
Watch Closely for Two Weeks
Track errors, slow queries, connection counts, CPU, memory and storage. Compare against your pre-migration baseline.
Refresh Statistics and Tune
New databases need fresh optimizer statistics. Review slow queries, add or adjust indexes and fix any converted code that performs poorly.
Turn On Protection
Configure automated backups, point-in-time recovery, high availability and maintenance windows to match your reliability goals.
Right-Size the Instance
If you scaled up for the migration, reduce compute and memory to match real demand, keeping a comfortable margin.
Clean Up Temporary Resources
Delete migration jobs and profiles you no longer need, shut down tunnel VMs, close temporary firewall rules and remove the migration user from the source.
Retire the Source Safely
After the agreed safety period, take a final backup, archive it per policy and decommission the old database.
Capture lessons learned
Hold a short review soon after the project. Record what went well, what surprised you, how long each phase really took and which checks caught real problems. Store the runbook and these notes where the next team can find them. If you have more waves of databases to migrate, this knowledge makes them cheaper and safer.
Take advantage of the new platform
Moving the database is a doorway, not the destination. Once stable, explore capabilities that were hard on the old platform: easier read replicas, integrated monitoring, stronger identity controls, automated backups across regions and tighter links to analytics services. Introduce these gradually, one change at a time, just as you did with the migration itself.
Deleting the old database the same day as cutover removes your safety net. Keep it, protected and read-only, until the business agrees the new system is stable.
30Scaling Up: Migrating Many Databases with a Repeatable Process
Moving one database is a project, but moving fifty is a factory, and factories need standard procedures.
Large organizations rarely have a single database. They have dozens or hundreds, owned by different teams, running different engines and serving applications of very different importance. If every migration is handled as a one-off craft project, the program becomes slow, expensive and inconsistent. The better approach is to build a repeatable process once and then run many databases through it.
A single home move can be organized in an afternoon with a few friends. A company relocating an entire town needs standard boxes, labeled trucks, a schedule board and a team that has done it before. The tools are the same, but the discipline is different.
Build a standard runbook
A runbook is a written, step-by-step procedure that anyone on the team can follow. It lists the preparation checks, the settings to choose, the validation steps, the cutover sequence and the rollback conditions. After each wave, improve the runbook with what you learned. Over time it becomes a trusted document rather than a pile of personal memories.
Use consistent naming and labels
When many connection profiles and migration jobs exist in the same project, names matter. Agree on a naming pattern that shows the application, the environment and the wave, so that anyone can see at a glance what a job belongs to. Labels and tags also help with cost tracking and with finding leftovers during cleanup.
Central Tracking Board
Keep one shared view showing each database, its wave, its owner, its status and its planned cutover date.
Templates and Checklists
Reuse the same preparation checklist, test plan and cutover sheet for each database, adjusting only what differs.
Separation of Duties
Let one group prepare and run migrations while another approves promotion, so no single person can make an irreversible change alone.
Risk Register
Record known risks such as unsupported features, tight windows or fragile networks, along with an owner and a plan for each.
Automation Through APIs
DMS offers an application programming interface and command-line tools, so repeated steps such as creating profiles or checking status can be scripted by your platform team.
Wave Retrospectives
After every wave, hold a short review and feed the findings back into the runbook and the schedule.
flowchart LR
A["Inventory and classify"] --> B["Plan waves"]
B --> C["Run standard process"]
C --> D["Retrospective"]
D --> E["Improve runbook"]
E --> C
Governance and compliance
At scale, rules matter. Decide which regions are allowed, which connectivity methods are approved, how encryption keys are managed and how long temporary access can remain open. Organization policies and Identity and Access Management groups help enforce these decisions automatically instead of relying on memory. Keep an audit trail of who started, changed and promoted each job, because regulated industries often must show it.
Watch the money across the program
Costs add up when many databases run through heterogeneous paths or when many destination instances are scaled up at once. Track spending by project or label, set budget alerts and make sure finished migration resources are removed promptly. Reviewing costs after each wave prevents unpleasant surprises at the end of the program.
Problem
Each team invents its own migration approach, naming style and checklist, with no shared documentation.
Why It’s Harmful
Knowledge stays locked in a few heads, mistakes repeat from team to team, and leaders cannot see program status or risk.
Correct Approach
Create a shared runbook, naming standard and tracking board owned by a small platform or migration team, and improve it after every wave.
Your first wave is the best time to create templates, because the lessons are fresh and the stakes are low. Every later wave then benefits from the work.
31Frequently Asked Questions
Not during the copy. With a continuous migration your application keeps running on the source. You only need a short pause for the final cutover, when you stop writes, drain the last changes and promote.
For native homogeneous migrations into Cloud SQL or AlloyDB for PostgreSQL there is no additional DMS charge, although you pay for the destination. Heterogeneous migrations are billed by data volume. Always check the official pricing page for current figures.
No. DMS moves data into Google Cloud destinations. It is not intended for moving data out or between other platforms.
A connection profile describes how to reach one database. A migration job connects a source profile to a destination, chooses the migration type and runs the process.
No. Conversion workspaces are for cross-engine migrations such as Oracle to PostgreSQL. Same-engine migrations carry the structure over directly.
Promotion stops replication and turns the destination into an independent, writable database. After that, the source no longer feeds it.
Check whether the destination is under-sized, whether the source is receiving unusual write volume, and whether network bandwidth is a bottleneck. Scaling the destination up is often the quickest fix.
It is not always required, but it is strongly advised for production and sensitive data. Public IP allowlists are mainly suited to quick proofs of concept.
It depends on the migration path. Some paths let you select what to include, while the PostgreSQL path migrates the whole server. Check the scenario documentation for your path.
Not automatically. After promotion the source stops receiving changes, so plan your rollback approach before cutover and decide how long to keep the source available.
Compare row counts, checksums and business totals, and review the completeness guidance for your path, including any items that need manual migration.
Reading the full dump and following the change log adds load to the source. For most systems the effect is modest, but a very busy or fragile server can feel it. Test during rehearsal, watch source CPU, memory and input and output activity, and schedule the heaviest phase for quieter hours when you can.
There is no fixed rule. Some teams cut over within a day, while others keep replication running for weeks so testers can validate against fresh data. Remember that a running job consumes resources and, for heterogeneous paths, accumulates usage charges, so keep the period purposeful.
Yes, before promotion you can usually discard the destination data and start over, which is exactly why rehearsals are cheap. After promotion the destination holds live business data, so a restart would need careful planning to avoid losing new records.
For homogeneous migrations you usually only change the connection address and credentials, although you should still test drivers and settings. For heterogeneous migrations expect code changes, especially where queries use features specific to the old engine.
Begin with a small test database using a homogeneous path, such as MySQL or PostgreSQL to Cloud SQL, with a simple connectivity method. Run a continuous job, watch lag, promote the destination and then clean everything up. That single exercise teaches nearly every concept in this guide.
It is designed for production-scale migrations, but very large databases need careful planning of network bandwidth, destination size and the initial load method. Rehearse with realistic data volumes and use private, high-bandwidth connectivity for the best results.
Promotion is an important, hard-to-reverse step, so restrict it to a small group of trusted operators through Identity and Access Management, and require the written go or no-go criteria to be met before anyone presses the button.
Trust the official documentation. Supported versions, limitations, pricing and console behavior change over time, and an article can only be correct as of the day it was written. Use guides like this one to understand concepts, and use the official pages to confirm details.
Google runs and manages the migration machinery for you, in the region you choose. You do not see or maintain those servers. What you manage are the source, the destination, the network path and the configuration that connects them.
32Summary and Key Takeaways
Google Cloud Database Migration Service turns a risky, manual project into a guided, managed process. It copies your existing data, follows every new change, and lets you switch over in a brief, well-planned moment. The technology is only half of the story; the other half is preparation, testing and communication. If you pick the right migration type, build a safe network path, validate your data and rehearse your cutover, you can move even large, busy databases with confidence.
Key Takeaways
- DMS is a managed bridge into Google Cloud — it moves databases into Cloud SQL and AlloyDB without you running migration servers.
- Know your migration type — homogeneous moves keep the engine and are simpler, while heterogeneous moves need conversion workspaces and far more testing.
- Continuous beats one-time for busy systems — full dump plus change data capture keeps downtime to a short cutover window.
- Connectivity is a design decision — choose private paths for production, and treat IP allowlists as a short-term convenience.
- Watch lag and validate data — monitoring shows health, while counts, checksums and business checks prove correctness.
- Read limitations early — tables without primary keys, materialized views and unsupported editions are classic surprises.
- Rehearse the cutover and plan the rollback — a migration is finished only when the application runs happily on the new database.