Skip to content

Migrate local to live

Migrate pushes this whole site to a live server without a manual backup upload. The source (this Pro site) streams an .emcp archive directly to a tiny connector plugin on the destination, which reassembles and restores it.

  • You need admin access to the destination site to install the connector.
  • The destination should be a working WordPress install. It can be empty/fresh, or an existing site you are replacing.
  • Migration replaces the destination’s database and files with this site’s. Take a backup of the destination first if you might need it.

Step 1: Install the connector on the destination

Section titled “Step 1: Install the connector on the destination”
  1. On this site, open EMCP Tools → Backup, Sync & Migrate → Migrate and click Download connector. You get a small .zip.
  2. On the destination, go to Plugins → Add New → Upload Plugin, upload the zip, and activate EMCP Migrate Connector.
  1. On the destination, open Settings → EMCP Migrate Connector, choose a pairing window (5 / 10 / 15 minutes), and click Arm pairing. It shows a one-time pairing code and the site’s URL.
  2. Back on the source’s Migrate tab, click Pair a live site, paste the destination URL and pairing code, and pair.

Once paired, the site stays paired until you unpair or remove the connector. The pairing window only limits how long a new pairing can be started, and it closes automatically after the first successful pairing.

EMCP Tools → Backup, Sync & Migrate → Migrate tab, showing the three-step download-pair-push flow and the paired targets table

  1. On the Migrate tab, select the paired target and click Push & Restore. You can push an existing backup or let it build a fresh full backup first.
  2. The archive transfers in resumable, firewall-safe packets (base64-encoded so it clears a destination WAF; HMAC-signed; offset-based resume). The push is driven in short slices, so no single request runs long enough to be killed by a host timeout, and a transient failure resumes from the last confirmed byte.
  3. The connector restores past a client disconnect and reports progress the source polls. When it finishes, open the live site to confirm.

When a migration completes, a Remove connector button appears (and each paired target has one too). It sends a signed request asking the connector to unpair, purge any staged transfer data, deactivate itself, and delete its own plugin files from the live site, leaving no trace. Only the paired source can trigger it. If the connector can’t be reached, the target is still forgotten locally, with a note to remove the plugin manually.

  • “Pairing failed”: make sure pairing is armed and the window hasn’t expired, and that the destination URL is reachable. The plugin tries both /wp-json/ and the permalink-independent ?rest_route= form automatically.
  • Push stalls or errors mid-transfer: it resumes from the last confirmed offset on retry; large transfers are expected to take several slices. See Server upload limits for host caps that affect speed.
  • Can’t re-pair after a migration: the migrated site regenerates its permalink rewrite rules after a restore so /wp-json/ works again; if you replaced the connector, re-arm pairing on the destination.

A connected agent can migrate with the migrate-site MCP tool. It is destructive, disabled by default, and requires confirm: true. See the module overview.