<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>mysql tuning Archives - Backup Copilot</title>
	<atom:link href="https://backupcopilotplugin.com/blog/tag/mysql-tuning/feed/" rel="self" type="application/rss+xml" />
	<link>https://backupcopilotplugin.com/blog/tag/mysql-tuning/</link>
	<description>WordPress Backups Done Right</description>
	<lastBuildDate>Mon, 24 Nov 2025 11:17:05 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://storage.googleapis.com/backupcopilotplugin/2025/11/favicon-alt-150x150.png</url>
	<title>mysql tuning Archives - Backup Copilot</title>
	<link>https://backupcopilotplugin.com/blog/tag/mysql-tuning/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Optimizing Server Configuration for WordPress Backup Performance</title>
		<link>https://backupcopilotplugin.com/blog/optimizing-server-configuration-for-wordpress-backup-performance/</link>
		
		<dc:creator><![CDATA[Krasen Slavov]]></dc:creator>
		<pubDate>Thu, 30 Oct 2025 21:56:59 +0000</pubDate>
				<category><![CDATA[WordPress Hosting & Infrastructure]]></category>
		<category><![CDATA[backup performance]]></category>
		<category><![CDATA[erver configuration]]></category>
		<category><![CDATA[mysql tuning]]></category>
		<category><![CDATA[php configuration]]></category>
		<category><![CDATA[server optimization]]></category>
		<guid isPermaLink="false">https://backupcopilotplugin.com/?p=72</guid>

					<description><![CDATA[<p>Content Delivery Networks (CDNs) dramatically improve WordPress site speed by serving images, CSS, and JavaScript from globally distributed servers.</p>
<p>The post <a href="https://backupcopilotplugin.com/blog/optimizing-server-configuration-for-wordpress-backup-performance/">Optimizing Server Configuration for WordPress Backup Performance</a> appeared first on <a href="https://backupcopilotplugin.com">Backup Copilot</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Content Delivery Networks (CDNs) dramatically improve WordPress site speed by serving images, CSS, and JavaScript from globally distributed servers. But CDNs add complexity to backups and restoration—URLs change, assets live on external servers, and migrations require careful URL replacement to avoid broken images and missing files.</p>



<p>This comprehensive guide tackles the unique challenges CDNs create for WordPress backups. You&#8217;ll learn how CDN URL structures affect database backups, how to properly backup and restore CDN-enabled sites, and how to handle migrations without breaking asset links. Whether you use Cloudflare, MaxCDN, Amazon CloudFront, or another provider, you&#8217;ll understand exactly how to maintain bulletproof backups.</p>



<p>By the end of this tutorial, you&#8217;ll know how to backup CDN-configured sites correctly, restore them without broken assets, and test backups while preserving CDN functionality.</p>



<h2 class="wp-block-heading" id="understanding-cdns-and-wordpress">Understanding CDNs and WordPress</h2>



<h3 class="wp-block-heading" id="what-is-a-cdn">What is a CDN?</h3>



<p><strong>Traditional WordPress Hosting:</strong></p>



<pre class="wp-block-code"><code>User in Australia → Server in USA → Slow (200ms+ latency)
</code></pre>



<p><strong>With CDN:</strong></p>



<pre class="wp-block-code"><code>User in Australia → CDN Edge Server in Sydney → Fast (20ms latency)
User in USA → CDN Edge Server in New York → Fast (15ms latency)
</code></pre>



<p><strong>How CDNs Work:</strong></p>



<ol class="wp-block-list">
<li>WordPress uploads image to server: <code>yoursite.com/uploads/logo.png</code></li>



<li>CDN plugin rewrites URL: <code>cdn.yoursite.com/uploads/logo.png</code></li>



<li>User requests image from CDN subdomain</li>



<li>CDN serves cached copy from nearest server</li>



<li>Fast delivery, reduced server load</li>
</ol>



<h3 class="wp-block-heading" id="popular-cdn-providers">Popular CDN Providers</h3>



<p><strong>Cloudflare (Most Popular):</strong></p>



<ul class="wp-block-list">
<li>Free tier available</li>



<li>Automatic SSL</li>



<li>DDoS protection included</li>



<li>DNS-based (proxies entire site)</li>



<li>275+ edge locations worldwide</li>
</ul>



<p><strong>StackPath (formerly MaxCDN):</strong></p>



<ul class="wp-block-list">
<li>Pull CDN (caches on-demand)</li>



<li>Custom CDN URLs</li>



<li>Real-time cache purging</li>



<li>Starting $10/month</li>
</ul>



<p><strong>Amazon CloudFront:</strong></p>



<ul class="wp-block-list">
<li>AWS integration</li>



<li>Pay-as-you-go pricing</li>



<li>Global edge network</li>



<li>Complex configuration</li>
</ul>



<p><strong>KeyCDN:</strong></p>



<ul class="wp-block-list">
<li>Budget-friendly ($0.04/GB)</li>



<li>Simple setup</li>



<li>HTTP/2 support</li>



<li>34 edge locations</li>
</ul>



<p><strong>BunnyCDN:</strong></p>



<ul class="wp-block-list">
<li>Very affordable ($0.01/GB)</li>



<li>Fast performance</li>



<li>WordPress plugin available</li>



<li>91 edge locations</li>
</ul>



<h3 class="wp-block-heading" id="cdn-url-structures">CDN URL Structures</h3>



<p><strong>Subdomain CDN:</strong></p>



<pre class="wp-block-code"><code>Original: https://yoursite.com/wp-content/uploads/image.jpg
CDN:      https://cdn.yoursite.com/wp-content/uploads/image.jpg
</code></pre>



<p><strong>Custom Domain:</strong></p>



<pre class="wp-block-code"><code>Original: https://yoursite.com/wp-content/uploads/image.jpg
CDN:      https://static.yoursite.com/wp-content/uploads/image.jpg
</code></pre>



<p><strong>Third-Party Domain:</strong></p>



<pre class="wp-block-code"><code>Original: https://yoursite.com/wp-content/uploads/image.jpg
CDN:      https://d3abc123xyz.cloudfront.net/wp-content/uploads/image.jpg
</code></pre>



<p><strong>Cloudflare (Transparent):</strong></p>



<pre class="wp-block-code"><code>Original: https://yoursite.com/wp-content/uploads/image.jpg
CDN:      https://yoursite.com/wp-content/uploads/image.jpg (same URL!)
</code></pre>



<h2 class="wp-block-heading" id="how-cdns-affect-wordpress-backups">How CDNs Affect WordPress Backups</h2>



<h3 class="wp-block-heading" id="database-url-rewriting">Database URL Rewriting</h3>



<p><strong>Problem:</strong>&nbsp;CDN plugins rewrite URLs in database:</p>



<p><strong>wp_posts table (post content):</strong></p>



<pre class="wp-block-code"><code><em>&lt;!-- Original --&gt;</em>
&lt;img src="https://yoursite.com/uploads/photo.jpg"&gt;

<em>&lt;!-- After CDN activation --&gt;</em>
&lt;img src="https://cdn.yoursite.com/uploads/photo.jpg"&gt;
</code></pre>



<p><strong>Backup Impact:</strong></p>



<ul class="wp-block-list">
<li>Database contains CDN URLs</li>



<li>Restoring to new domain keeps old CDN references</li>



<li>Broken images if CDN subdomain doesn&#8217;t exist on new site</li>
</ul>



<h3 class="wp-block-heading" id="asset-location-confusion">Asset Location Confusion</h3>



<p><strong>CDN serves files from origin server:</strong></p>



<ul class="wp-block-list">
<li>Files still physically on WordPress server: <code>/wp-content/uploads/</code></li>



<li>CDN caches copies on edge servers</li>



<li>Backup includes original files (good!)</li>



<li>But database references CDN URLs (problematic)</li>
</ul>



<p><strong>Restore Scenario:</strong></p>



<pre class="wp-block-code"><code>Backup from: yoursite.com (using cdn.yoursite.com)
Restore to: newsite.com

Problem: Database has cdn.yoursite.com URLs
Files exist at: newsite.com/wp-content/uploads/
Result: Broken images (looking for cdn.yoursite.com instead of newsite.com)
</code></pre>



<h3 class="wp-block-heading" id="cache-invalidation-after-restore">Cache Invalidation After Restore</h3>



<p><strong>Restoring from backup = stale CDN cache:</strong></p>



<p>Example:</p>



<ol class="wp-block-list">
<li>Site has logo-v1.png cached on CDN</li>



<li>You restore backup from 2 weeks ago with logo-v2.png</li>



<li>CDN still serves cached logo-v1.png</li>



<li>Site shows wrong logo until cache expires or manual purge</li>
</ol>



<h2 class="wp-block-heading" id="backing-up-cdn-enabled-sites">Backing Up CDN-Enabled Sites</h2>



<h3 class="wp-block-heading" id="what-to-include-in-backups">What to Include in Backups</h3>



<p><strong>Database:</strong></p>



<ul class="wp-block-list">
<li>Contains CDN-rewritten URLs</li>



<li>Backup as-is (with CDN URLs)</li>



<li>Will search-replace during restoration</li>
</ul>



<p><strong>Files:</strong></p>



<ul class="wp-block-list">
<li><code>/wp-content/uploads/</code> &#8211; All media files (CDN source)</li>



<li><code>/wp-content/themes/</code> &#8211; Themes (may reference CDN)</li>



<li><code>/wp-content/plugins/</code> &#8211; CDN plugins and configuration</li>



<li><code>wp-config.php</code> &#8211; May contain CDN constants</li>
</ul>



<p><strong>CDN Configuration:</strong></p>



<ul class="wp-block-list">
<li>Document CDN provider settings</li>



<li>Note subdomain/custom domain</li>



<li>Record CDN zones/distributions</li>



<li>Save plugin settings (screenshot or export)</li>
</ul>



<h3 class="wp-block-heading" id="backup-best-practices-with-cdn">Backup Best Practices with CDN</h3>



<p><strong>1. Include CDN Plugin Settings:</strong></p>



<p>Many CDN plugins store config in&nbsp;<code>wp_options</code>:</p>



<pre class="wp-block-code"><code>SELECT * FROM wp_options
WHERE option_name LIKE '%cdn%' OR option_name LIKE '%cloudflare%';
</code></pre>



<p>Backup includes this automatically.</p>



<p><strong>2. Document CDN Setup:</strong></p>



<p>Create&nbsp;<code>cdn-config.txt</code>&nbsp;with:</p>



<pre class="wp-block-code"><code>CDN Provider: Cloudflare
CDN URL: yoursite.com (proxied)
Plugin: Cloudflare Official Plugin
API Token: &#91;stored in wp_options]
Cache Settings: Browser cache 4 hours, edge cache 30 days
Page Rules: Cache everything on /wp-content/*

Alternative access (if CDN down): origin.yoursite.com
</code></pre>



<p><strong>3. Test Backup Without CDN:</strong></p>



<p>Before creating backup:</p>



<ol class="wp-block-list">
<li>Temporarily disable CDN plugin</li>



<li>Verify site works with local assets</li>



<li>If yes, CDN is non-essential layer</li>



<li>Create backup</li>



<li>Re-enable CDN</li>
</ol>



<p>This proves backup is self-contained.</p>



<h2 class="wp-block-heading" id="find-replace-strategies-for-cdn-urls">Find-Replace Strategies for CDN URLs</h2>



<h3 class="wp-block-heading" id="identifying-cdn-urls-in-backup">Identifying CDN URLs in Backup</h3>



<p><strong>Search backup SQL file for CDN patterns:</strong></p>



<pre class="wp-block-code"><code><em># Linux/Mac</em>
grep -i "cdn\." backup.sql | head -20

<em># Windows (PowerShell)</em>
Select-String -Path backup.sql -Pattern "cdn\." | Select-Object -First 20
</code></pre>



<p><strong>Common patterns:</strong></p>



<ul class="wp-block-list">
<li><code>cdn.yoursite.com</code></li>



<li><code>static.yoursite.com</code></li>



<li><code>d3abc123xyz.cloudfront.net</code></li>



<li><code>yoursite-cdn.stackpathcdn.com</code></li>
</ul>



<h3 class="wp-block-heading" id="search-replace-during-restoration">Search-Replace During Restoration</h3>



<p><strong>Using WP-CLI:</strong></p>



<pre class="wp-block-code"><code><em># Replace CDN subdomain with new domain</em>
wp search-replace 'cdn.oldsite.com' 'newsite.com' --all-tables

<em># Replace CloudFront URL with new domain</em>
wp search-replace 'd3abc123xyz.cloudfront.net' 'newsite.com' --all-tables

<em># Replace old domain with new domain (catches non-CDN URLs too)</em>
wp search-replace 'oldsite.com' 'newsite.com' --all-tables
</code></pre>



<p><strong>Using Better Search Replace plugin:</strong></p>



<ol class="wp-block-list">
<li>Install Better Search Replace</li>



<li>Search for: <code>cdn.oldsite.com</code></li>



<li>Replace with: <code>newsite.com</code></li>



<li>Select all tables</li>



<li>Run (uncheck &#8220;dry run&#8221; after testing)</li>
</ol>



<p><strong>Backup Copilot Pro Find-Replace:</strong></p>



<ol class="wp-block-list">
<li>During restoration, enable &#8220;Find &amp; Replace URLs&#8221;</li>



<li>Old URL: <code>https://cdn.oldsite.com</code></li>



<li>New URL: <code>https://newsite.com</code></li>



<li>Plugin updates all database references automatically</li>
</ol>



<h3 class="wp-block-heading" id="multiple-cdn-url-patterns">Multiple CDN URL Patterns</h3>



<p><strong>Complex scenario:</strong>&nbsp;Site uses multiple CDN URLs:</p>



<ul class="wp-block-list">
<li>Images: <code>cdn.yoursite.com</code></li>



<li>CSS/JS: <code>static.yoursite.com</code></li>



<li>Videos: <code>d3abc123xyz.cloudfront.net</code></li>
</ul>



<p><strong>Solution: Multiple search-replace operations:</strong></p>



<pre class="wp-block-code"><code>wp search-replace 'cdn.yoursite.com' 'newsite.com' --all-tables
wp search-replace 'static.yoursite.com' 'newsite.com' --all-tables
wp search-replace 'd3abc123xyz.cloudfront.net' 'newsite.com' --all-tables
</code></pre>



<p>Run sequentially to replace all CDN patterns.</p>



<h2 class="wp-block-heading" id="provider-specific-backup-considerations">Provider-Specific Backup Considerations</h2>



<h3 class="wp-block-heading" id="cloudflare">Cloudflare</h3>



<p><strong>Unique Characteristics:</strong></p>



<ul class="wp-block-list">
<li>DNS-based proxy (transparent to WordPress)</li>



<li>URLs don&#8217;t change in database (no rewriting!)</li>



<li>Caches entire site, not just assets</li>



<li>Page Rules affect dynamic content</li>
</ul>



<p><strong>Backup Simplicity:</strong>&nbsp;Cloudflare is easiest for backups:</p>



<ul class="wp-block-list">
<li>Database has normal URLs (no CDN subdomain)</li>



<li>Restore to new domain = change WordPress site URL</li>



<li>No CDN URL find-replace needed</li>



<li>Just update Cloudflare DNS to point to new server</li>
</ul>



<p><strong>Post-Restore Steps:</strong></p>



<ol class="wp-block-list">
<li>Restore backup to new server</li>



<li>Update Cloudflare DNS A record to new server IP</li>



<li>Purge Cloudflare cache: Performance > Purge Everything</li>



<li>Test site loads correctly</li>



<li>Done!</li>
</ol>



<p><strong>Development Mode:</strong></p>



<ul class="wp-block-list">
<li>Enable Cloudflare > Caching > Development Mode</li>



<li>Bypasses cache for 3 hours</li>



<li>Useful when testing restored site</li>
</ul>



<h3 class="wp-block-heading" id="maxcdn--stackpath">MaxCDN / StackPath</h3>



<p><strong>Characteristics:</strong></p>



<ul class="wp-block-list">
<li>Pull CDN with custom subdomain</li>



<li>Plugin rewrites URLs in database</li>



<li>Separate CDN zone configuration</li>
</ul>



<p><strong>Backup Challenge:</strong>&nbsp;Database contains&nbsp;<code>yoursite-cdn.stackpathcdn.com</code>&nbsp;URLs.</p>



<p><strong>Restoration Process:</strong></p>



<ol class="wp-block-list">
<li>Restore backup to new site</li>



<li>Install StackPath plugin</li>



<li>Create new CDN zone (or keep old one)</li>



<li>Run search-replace:
<ul class="wp-block-list">
<li>Old: <code>yoursite-cdn.stackpathcdn.com</code></li>



<li>New: <code>newsite.com</code> (if not using CDN) or <code>newsite-cdn.stackpathcdn.com</code></li>
</ul>
</li>



<li>Purge StackPath cache from dashboard</li>
</ol>



<p><strong>Alternative: Keep Same CDN Zone:</strong>&nbsp;If migrating to new domain but keeping CDN:</p>



<ol class="wp-block-list">
<li>Update origin server in StackPath dashboard</li>



<li>Point to new server IP</li>



<li>Keep CDN URLs unchanged in database</li>



<li>No search-replace needed</li>
</ol>



<h3 class="wp-block-heading" id="amazon-cloudfront">Amazon CloudFront</h3>



<p><strong>Characteristics:</strong></p>



<ul class="wp-block-list">
<li>Most complex setup</li>



<li>Unique distribution URLs (d3abc123xyz.cloudfront.net)</li>



<li>Requires AWS console management</li>
</ul>



<p><strong>Backup Challenge:</strong>&nbsp;Database full of CloudFront URLs.</p>



<p><strong>Restoration Options:</strong></p>



<p><strong>Option A: Disable CDN on Restored Site</strong></p>



<pre class="wp-block-code"><code><em># Replace CloudFront URLs with new domain</em>
wp search-replace 'd3abc123xyz.cloudfront.net' 'newsite.com' --all-tables
</code></pre>



<p><strong>Option B: Create New CloudFront Distribution</strong></p>



<ol class="wp-block-list">
<li>Restore backup</li>



<li>Create new CloudFront distribution pointing to new site</li>



<li>Get new distribution URL (d3def456abc.cloudfront.net)</li>



<li>Search-replace old CloudFront → new CloudFront</li>



<li>Update DNS CNAMEs if using custom domain</li>
</ol>



<p><strong>Option C: Update Existing Distribution</strong></p>



<ol class="wp-block-list">
<li>Restore backup to new server</li>



<li>Update CloudFront origin to point to new server</li>



<li>Keep distribution URL unchanged</li>



<li>No database search-replace needed</li>



<li>Invalidate CloudFront cache</li>
</ol>



<h2 class="wp-block-heading" id="restoring-sites-with-active-cdn">Restoring Sites with Active CDN</h2>



<h3 class="wp-block-heading" id="pre-restoration-checklist">Pre-Restoration Checklist</h3>



<p><strong>1. Document Current CDN Setup:</strong></p>



<ul class="wp-block-list">
<li>Provider name</li>



<li>CDN URLs/subdomains</li>



<li>Plugin settings</li>



<li>DNS records (CNAME)</li>
</ul>



<p><strong>2. Decide CDN Strategy for Restored Site:</strong></p>



<ul class="wp-block-list">
<li>Keep CDN active?</li>



<li>Disable temporarily?</li>



<li>Migrate to new CDN?</li>
</ul>



<p><strong>3. Prepare Search-Replace Plan:</strong></p>



<ul class="wp-block-list">
<li>List all CDN URLs in database</li>



<li>Determine replacement URLs</li>



<li>Test find-replace on staging first</li>
</ul>



<h3 class="wp-block-heading" id="step-by-step-restoration-process">Step-by-Step Restoration Process</h3>



<p><strong>Scenario: Restoring to new domain with CDN disabled</strong></p>



<ol class="wp-block-list">
<li><strong>Restore Database:</strong>
<ul class="wp-block-list">
<li>Import backup SQL to new database</li>



<li>Database contains old domain + CDN URLs</li>
</ul>
</li>



<li><strong>Restore Files:</strong>
<ul class="wp-block-list">
<li>Extract wp-content, wp-config.php</li>



<li>Files uploaded to new server</li>
</ul>
</li>



<li><strong>Update wp-config.php:</strong>
<ul class="wp-block-list">
<li>Update database credentials for new database</li>
</ul>
</li>



<li><strong>Search-Replace URLs:</strong></li>
</ol>



<pre class="wp-block-code"><code><em># Replace old domain (non-CDN)</em>
wp search-replace 'oldsite.com' 'newsite.com' --all-tables

<em># Replace CDN subdomain</em>
wp search-replace 'cdn.oldsite.com' 'newsite.com' --all-tables
</code></pre>



<ol start="5" class="wp-block-list">
<li><strong>Deactivate CDN Plugin:</strong></li>
</ol>



<pre class="wp-block-code"><code>wp plugin deactivate cdn-enabler
</code></pre>



<ol start="6" class="wp-block-list">
<li><strong>Verify Assets Load:</strong>
<ul class="wp-block-list">
<li>Visit site, check images display</li>



<li>Inspect source code for CDN URLs</li>



<li>Should all be newsite.com</li>
</ul>
</li>



<li><strong>Test Functionality:</strong>
<ul class="wp-block-list">
<li>Forms submit</li>



<li>Pages load</li>



<li>Admin panel works</li>
</ul>
</li>
</ol>



<p><strong>Scenario: Restoring with CDN active</strong></p>



<ol class="wp-block-list">
<li>Restore database and files (same as above)</li>



<li>Keep CDN plugin active</li>



<li>Update CDN configuration in plugin settings:
<ul class="wp-block-list">
<li>CDN URL: Update to new CDN subdomain or keep old</li>



<li>Origin: Update to new server</li>
</ul>
</li>



<li>Update CDN provider dashboard:
<ul class="wp-block-list">
<li>Point origin to new server IP</li>
</ul>
</li>



<li>Purge CDN cache</li>



<li>Test site loads with CDN serving assets</li>
</ol>



<h2 class="wp-block-heading" id="troubleshooting-cdn-backup-issues">Troubleshooting CDN Backup Issues</h2>



<h3 class="wp-block-heading" id="broken-assets-after-restoration">Broken Assets After Restoration</h3>



<p><strong>Symptom:</strong></p>



<ul class="wp-block-list">
<li>Site loads but images show broken</li>



<li>CSS/JS not loading</li>



<li>Mixed content warnings</li>
</ul>



<p><strong>Diagnosis:</strong>&nbsp;View page source, check image URLs:</p>



<pre class="wp-block-code"><code><em>&lt;!-- Problem: Still referencing old CDN --&gt;</em>
&lt;img src="https://cdn.oldsite.com/uploads/image.jpg"&gt;
</code></pre>



<p><strong>Solution:</strong>&nbsp;Run search-replace to fix CDN URLs:</p>



<pre class="wp-block-code"><code>wp search-replace 'cdn.oldsite.com' 'newsite.com' --all-tables --dry-run
<em># Review output, then run without --dry-run</em>
wp search-replace 'cdn.oldsite.com' 'newsite.com' --all-tables
</code></pre>



<p><strong>Verify:</strong></p>



<ul class="wp-block-list">
<li>Refresh page with cache cleared (Ctrl+Shift+R)</li>



<li>Check source again</li>



<li>Images should now load from newsite.com</li>
</ul>



<h3 class="wp-block-heading" id="mixed-content-warnings-httphttps">Mixed Content Warnings (HTTP/HTTPS)</h3>



<p><strong>Problem:</strong></p>



<ul class="wp-block-list">
<li>Restored site uses HTTPS (SSL)</li>



<li>CDN URLs in database use HTTP</li>



<li>Browser blocks HTTP content on HTTPS page</li>
</ul>



<p><strong>Example:</strong></p>



<pre class="wp-block-code"><code><em>&lt;!-- Page is HTTPS --&gt;</em>
&lt;html&gt;
<em>&lt;!-- Image is HTTP - blocked! --&gt;</em>
&lt;img src="http://cdn.oldsite.com/uploads/photo.jpg"&gt;
</code></pre>



<p><strong>Solution:</strong>&nbsp;Replace HTTP CDN URLs with HTTPS:</p>



<pre class="wp-block-code"><code>wp search-replace 'http://cdn.oldsite.com' 'https://newsite.com' --all-tables
</code></pre>



<p>Or use Really Simple SSL plugin to automatically convert.</p>



<h3 class="wp-block-heading" id="cdn-cache-shows-old-content">CDN Cache Shows Old Content</h3>



<p><strong>Problem:</strong></p>



<ul class="wp-block-list">
<li>Site restored from backup</li>



<li>Old content still showing (from CDN cache)</li>
</ul>



<p><strong>Solution:</strong>&nbsp;Purge CDN cache:</p>



<p><strong>Cloudflare:</strong></p>



<ol class="wp-block-list">
<li>Cloudflare dashboard</li>



<li>Caching > Purge Cache > Purge Everything</li>
</ol>



<p><strong>StackPath:</strong></p>



<ol class="wp-block-list">
<li>StackPath dashboard</li>



<li>Sites > yoursite > Purge</li>



<li>Purge All</li>
</ol>



<p><strong>CloudFront:</strong></p>



<pre class="wp-block-code"><code>aws cloudfront create-invalidation \
  --distribution-id EDFDVBD6EXAMPLE \
  --paths "/*"
</code></pre>



<p>Or via AWS Console &gt; CloudFront &gt; Invalidations</p>



<p><strong>After purging:</strong></p>



<ul class="wp-block-list">
<li>Wait 5-10 minutes for purge to complete</li>



<li>Clear browser cache</li>



<li>Reload site</li>



<li>Should show current content</li>
</ul>



<h3 class="wp-block-heading" id="cdn-subdomain-dns-not-resolving">CDN Subdomain DNS Not Resolving</h3>



<p><strong>Problem:</strong></p>



<ul class="wp-block-list">
<li>Restored site references cdn.newsite.com</li>



<li>DNS not configured for CDN subdomain</li>



<li>Assets fail to load</li>
</ul>



<p><strong>Solution:</strong>&nbsp;Create DNS CNAME record:</p>



<pre class="wp-block-code"><code>Type: CNAME
Name: cdn
Value: newsite.com (or CDN provider URL)
TTL: 300
</code></pre>



<p>Or point directly to CDN provider:</p>



<pre class="wp-block-code"><code>Type: CNAME
Name: cdn
Value: newsite-cdn.stackpathcdn.com
</code></pre>



<p>Allow 5-60 minutes for DNS propagation.</p>



<h2 class="wp-block-heading" id="testing-backups-with-cdn-active">Testing Backups with CDN Active</h2>



<h3 class="wp-block-heading" id="staging-environment-setup">Staging Environment Setup</h3>



<p><strong>Best Practice: Test restores on staging subdomain</strong></p>



<ol class="wp-block-list">
<li><strong>Create staging subdomain:</strong>
<ul class="wp-block-list">
<li>staging.yoursite.com</li>



<li>Separate from production</li>
</ul>
</li>



<li><strong>Restore backup to staging:</strong>
<ul class="wp-block-list">
<li>Import database</li>



<li>Upload files</li>
</ul>
</li>



<li><strong>Update URLs for staging:</strong></li>
</ol>



<pre class="wp-block-code"><code>wp search-replace 'yoursite.com' 'staging.yoursite.com' --all-tables
wp search-replace 'cdn.yoursite.com' 'staging.yoursite.com' --all-tables
</code></pre>



<ol start="4" class="wp-block-list">
<li><strong>Disable CDN on staging:</strong></li>
</ol>



<pre class="wp-block-code"><code>wp plugin deactivate cdn-enabler cloudflare
</code></pre>



<ol start="5" class="wp-block-list">
<li><strong>Test restoration:</strong>
<ul class="wp-block-list">
<li>Site loads correctly</li>



<li>All content accessible</li>



<li>No broken assets</li>
</ul>
</li>



<li><strong>Document process:</strong>
<ul class="wp-block-list">
<li>Note any issues encountered</li>



<li>Refine restoration procedure</li>



<li>Update disaster recovery plan</li>
</ul>
</li>
</ol>



<h3 class="wp-block-heading" id="automated-testing">Automated Testing</h3>



<p><strong>WP-CLI script to test backup restoration:</strong></p>



<pre class="wp-block-code"><code>#!/bin/bash
<em># backup-test.sh</em>

<em># Variables</em>
BACKUP_SQL="backup.sql"
BACKUP_ZIP="backup.zip"
DB_NAME="staging_db"

<em># Import database</em>
wp db import $BACKUP_SQL --path=/var/www/staging

<em># Extract files</em>
unzip -o $BACKUP_ZIP -d /var/www/staging/wp-content

<em># Search-replace URLs</em>
wp search-replace 'yoursite.com' 'staging.yoursite.com' --all-tables --path=/var/www/staging
wp search-replace 'cdn.yoursite.com' 'staging.yoursite.com' --all-tables --path=/var/www/staging

<em># Verify site loads</em>
curl -I https://staging.yoursite.com | grep "200 OK"

if &#91; $? -eq 0 ]; then
  echo "Backup restoration test: SUCCESS"
else
  echo "Backup restoration test: FAILED"
  exit 1
fi
</code></pre>



<p>Run monthly to verify backups are restorable.</p>



<h2 class="wp-block-heading" id="performance-optimization">Performance Optimization</h2>



<h3 class="wp-block-heading" id="backup-speed-with-cdn">Backup Speed with CDN</h3>



<p><strong>CDN doesn&#8217;t affect backup speed:</strong></p>



<ul class="wp-block-list">
<li>Backups copy local files (not from CDN)</li>



<li>Database contains CDN URLs (text, minimal size impact)</li>



<li>Backup time same whether CDN active or not</li>
</ul>



<p><strong>CDN helps with backup downloads:</strong>&nbsp;If serving backup files via WordPress:</p>



<ul class="wp-block-list">
<li>Enable CDN caching for backup directory</li>



<li>Users download from CDN edge servers</li>



<li>Faster download speeds globally</li>
</ul>



<p><strong>Not recommended for security:</strong>&nbsp;Backups should be private, not CDN-cached.</p>



<h3 class="wp-block-heading" id="restore-speed-optimization">Restore Speed Optimization</h3>



<p><strong>Disable CDN during restoration:</strong></p>



<ul class="wp-block-list">
<li>Eliminates cache invalidation delays</li>



<li>Immediate visibility of restored content</li>



<li>Re-enable CDN after verification</li>
</ul>



<p><strong>Purge cache strategically:</strong>&nbsp;Instead of &#8220;Purge Everything,&#8221; purge specific paths:</p>



<pre class="wp-block-code"><code>/wp-content/uploads/*
/wp-content/themes/*
/wp-content/plugins/*
</code></pre>



<p>Preserves cache for unchanged content.</p>



<h2 class="wp-block-heading" id="best-practices-summary">Best Practices Summary</h2>



<p><strong>Before Enabling CDN:</strong></p>



<ul class="wp-block-list">
<li>Create baseline backup without CDN</li>



<li>Document URLs before rewriting</li>
</ul>



<p><strong>With CDN Active:</strong></p>



<ul class="wp-block-list">
<li>Backup regularly (CDN doesn&#8217;t eliminate need)</li>



<li>Document CDN configuration</li>



<li>Test restores on staging with CDN disabled</li>
</ul>



<p><strong>During Migration:</strong></p>



<ul class="wp-block-list">
<li>Plan search-replace strategy</li>



<li>Test on staging first</li>



<li>Purge CDN cache after restoration</li>
</ul>



<p><strong>Ongoing:</strong></p>



<ul class="wp-block-list">
<li>Monitor backup completion (CDN shouldn&#8217;t interfere)</li>



<li>Update disaster recovery documentation with CDN steps</li>



<li>Test restoration annually</li>
</ul>



<h2 class="wp-block-heading" id="external-links">Related Resources</h2>



<ol class="wp-block-list">
<li><a href="https://developers.cloudflare.com/fundamentals/get-started/setup/wordpress/">Cloudflare WordPress Guide</a></li>



<li><a href="https://www.cloudflare.com/learning/cdn/what-is-a-cdn/">CDN Best Practices</a></li>



<li><a href="https://www.wpbeginner.com/beginners-guide/what-is-a-cdn-why-you-should-use-a-cdn-on-your-wordpress-site/">WordPress CDN Integration</a></li>



<li><a href="https://docs.aws.amazon.com/cloudfront/">Amazon CloudFront Documentation</a></li>



<li><a href="https://www.keycdn.com/blog/cdn-performance">CDN Performance Optimization</a></li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Running a CDN?&nbsp;<a href="https://backupcopilotplugin.com/#pricing">Backup Copilot Pro</a>&nbsp;handles CDN URLs automatically with smart find-replace. Backup and restore seamlessly, regardless of your CDN setup—try it free!</p>
<p>The post <a href="https://backupcopilotplugin.com/blog/optimizing-server-configuration-for-wordpress-backup-performance/">Optimizing Server Configuration for WordPress Backup Performance</a> appeared first on <a href="https://backupcopilotplugin.com">Backup Copilot</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
