{"id":398764,"date":"2026-11-06T10:50:32","date_gmt":"2026-11-06T10:50:32","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/estasoft-migration-database-sanitizer\/"},"modified":"2026-11-06T10:50:24","modified_gmt":"2026-11-06T10:50:24","slug":"estasoft-migration-database-sanitizer","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/estasoft-migration-database-sanitizer\/","author":23575894,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Estasoft Migration & Database Sanitizer","header_author":"ESTASOFT TECHNOLOGIES","header_description":"Zero-downtime WordPress migration with resumable chunked database transfer, serialization-safe search and replace, and a rule-based database sanitizer. 100% free.","assets_banners_color":"1f1f1c","last_updated":"2026-11-06 10:50:24","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/estasofttechnologies\/estasoft-migrate","header_author_uri":"https:\/\/estasoft.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":217,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"estasoft","date":"2026-11-06 10:50:24","revision":3787712}},"upgrade_notice":{"1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3787712,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3787712,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3787712,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3787712,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3787712,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3787712,"resolution":"1","location":"assets","locale":"","width":1120,"height":1564},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3787712,"resolution":"2","location":"assets","locale":"","width":1120,"height":1370},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3787712,"resolution":"3","location":"assets","locale":"","width":1120,"height":1249},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3787712,"resolution":"4","location":"assets","locale":"","width":1120,"height":1094},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3787712,"resolution":"5","location":"assets","locale":"","width":1120,"height":1668},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3787712,"resolution":"6","location":"assets","locale":"","width":1120,"height":3099},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3787712,"resolution":"7","location":"assets","locale":"","width":1120,"height":1442}},"screenshots":{"1":"Overview with the environment check.","2":"New migration: export, push and pull.","3":"Pre-flight check before anything changes.","4":"Live progress with pause, resume and cancel.","5":"Database sanitizer: profiles, a switch for every rule and an example of each change.","6":"Serialization-safe search and replace with a dry run.","7":"Packages and rollback snapshots."}},"plugin_section":[],"plugin_tags":[153,131785,4155,12126,19979],"plugin_category":[59],"plugin_contributors":[286047],"plugin_business_model":[],"class_list":["post-398764","plugin","type-plugin","status-publish","hentry","plugin_tags-database","plugin_tags-gdpr","plugin_tags-migration","plugin_tags-search-replace","plugin_tags-staging","plugin_category-utilities-and-tools","plugin_contributors-estasoft","plugin_committers-estasoft"],"banners":{"banner":"https:\/\/ps.w.org\/estasoft-migration-database-sanitizer\/assets\/banner-772x250.png?rev=3787712","banner_2x":"https:\/\/ps.w.org\/estasoft-migration-database-sanitizer\/assets\/banner-1544x500.png?rev=3787712","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/estasoft-migration-database-sanitizer\/assets\/icon.svg?rev=3787712","icon":"https:\/\/ps.w.org\/estasoft-migration-database-sanitizer\/assets\/icon.svg?rev=3787712","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/estasoft-migration-database-sanitizer\/assets\/screenshot-1.png?rev=3787712","caption":"Overview with the environment check."},{"src":"https:\/\/ps.w.org\/estasoft-migration-database-sanitizer\/assets\/screenshot-2.png?rev=3787712","caption":"New migration: export, push and pull."},{"src":"https:\/\/ps.w.org\/estasoft-migration-database-sanitizer\/assets\/screenshot-3.png?rev=3787712","caption":"Pre-flight check before anything changes."},{"src":"https:\/\/ps.w.org\/estasoft-migration-database-sanitizer\/assets\/screenshot-4.png?rev=3787712","caption":"Live progress with pause, resume and cancel."},{"src":"https:\/\/ps.w.org\/estasoft-migration-database-sanitizer\/assets\/screenshot-5.png?rev=3787712","caption":"Database sanitizer: profiles, a switch for every rule and an example of each change."},{"src":"https:\/\/ps.w.org\/estasoft-migration-database-sanitizer\/assets\/screenshot-6.png?rev=3787712","caption":"Serialization-safe search and replace with a dry run."},{"src":"https:\/\/ps.w.org\/estasoft-migration-database-sanitizer\/assets\/screenshot-7.png?rev=3787712","caption":"Packages and rollback snapshots."}],"raw_content":"<!--section=description-->\n<p>Estasoft Migration &amp; Database Sanitizer fixes the four things that go wrong with most migration plugins:<\/p>\n\n<ul>\n<li><strong>Timeouts on large tables.<\/strong> The database is copied in small batches that adapt to your server's speed and memory. A job can be paused, resumed after a server restart, and retried from the exact row where it stopped.<\/li>\n<li><strong>Broken serialized data.<\/strong> Search and replace understands PHP-serialized values, JSON and nested combinations, and fixes string lengths as it goes. Dry run first, always.<\/li>\n<li><strong>Downtime and half-finished imports.<\/strong> An import is built in temporary tables and switched in with one atomic step. If anything fails before that step, the live site is untouched. A rollback snapshot is taken first.<\/li>\n<li><strong>Customer data on staging sites.<\/strong> A rule-based sanitizer replaces names, emails, phone numbers, addresses and IP addresses with believable fake values, resets passwords, removes secrets, and can block outgoing email on the copy.<\/li>\n<\/ul>\n\n<p>Everything is free. There is no license key, no locked tab, no upgrade banner and no tracking.<\/p>\n\n<h4>What you get<\/h4>\n\n<ul>\n<li><strong>Overview<\/strong>: database size, largest table, last migration, snapshots and an environment check.<\/li>\n<li><strong>New migration<\/strong>: export a package, or push to or pull from another WordPress site.<\/li>\n<li><strong>Pre-flight check<\/strong>: disk space, memory, time limits, PHP and database versions, collations and more, with a plain explanation of anything that could go wrong, before anything is changed.<\/li>\n<li><strong>Progress<\/strong>: live status, per-table progress, pause, resume, cancel and retry.<\/li>\n<li><strong>Database sanitizer<\/strong>: Staging, Developer handoff and GDPR-safe profiles, a preview of changed values, and your own saved settings. The same fake value is produced for the same real value every time, so references stay consistent.<\/li>\n<li><strong>Search &amp; replace<\/strong>: serialization-safe, with a table-by-table dry run and optional rollback snapshot.<\/li>\n<li><strong>Packages and snapshots<\/strong>: download, verify, upload and import <code>.estm<\/code> packages, with optional password encryption. Restore a rollback snapshot in one step.<\/li>\n<li><strong>Logs<\/strong>: a searchable log of every job, with download.<\/li>\n<li><strong>Settings<\/strong>: batch sizes, storage and clean-up, connection key for incoming migrations, background runner.<\/li>\n<li><strong>WP-CLI<\/strong>: <code>wp estasoft-migrate<\/code> has a command for every action, for scripts and servers without a browser.<\/li>\n<\/ul>\n\n<h4>Privacy<\/h4>\n\n<p>The plugin does not collect or send any data to Estasoft or anyone else, and it uses no third-party service. It makes web requests only to a WordPress site that you connect yourself (for push and pull), signed with a key that only the two sites know. Packages and snapshots are stored in a protected folder inside your uploads directory and are never publicly downloadable.<\/p>\n\n<p>A package is a full copy of your database, so treat it like your database. The plugin also adds suggested wording about what it stores to <strong>Settings &gt; Privacy<\/strong>, for your privacy policy.<\/p>\n\n<h4>Planned<\/h4>\n\n<p>Delta sync (sending only the chunks that changed). The plugin already stores a checksum for each table and chunk after a migration, so the data is ready.<\/p>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.8 or newer, PHP 7.4 or newer, MySQL 5.7 \/ 8.0 or MariaDB 10.3 or newer.<\/li>\n<li>The PHP <code>sodium<\/code> extension is needed only for encrypted packages (included with PHP 7.2 and newer).<\/li>\n<li>WordPress Multisite is not supported in this version. On a multisite network the pre-flight check stops every migration before anything is changed.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>estasoft-migration-database-sanitizer<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the zip from <strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong>.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Open <strong>Estasoft Migrate<\/strong> in the admin menu. The Overview shows an environment check.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20it%20really%20free%3F\"><h3>Is it really free?<\/h3><\/dt>\n<dd><p>Yes. Every feature is included and the code is licensed under the GPL v2 or later.<\/p><\/dd>\n<dt id=\"will%20it%20timeout%20on%20a%20big%20database%3F\"><h3>Will it timeout on a big database?<\/h3><\/dt>\n<dd><p>It copies tables in small batches, saves a checkpoint after each one, and picks the next batch size from how long the last one took. If a request is cut off, the job continues from the checkpoint. On servers where a background runner can be used, you can close the browser and the job keeps going.<\/p><\/dd>\n<dt id=\"does%20it%20change%20my%20live%20site%20while%20importing%3F\"><h3>Does it change my live site while importing?<\/h3><\/dt>\n<dd><p>Not until the last step. The data is built in temporary tables first, and a verified package plus a rollback snapshot are in place before the tables are switched with one atomic rename.<\/p><\/dd>\n<dt id=\"can%20i%20sanitize%20a%20database%20without%20moving%20it%3F\"><h3>Can I sanitize a database without moving it?<\/h3><\/dt>\n<dd><p>Yes. Choose a profile on the Sanitizer screen and export a sanitized package. Your live data is never changed by sanitizing; the masking happens in the package.<\/p><\/dd>\n<dt id=\"what%20is%20an%20.estm%20package%3F\"><h3>What is an .estm package?<\/h3><\/dt>\n<dd><p>A single file with your database, split into checked blocks, optionally compressed and encrypted with a password. Any block that is damaged is detected before an import starts.<\/p><\/dd>\n<dt id=\"how%20do%20i%20move%20a%20site%20over%20the%20network%3F\"><h3>How do I move a site over the network?<\/h3><\/dt>\n<dd><p>On the destination site, turn on <strong>Accept incoming migrations<\/strong> in Settings and copy the connection key. On the source site, choose <strong>Push<\/strong> or <strong>Pull<\/strong> under New migration and paste the address and key.<\/p><\/dd>\n<dt id=\"is%20it%20safe%20to%20leave%20%22accept%20incoming%20migrations%22%20on%3F\"><h3>Is it safe to leave \"Accept incoming migrations\" on?<\/h3><\/dt>\n<dd><p>It switches itself off after 24 hours without a migration (you can choose 1 hour, 7 days or never), and each migration moves that time forward, so a running migration is never cut off. While it is on, a site that has the connection key can send a package and start an import, which replaces this site's data, or ask for a copy of the database. Requests are signed, a request can be used only once, HTTPS is required by default, and you can limit the addresses that may connect. If a key may have been seen by someone else, use <strong>Replace key<\/strong> and tick \"Stop the old key at once\".<\/p><\/dd>\n<dt id=\"can%20i%20connect%20two%20sites%20on%20my%20own%20computer%20or%20network%3F\"><h3>Can I connect two sites on my own computer or network?<\/h3><\/dt>\n<dd><p>Yes. WordPress refuses to connect to localhost and private network addresses (such as 192.168.x.x) unless you allow it, so turn on <strong>Allow local and private addresses<\/strong> in Settings on the site that starts the push or pull. Turn it off again when you no longer need it.<\/p><\/dd>\n<dt id=\"are%20my%20packages%20safe%20from%20being%20downloaded%20by%20other%20people%3F\"><h3>Are my packages safe from being downloaded by other people?<\/h3><\/dt>\n<dd><p>They are kept in a folder with a random name inside your uploads directory, with rules that deny web access and an empty index file. Downloads go through your admin session and a permission check. The plugin tests this by requesting a throw-away file from that folder and shows the result on the Packages and Settings screens. If your web server ignores <code>.htaccess<\/code> files (nginx does), add a rule that denies access to <code>wp-content\/uploads\/estasoft-migrate-*<\/code>, or protect the package with a password.<\/p><\/dd>\n<dt id=\"does%20it%20move%20media%20files%2C%20themes%20and%20plugins%3F\"><h3>Does it move media files, themes and plugins?<\/h3><\/dt>\n<dd><p>No. This version moves the database only. Use it together with your host's file copy, rsync or your usual deployment for <code>wp-content<\/code>.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20multisite%3F\"><h3>Does it work with Multisite?<\/h3><\/dt>\n<dd><p>Not yet. This version migrates single sites only, and the pre-flight check says so on a network.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release: chunked, resumable export and import; atomic table swap with rollback snapshots; encrypted <code>.estm<\/code> packages; push and pull between sites; serialization-safe search and replace; rule-based database sanitizer with three profiles; pre-flight checks; logs; WP-CLI commands.<\/li>\n<\/ul>","raw_excerpt":"Move, copy and clean a WordPress database without timeouts, broken serialized data or leaked customer details. 100% free.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/398764","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=398764"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/estasoft"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=398764"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=398764"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=398764"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=398764"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=398764"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=398764"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}