{"id":4341,"date":"2026-07-16T17:20:43","date_gmt":"2026-07-16T17:20:43","guid":{"rendered":"https:\/\/ownwebservers.com\/kb\/?p=4341"},"modified":"2026-07-17T20:40:15","modified_gmt":"2026-07-17T20:40:15","slug":"zero-downtime-website-migration-rsync-dns-ttl","status":"publish","type":"post","link":"https:\/\/ownwebservers.com\/kb\/zero-downtime-website-migration-rsync-dns-ttl\/","title":{"rendered":"Zero-Downtime Website Migration: A Complete rsync and DNS TTL Playbook"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">There&#8217;s an old-school way to migrate a live site: pick a dead-quiet Tuesday at 3 a.m., slap up a maintenance page, and hope DNS propagates before anyone important notices. That still works fine for a hobby blog. For anything with paying customers or active sessions, it&#8217;s a needless gamble. Done properly, a <a href=\"https:\/\/ownwebservers.com\/kb\/ipv6-only-hosting-nat64-dns64-guide\/\">zero downtime migration<\/a> lets you move a production site \u2014 files, database, mail routing, cron jobs, all of it \u2014 without a single visitor noticing anything happened.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Copying files isn&#8217;t the hard part. Rsync does that job reliably and has for two decades. What actually trips people up is coordinating three clocks that don&#8217;t run in sync: when your data is genuinely caught up between servers, when DNS resolvers around the world actually pick up the new IP, and when it&#8217;s safe to finally walk away from the old box. Get that sequencing wrong and you&#8217;ll serve stale pages, drop form submissions into a void, or \u2014 worse \u2014 end up with two databases quietly diverging while traffic splits between them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide walks through an rsync-based server migration paired with proper DNS TTL prep ahead of time. That combination is what actually makes a live website migration possible without ever hanging a &#8220;back in 20 minutes&#8221; sign on the door.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pre-Migration Planning and Assessment<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Auditing the Current Server Environment<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Before you touch anything, inventory the source server top to bottom. PHP\/Python\/Node versions, installed extensions, every user&#8217;s cron jobs (not just root&#8217;s \u2014 run <code>crontab -l<\/code> per user), mail configuration, SSL certificate details, and any firewall rules that aren&#8217;t already staring at you from the vhost config. I&#8217;ve been burned by a &#8220;simple&#8221; WordPress migration once where a cron job was quietly syncing inventory from a third-party API \u2014 nobody remembered it existed until orders stopped updating three days later and someone asked why stock counts were frozen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Check connection counts and write patterns on the database too. A high-write OLTP workload needs a very different cutover approach than a mostly-static brochure site.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Choosing the Destination Server and Matching Software Versions<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Match major software versions on the new server before you move a single byte \u2014 same PHP minor version, same MySQL\/MariaDB flavor, same web server, and if it&#8217;s Apache, the same module set. Version drift is probably the single most common reason migrations &#8220;work in staging&#8221; and then quietly break after cutover. If an upgrade is part of the plan, do it as its own project afterward and test it properly \u2014 don&#8217;t bundle a version jump with a server move. Change one variable at a time, always.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Creating a Migration Timeline and Rollback Plan<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Write actual timestamps down, not just a vague list of steps. Something like: TTL dropped at T-48h, first full rsync at T-24h, incremental syncs every few hours after that, final sync plus DB dump at T-0, DNS cutover at T-0, source server frozen read-only until T+72h. And decide your rollback trigger in advance \u2014 &#8220;if error rate exceeds X% in the first hour, revert DNS&#8221; \u2014 before you&#8217;re mid-cutover and tempted to just wing it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lowering DNS TTL in Advance<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Understanding TTL and Resolver Caching Behavior<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Resolvers cache your A\/AAAA records for as long as your TTL tells them to, and they couldn&#8217;t care less about your migration schedule. Plenty of ISP resolvers are also flat-out non-compliant and hold onto records longer than instructed \u2014 which is exactly why the overlap window after cutover isn&#8217;t optional, it&#8217;s insurance.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Setting TTL to 300 Seconds 24-48 Hours Ahead<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Drop your TTL down to 300 seconds (5 minutes) at least 24-48 hours before cutover. That gives the old, longer TTL time to fully age out of caches everywhere before you actually need fast propagation to matter. Don&#8217;t lower the TTL and migrate the same day \u2014 you&#8217;ll still be fighting cached records left over from the previous, higher TTL. Verify the change has actually propagated with <code>dig +trace yourdomain.com<\/code> run from a couple of different networks, not just the office Wi-Fi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Building and Syncing the Destination Server<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Get everything that isn&#8217;t tied to an IP address configured well ahead of time \u2014 firewall rules, vhost configs, PHP-FPM pools, SSL certs. If you&#8217;re on Let&#8217;s Encrypt, you can often knock out DNS-01 or even HTTP-01 validation against a staging subdomain before cutover day, or just carry over the existing cert and key if it came from a commercial CA. The goal is that by cutover, the only things left to flip are IP-bound: DNS records, and maybe a few outbound whitelist entries on third-party services.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kick off your initial full sync well in advance:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>rsync -avz --delete \/var\/www\/site\/ user@newserver:\/var\/www\/site\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>-a<\/code> preserves permissions, ownership, and timestamps; <code>-z<\/code> compresses data in transit; <code>--delete<\/code> keeps the destination clean instead of accumulating orphaned files as the source keeps changing underneath you. Run this early, then follow up with incremental syncs every few hours as cutover approaches \u2014 each pass only has to move a shrinking delta, which is what keeps your final pre-cutover sync short and boring.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Staging Validation Before DNS Ever Changes<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Add a temporary hosts file entry on your workstation, or point a staging subdomain at the new server&#8217;s IP, and actually put the site through its paces there \u2014 database connectivity, file upload permissions, cron execution, outbound mail, session handling. This is where you find the missing PHP extension or the config file with a hardcoded IP address baked into it, while it&#8217;s still nobody&#8217;s emergency.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Cutover Sequence<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When the moment arrives, order matters \u2014 don&#8217;t improvise this part:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Flip the application into brief read-only or maintenance mode on the source \u2014 seconds, not hours, just long enough to cover the write-sensitive final steps.<\/li>\n\n\n\n<li>Take a final database export with <code>mysqldump --single-transaction --routines --triggers dbname > final.sql<\/code>, which gets you a consistent snapshot without locking tables on an InnoDB database.<\/li>\n\n\n\n<li>Import that dump on the destination, then run one last rsync pass with checksum verification:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>rsync -avz --checksum --delete \/var\/www\/site\/ user@newserver:\/var\/www\/site\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>--checksum<\/code> matters here because timestamp comparisons alone can lie after multiple incremental syncs across different filesystems \u2014 this gives you byte-for-byte certainty instead of a guess.<\/p>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Update DNS to point at the new server&#8217;s IP.<\/li>\n\n\n\n<li>Take the source out of maintenance mode, but leave it running, fully intact, untouched.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Post-Cutover: Monitoring and the Safety Window<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Leave the source server running, unchanged, for 48-72 hours minimum. This isn&#8217;t foot-dragging \u2014 it&#8217;s your rollback insurance and your buffer against resolvers that ignore TTLs entirely. Tail the access logs on both servers side by side:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tail -f \/var\/log\/nginx\/access.log<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Watch request volume on the old server taper off toward zero. Some poorly-behaved ISP resolvers will keep dribbling a bit of traffic its way for days. Don&#8217;t decommission it until that trickle has genuinely stopped \u2014 not just slowed down.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Best Practices<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Never lower TTL and migrate the same day \u2014 let the old TTL expire naturally first.<\/li>\n\n\n\n<li>Script your incremental rsync passes with logging, so you&#8217;ve got a clear audit trail of what changed and when.<\/li>\n\n\n\n<li>Pin software versions between source and destination before migrating; save upgrades for afterward, as a separate step.<\/li>\n\n\n\n<li>Test the staging subdomain with actual user workflows \u2014 checkout, login, file uploads \u2014 not just a homepage load.<\/li>\n\n\n\n<li>Freeze the source server&#8217;s filesystem and database read-only instead of shutting it down, so rollback is instant if you need it.<\/li>\n\n\n\n<li>Log every command you run during cutover in real time; it makes post-incident review far less painful.<\/li>\n\n\n\n<li>Confirm outbound mail (SPF\/DKIM) and any IP-based API whitelists are updated for the new server before you decommission the old one.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Troubleshooting<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Symptom<\/th><th>Likely Cause<\/th><th>Fix<\/th><\/tr><tr><td>Some visitors see the old site for days<\/td><td>TTL wasn&#8217;t lowered far enough in advance, or an ISP resolver is ignoring TTL<\/td><td>Confirm TTL propagation before migrating next time; keep monitoring old server logs and let the overlap window run its course<\/td><\/tr><tr><td>Site loads but database errors appear<\/td><td>Final mysqldump\/import happened before the last write batch, or credentials weren&#8217;t updated<\/td><td>Re-run the single-transaction dump\/import and confirm config files point to the local DB host<\/td><\/tr><tr><td>Uploaded files missing after cutover<\/td><td>Final rsync pass ran before the last user upload, or a directory got excluded<\/td><td>Re-run rsync with &#8211;checksum against the source before fully retiring it<\/td><\/tr><tr><td>SSL warnings on new server<\/td><td>Certificate wasn&#8217;t transferred, or Let&#8217;s Encrypt renewal is still tied to old IP validation<\/td><td>Reissue or re-validate the cert against the new server ahead of cutover, not during it<\/td><\/tr><tr><td>Cron-driven tasks not running post-migration<\/td><td>Crontabs weren&#8217;t audited or copied for every user<\/td><td>Diff crontab -l output between servers for every user account<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Zero downtime migration isn&#8217;t one clever trick \u2014 it&#8217;s disciplined sequencing: DNS TTL prep done early, incremental rsync passes chipping away at the delta, and a conservative overlap period where the old server stays alive purely as insurance. Handle the boring parts well ahead of time \u2014 lower the TTL days out, match software versions, validate on staging before DNS ever moves. Then handle the risky parts fast and precisely \u2014 the checksum-verified final sync, the single-transaction dump, the cutover itself. Do it this way and a live website migration turns into routine maintenance instead of a white-knuckle gamble, and your rollback plan stays exactly what it&#8217;s supposed to be \u2014 insurance you hope you never actually need to cash in.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Frequently Asked Questions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Why is lowering the DNS TTL important before migration?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Resolvers around the world cache your A\/AAAA records for however long your TTL says to. Dropping the TTL to 300 seconds well ahead of cutover means that once you switch IPs, most resolvers pick up the change within minutes instead of serving the old server&#8217;s address for hours or days. That shrinks the window where some fraction of visitors gets sent to the wrong place.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How does rsync help achieve zero downtime during migration?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Rsync lets you do a full initial copy while the source site is still live and serving traffic normally, then run incremental syncs afterward that only move what&#8217;s changed. That shrinks the final sync window down to seconds or minutes instead of needing to copy the entire site during the actual cutover. Flags like -avz &#8211;delete keep things clean along the way, and a final &#8211;checksum pass confirms the destination is a byte-for-byte match before you redirect any traffic.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How do I handle the database without losing data during cutover?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Best option, if it fits your setup, is continuous replication so the destination database is never more than a few seconds behind. Otherwise, a final mysqldump with &#8211;single-transaction run immediately before cutover gets you a consistent snapshot without locking tables on a live site. For high-write applications, setting up master-slave replication ahead of time removes the need for a last-minute dump altogether.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Should I keep the old server running after migration?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes \u2014 keep the source server running unchanged, ideally read-only, for 48 to 72 hours after cutover. It&#8217;s your instant rollback option, and it covers you for visitors whose ISP resolvers didn&#8217;t respect the lowered TTL like they were supposed to. Only decommission it once the access logs confirm traffic has genuinely and fully shifted to the new server.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How can I test the new server before actually switching DNS?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Add a temporary hosts file entry on your own machine, or stand up a staging subdomain pointed straight at the new server&#8217;s IP. That lets you check database connectivity, file permissions, cron jobs, and SSL setup in a production-like environment without any real visitors involved. Thorough testing here is what catches a configuration mismatch before it becomes a customer-facing problem instead of after.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What should be configured on the destination server in advance?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Firewall rules, <strong><a href=\"https:\/\/ownwebservers.com\/ssl-certificates\" data-type=\"link\" data-id=\"https:\/\/ownwebservers.com\/ssl-certificates\" target=\"_blank\" rel=\"noreferrer noopener\">SSL certificates<\/a><\/strong> (via Let&#8217;s Encrypt or a transferred cert), and web server vhost configs should all be sorted and verified before migration day arrives. Get that out of the way early and cutover day is left with just IP-dependent items and the final data sync \u2014 which keeps the whole window short and the risk of last-minute surprises low.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Learn more article: <em><a href=\"https:\/\/ownwebservers.com\/kb\/what-steps-can-i-take-to-make-the-most-of-ownwebservers-cloud-web-hosting\/\" data-type=\"link\" data-id=\"https:\/\/ownwebservers.com\/kb\/what-steps-can-i-take-to-make-the-most-of-ownwebservers-cloud-web-hosting\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>What steps can I take to make the most of Ownwebservers cloud web hosting?<\/strong><\/a><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Learn how to migrate a live website to a new server with zero downtime using rsync, DNS TTL prep, and database sync best practices.<\/p>\n","protected":false},"author":1,"featured_media":4343,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[72],"class_list":["post-4341","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web-tutorials","tag-web-hosting"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Zero-Downtime Server Migration with rsync &amp; DNS TTL<\/title>\n<meta name=\"description\" content=\"Learn how to migrate a live website to a new server with zero downtime using rsync, DNS TTL prep, and database sync best practices.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ownwebservers.com\/kb\/zero-downtime-website-migration-rsync-dns-ttl\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Zero-Downtime Server Migration with rsync &amp; DNS TTL\" \/>\n<meta property=\"og:description\" content=\"A practical, step-by-step guide to migrating a live website between servers with zero downtime using rsync, staged testing, and DNS TTL planning.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ownwebservers.com\/kb\/zero-downtime-website-migration-rsync-dns-ttl\/\" \/>\n<meta property=\"og:site_name\" content=\"OWS KB\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/OWN-WEB-SERVERS-107052961577434\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-16T17:20:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-17T20:40:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ownwebservers.com\/kb\/wp-content\/uploads\/2026\/07\/pexels-photo-17489157.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1880\" \/>\n\t<meta property=\"og:image:height\" content=\"1255\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"How to move a live website to a new server with zero downtime: rsync sync strategy, DNS TTL prep, database consistency, and rollback safety.\" \/>\n<meta name=\"twitter:creator\" content=\"@OwnWebservers\" \/>\n<meta name=\"twitter:site\" content=\"@OwnWebservers\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/zero-downtime-website-migration-rsync-dns-ttl\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/zero-downtime-website-migration-rsync-dns-ttl\\\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/#\\\/schema\\\/person\\\/4a40fe3fe17a08ddd1d7c113668e75f2\"},\"headline\":\"Zero-Downtime Website Migration: A Complete rsync and DNS TTL Playbook\",\"datePublished\":\"2026-07-16T17:20:43+00:00\",\"dateModified\":\"2026-07-17T20:40:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/zero-downtime-website-migration-rsync-dns-ttl\\\/\"},\"wordCount\":2018,\"publisher\":{\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/zero-downtime-website-migration-rsync-dns-ttl\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/pexels-photo-17489157.jpeg\",\"keywords\":[\"web hosting\"],\"articleSection\":[\"Web Tutorials\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/zero-downtime-website-migration-rsync-dns-ttl\\\/\",\"url\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/zero-downtime-website-migration-rsync-dns-ttl\\\/\",\"name\":\"Zero-Downtime Server Migration with rsync & DNS TTL\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/zero-downtime-website-migration-rsync-dns-ttl\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/zero-downtime-website-migration-rsync-dns-ttl\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/pexels-photo-17489157.jpeg\",\"datePublished\":\"2026-07-16T17:20:43+00:00\",\"dateModified\":\"2026-07-17T20:40:15+00:00\",\"description\":\"Learn how to migrate a live website to a new server with zero downtime using rsync, DNS TTL prep, and database sync best practices.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/zero-downtime-website-migration-rsync-dns-ttl\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/zero-downtime-website-migration-rsync-dns-ttl\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/zero-downtime-website-migration-rsync-dns-ttl\\\/#primaryimage\",\"url\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/pexels-photo-17489157.jpeg\",\"contentUrl\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/pexels-photo-17489157.jpeg\",\"width\":1880,\"height\":1255,\"caption\":\"Photo by panumas nikhomkhai on Pexels\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/zero-downtime-website-migration-rsync-dns-ttl\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Zero-Downtime Website Migration: A Complete rsync and DNS TTL Playbook\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/#website\",\"url\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/\",\"name\":\"OWS KB\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/#organization\",\"name\":\"Own Web Servers\",\"url\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/OWS-Logo-with-punchline-front-scaled.png\",\"contentUrl\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/OWS-Logo-with-punchline-front-scaled.png\",\"width\":2560,\"height\":994,\"caption\":\"Own Web Servers\"},\"image\":{\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/OWN-WEB-SERVERS-107052961577434\",\"https:\\\/\\\/x.com\\\/OwnWebservers\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/ownwebservers.com\\\/kb\\\/#\\\/schema\\\/person\\\/4a40fe3fe17a08ddd1d7c113668e75f2\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ba5db5841d48bd7517bb2583e13983e6d2fa56a4099a0b3c61ad2daefc321303?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ba5db5841d48bd7517bb2583e13983e6d2fa56a4099a0b3c61ad2daefc321303?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ba5db5841d48bd7517bb2583e13983e6d2fa56a4099a0b3c61ad2daefc321303?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"sameAs\":[\"https:\\\/\\\/ownwebservers.com\\\/kb\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Zero-Downtime Server Migration with rsync & DNS TTL","description":"Learn how to migrate a live website to a new server with zero downtime using rsync, DNS TTL prep, and database sync best practices.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ownwebservers.com\/kb\/zero-downtime-website-migration-rsync-dns-ttl\/","og_locale":"en_US","og_type":"article","og_title":"Zero-Downtime Server Migration with rsync & DNS TTL","og_description":"A practical, step-by-step guide to migrating a live website between servers with zero downtime using rsync, staged testing, and DNS TTL planning.","og_url":"https:\/\/ownwebservers.com\/kb\/zero-downtime-website-migration-rsync-dns-ttl\/","og_site_name":"OWS KB","article_publisher":"https:\/\/www.facebook.com\/OWN-WEB-SERVERS-107052961577434","article_published_time":"2026-07-16T17:20:43+00:00","article_modified_time":"2026-07-17T20:40:15+00:00","og_image":[{"width":1880,"height":1255,"url":"https:\/\/ownwebservers.com\/kb\/wp-content\/uploads\/2026\/07\/pexels-photo-17489157.jpeg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_description":"How to move a live website to a new server with zero downtime: rsync sync strategy, DNS TTL prep, database consistency, and rollback safety.","twitter_creator":"@OwnWebservers","twitter_site":"@OwnWebservers","twitter_misc":{"Written by":"admin","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ownwebservers.com\/kb\/zero-downtime-website-migration-rsync-dns-ttl\/#article","isPartOf":{"@id":"https:\/\/ownwebservers.com\/kb\/zero-downtime-website-migration-rsync-dns-ttl\/"},"author":{"name":"admin","@id":"https:\/\/ownwebservers.com\/kb\/#\/schema\/person\/4a40fe3fe17a08ddd1d7c113668e75f2"},"headline":"Zero-Downtime Website Migration: A Complete rsync and DNS TTL Playbook","datePublished":"2026-07-16T17:20:43+00:00","dateModified":"2026-07-17T20:40:15+00:00","mainEntityOfPage":{"@id":"https:\/\/ownwebservers.com\/kb\/zero-downtime-website-migration-rsync-dns-ttl\/"},"wordCount":2018,"publisher":{"@id":"https:\/\/ownwebservers.com\/kb\/#organization"},"image":{"@id":"https:\/\/ownwebservers.com\/kb\/zero-downtime-website-migration-rsync-dns-ttl\/#primaryimage"},"thumbnailUrl":"https:\/\/ownwebservers.com\/kb\/wp-content\/uploads\/2026\/07\/pexels-photo-17489157.jpeg","keywords":["web hosting"],"articleSection":["Web Tutorials"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/ownwebservers.com\/kb\/zero-downtime-website-migration-rsync-dns-ttl\/","url":"https:\/\/ownwebservers.com\/kb\/zero-downtime-website-migration-rsync-dns-ttl\/","name":"Zero-Downtime Server Migration with rsync & DNS TTL","isPartOf":{"@id":"https:\/\/ownwebservers.com\/kb\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ownwebservers.com\/kb\/zero-downtime-website-migration-rsync-dns-ttl\/#primaryimage"},"image":{"@id":"https:\/\/ownwebservers.com\/kb\/zero-downtime-website-migration-rsync-dns-ttl\/#primaryimage"},"thumbnailUrl":"https:\/\/ownwebservers.com\/kb\/wp-content\/uploads\/2026\/07\/pexels-photo-17489157.jpeg","datePublished":"2026-07-16T17:20:43+00:00","dateModified":"2026-07-17T20:40:15+00:00","description":"Learn how to migrate a live website to a new server with zero downtime using rsync, DNS TTL prep, and database sync best practices.","breadcrumb":{"@id":"https:\/\/ownwebservers.com\/kb\/zero-downtime-website-migration-rsync-dns-ttl\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ownwebservers.com\/kb\/zero-downtime-website-migration-rsync-dns-ttl\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ownwebservers.com\/kb\/zero-downtime-website-migration-rsync-dns-ttl\/#primaryimage","url":"https:\/\/ownwebservers.com\/kb\/wp-content\/uploads\/2026\/07\/pexels-photo-17489157.jpeg","contentUrl":"https:\/\/ownwebservers.com\/kb\/wp-content\/uploads\/2026\/07\/pexels-photo-17489157.jpeg","width":1880,"height":1255,"caption":"Photo by panumas nikhomkhai on Pexels"},{"@type":"BreadcrumbList","@id":"https:\/\/ownwebservers.com\/kb\/zero-downtime-website-migration-rsync-dns-ttl\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ownwebservers.com\/kb\/"},{"@type":"ListItem","position":2,"name":"Zero-Downtime Website Migration: A Complete rsync and DNS TTL Playbook"}]},{"@type":"WebSite","@id":"https:\/\/ownwebservers.com\/kb\/#website","url":"https:\/\/ownwebservers.com\/kb\/","name":"OWS KB","description":"","publisher":{"@id":"https:\/\/ownwebservers.com\/kb\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ownwebservers.com\/kb\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ownwebservers.com\/kb\/#organization","name":"Own Web Servers","url":"https:\/\/ownwebservers.com\/kb\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ownwebservers.com\/kb\/#\/schema\/logo\/image\/","url":"https:\/\/ownwebservers.com\/kb\/wp-content\/uploads\/2026\/07\/OWS-Logo-with-punchline-front-scaled.png","contentUrl":"https:\/\/ownwebservers.com\/kb\/wp-content\/uploads\/2026\/07\/OWS-Logo-with-punchline-front-scaled.png","width":2560,"height":994,"caption":"Own Web Servers"},"image":{"@id":"https:\/\/ownwebservers.com\/kb\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/OWN-WEB-SERVERS-107052961577434","https:\/\/x.com\/OwnWebservers"]},{"@type":"Person","@id":"https:\/\/ownwebservers.com\/kb\/#\/schema\/person\/4a40fe3fe17a08ddd1d7c113668e75f2","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ba5db5841d48bd7517bb2583e13983e6d2fa56a4099a0b3c61ad2daefc321303?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ba5db5841d48bd7517bb2583e13983e6d2fa56a4099a0b3c61ad2daefc321303?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ba5db5841d48bd7517bb2583e13983e6d2fa56a4099a0b3c61ad2daefc321303?s=96&d=mm&r=g","caption":"admin"},"sameAs":["https:\/\/ownwebservers.com\/kb"]}]}},"_links":{"self":[{"href":"https:\/\/ownwebservers.com\/kb\/wp-json\/wp\/v2\/posts\/4341","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ownwebservers.com\/kb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ownwebservers.com\/kb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ownwebservers.com\/kb\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ownwebservers.com\/kb\/wp-json\/wp\/v2\/comments?post=4341"}],"version-history":[{"count":3,"href":"https:\/\/ownwebservers.com\/kb\/wp-json\/wp\/v2\/posts\/4341\/revisions"}],"predecessor-version":[{"id":4356,"href":"https:\/\/ownwebservers.com\/kb\/wp-json\/wp\/v2\/posts\/4341\/revisions\/4356"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ownwebservers.com\/kb\/wp-json\/wp\/v2\/media\/4343"}],"wp:attachment":[{"href":"https:\/\/ownwebservers.com\/kb\/wp-json\/wp\/v2\/media?parent=4341"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ownwebservers.com\/kb\/wp-json\/wp\/v2\/categories?post=4341"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ownwebservers.com\/kb\/wp-json\/wp\/v2\/tags?post=4341"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}