Zero-Downtime Database Migration: A Survival Guide for Norwegian Systems
It is 03:00 CET. You are staring at a terminal window, watching a progress bar crawl at a pathetic 2MB/s. Your e-commerce client in Oslo is technically "offline" for maintenance, but every minute that passes costs them kroner and costs you your sanity. If you have ever tried to migrate a 50GB+ MySQL dataset using a simple mysqldump over a public network, you know this pain. It is the specific agony of waiting for I/O operations on standard spinning rust.
In 2014, downtime is the enemy. Whether you are running a high-traffic news portal or a Magento shop, "maintenance windows" are shrinking. The expectation is 24/7 availability. Today, we are going to dissect how to move a heavy production database from a legacy provider to a high-performance environment like CoolVDS without taking your site offline for hours. We are talking about Master-Slave replication, innobackupex, and raw I/O power.
The "Dump and Pray" Method (And Why to Avoid It)
The junior admin's approach is predictable: shut down the web server, dump the database, SCP it over, and import it. On a small Wordpress blog, fine. On a 100GB database? Suicide.
Let's look at the math. A standard 7.2k RPM SATA drive pushes maybe 80-100 IOPS (Input/Output Operations Per Second). When you run an import, you are hammering that disk with random writes. If you are migrating to a VPS that shares IOPS with "noisy neighbors," your import could take 6 hours. During that time, your application is dead.
Pro Tip: Never usegzipfor compression during transfer if your CPU is the bottleneck. Uselzoporpigzfor multi-threaded compression to saturate the pipe, not the processor.
The Professional Strategy: Replication & Hot Switchover
The only robust way to migrate a live database is to make the new server a slave of the old one, let them sync, and then promote the slave. Here is the battle-tested workflow we use for clients moving to CoolVDS infrastructure.
Step 1: The Non-Blocking Snapshot
Forget mysqldump which locks tables. We use Percona XtraBackup. It grabs a consistent snapshot of your InnoDB tables without locking the database. Your site stays online.
# On the OLD server (Master)
$ innobackupex --user=root --password=SECRET --stream=tar ./ | ssh user@new-coolvds-ip "tar -xfi - -C /var/lib/mysql/data"
This streams the backup directly to the new server over SSH. No intermediate file needed.
Step 2: Prepare the Data
Once the data lands on your CoolVDS instance, you need to apply the transaction logs. This is where storage speed matters. On a standard VPS, this step drags. On our SSD-backed instances, the redo logs apply almost instantly.
# On the NEW server (Slave)
$ innobackupex --apply-log /var/lib/mysql/data
Step 3: Configure Replication
Check the xtrabackup_binlog_info file on the new server to find your coordinates.
$ cat /var/lib/mysql/data/xtrabackup_binlog_info
mysql-bin.000003 435602
Now, configure the new server to catch up with the old one.
CHANGE MASTER TO
MASTER_HOST='192.168.1.10',
MASTER_USER='repl_user',
MASTER_PASSWORD='secure_password',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=435602;
START SLAVE;
Wait for Seconds_Behind_Master to hit 0. At this point, your new database is a perfect, real-time mirror of the old one.
The Hardware Reality: Why SSDs Are Non-Negotiable
We saw a benchmark recently comparing a restore operation on a legacy SAS array versus a local SSD array. The difference isn't just percentage points; it's orders of magnitude.
| Operation | Standard HDD VPS | CoolVDS SSD VPS |
|---|---|---|
| Sequential Write (Backup) | 85 MB/s | 450 MB/s+ |
| Random Write (Restore/Import) | 120 IOPS | 20,000 IOPS+ |
| Replication Lag | High | Near Zero |
When you are catching up replication lag, your disk I/O is usually the bottleneck. If the master server is busy, a slow slave will never catch up. This is why we enforce pure SSD storage on all CoolVDS production tiers. We don't oversell storage because we know that when you need IOPS, you need them now.
The Norwegian Context: Latency and Legality
Beyond raw speed, there is the issue of where your bits physically live. Since the Snowden leaks last year, every CTO in Europe is re-evaluating their reliance on US-based hosting. The Patriot Act is a real concern for data privacy.
Hosting in Norway isn't just about national pride; it's about Datatilsynet (The Data Inspectorate) and the Personal Data Act (Personopplysningsloven). By keeping your data on servers physically located in Oslo, you are operating under Norwegian jurisdiction. Furthermore, if your customer base is in Scandinavia, peering at NIX (Norwegian Internet Exchange) ensures your latency is measured in single-digit milliseconds.
Optimizing for the Norwegian Network
If you are pushing traffic within Norway, ensure your sysctl.conf is tuned for low-latency, high-throughput connections, especially if you are handling large backups over the WAN.
# /etc/sysctl.conf optimizations for high-throughput
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_window_scaling = 1
The Final Switchover
Once your CoolVDS slave is synced:
- Put your web application in "Read Only" mode (or show a maintenance page).
- Verify the slave has processed all events (
SHOW SLAVE STATUS). - Promote the slave to Master (
STOP SLAVE; RESET MASTER;). - Point your app config to the new CoolVDS IP.
Total downtime? About 30 seconds. No melted servers. No angry clients.
Database migration doesn't have to be a gamble. With the right tools like XtraBackup and the right infrastructure, it is a predictable engineering process. Don't let slow I/O kill your migration window. Spin up a test instance on CoolVDS today and feel the difference of pure SSD architecture.