WooCommerce data migration without plugin
WooCommerce data migration without plugin
This guide will cover the migration of users (customers) and orders from one WooCommerce webshop to another. While plugins and WooCommerce extensions can make this possible, most of them either don't do the job right, or they require a subscription and are not free. With a little bit of MySQL magic, you can do it the right way.
Prerequisites
For this to work, you will need access to MySQL command-line interface (CLI) or a graphical UI such as PHPMyAdmin. WP-CLI tool is optional (if you have remote access to your host and required privileges).
Regarding products, this guide will not cover migration as it is pretty trivial to export/import products within WooCommerce itself.
Remove current WooCommerce data (optional)
Let's say you are in a situation where you need to build a completely new website for an already existing WooCommerce-enabled webshop. Common sense dictates that you will clone the existing production version of the site to some local development environment and build a new site from there. And it will take some time for you to create the new version of the site.
Once you have the new site ready, you will probably notice that some new products were added to the old production version of the site, a few new customers opened accounts, and some new orders have been created. And, of course, you need to do another data sync before releasing the site's latest version.
The best course of action in such a situation would be to remove all your "test" data and completely sync the most current data from the old production site. You can start by deleting all products and product-related media from within the WordPress admin dashboard. Once done with that, you can also remove all orders and users marked as Customer or Subscriber. While products and related media are relatively easy to remove (from within the WordPress admin dashboard), I will demonstrate below how to remove orders and customers.
Delete WooCommerce orders
A few MySQL queries are required to delete WooCommerce orders, so you will need access to MySQL CLI or PHPMyAdmin. You need to execute the following queries to delete orders:
delete from wp_posts where post_type='shop_order';
delete from wp_wc_customer_lookup;
delete from wp_postmeta where post_id not in (select ID from wp_posts);
delete from wp_options where option_name like '_transient_wc_report%';
SQL
Please pay attention to the WordPress table prefix. Observe the line in the example above; delete from wp_posts where post_type='shop_order';
. The query will delete all shop_order post types in the table wp_posts. So, the table's prefix is wp_, which is the default WP table prefix. This may not always be the case. You can check the table prefix in MYSQL CLI by selecting the database and list its tables:
use $DATABASE_NAME;
show tables;
SQL
Once you execute all four queries, all orders will be deleted. With them gone, you can now remove customer/subscriber accounts.
Delete WooCommerce customers
You will need a WP-CLI tool installed to delete customers. Once you have it, please go to your WP website content directory and execute the following commands:
wp user list --role=subscriber --field=ID | xargs wp user delete --yes
wp user list --role=customer --field=ID | xargs wp user delete --yes
Bash
With both commands executed, all users marked as a subscriber and customer will be removed from your website.
Export WooCommerce data
We will export all data related to users and orders. To do so, we will use MYSQL-CLI and execute a few queries that will save all our data to a specific file. Again, you will have to know the correct prefix of your database tables and the correct location where export files will be saved.
Export WooCommerce users
To export all WooCommerce users (subscribers and customers), you need to execute the following set of queries either in MYSQL-CLI or PHPMyAdmin:
select
wp_users.*
from
wp_users
join
wp_usermeta
on wp_users.ID = wp_usermeta.user_id
where
wp_usermeta.meta_key = 'wp_capabilities'
and
(
wp_usermeta.meta_value like '%subscriber%'
or wp_usermeta.meta_value like '%customer%'
)
into outfile '/var/lib/mysql-files/export-customers' CHARACTER
SET
utf8;
SQL
select
wp_usermeta.*
from
wp_usermeta
where
user_id in
(
select
user_id
from
wp_usermeta
where
meta_key = 'wp_capabilities'
and meta_value like '%subscriber%'
or meta_value like '%customer%'
)
into outfile '/var/lib/mysql-files/export-customers-meta' CHARACTER
SET
utf8;
SQL
select
wp_wc_customer_lookup.*
from
wp_wc_customer_lookup into outfile '/var/lib/mysql-files/export-wp-wc-customer-lookup' CHARACTER
SET
utf8;
SQL
Once all queries are executed, you will have the following three files in /var/lib/mysql-files/ directory: export-customers, export-customers-meta and export-wp-wc-customer-lookup.
Export WooCommerce orders
In order to export orders (LOL) from WooCommerce, you also need to execute a couple of queries either in MYSQL-CLI or PHPMyAdmin:
select
*
from
wp_posts
where
post_type like 'shop%' into outfile '/var/lib/mysql-files/export-posts' CHARACTER
SET
utf8;
SQL
select
wp_postmeta.*
from
wp_postmeta
join
wp_posts
on wp_postmeta.post_id = wp_posts.ID
where
wp_posts.post_type like 'shop%' into outfile '/var/lib/mysql-files/export-posts-meta' CHARACTER
SET
utf8;
SQL
select
wp_woocommerce_order_items.*
from
wp_woocommerce_order_itemmeta
join
wp_woocommerce_order_items
on wp_woocommerce_order_items.order_item_id = wp_woocommerce_order_itemmeta.order_item_id
join
wp_posts
on wp_woocommerce_order_items.order_id = wp_posts.ID
where
wp_posts.post_type like 'shop%' into outfile '/var/lib/mysql-files/export-order-items' CHARACTER
SET
utf8;
SQL
select
wp_woocommerce_order_itemmeta.*
from
wp_woocommerce_order_itemmeta
join
wp_woocommerce_order_items
on wp_woocommerce_order_items.order_item_id = wp_woocommerce_order_itemmeta.order_item_id
join
wp_posts
on wp_woocommerce_order_items.order_id = wp_posts.ID
where
wp_posts.post_type like 'shop%' into outfile '/var/lib/mysql-files/export-order-items-meta' CHARACTER
SET
utf8;
SQL
Once all queries are executed, you will have the following four files in /var/lib/mysql-files/ directory: export-posts, export-posts-meta, export-order-items and export-order-items-meta.
Import WooCommerce data
With all export files ready, now you can import the data to another WooCommerce-powered website. To start with, you can first sync all media items from /$docroot/wp-content/uploads. Once done, you can import the files created in the previous step. If both of your sites are on the same server (an old and a new one), you can do everything in place. If they are not, you will first have to copy the export files to a machine where you would like to import them.
Import WooCommerce users
Execute the following MYSQL queries to import WooCommerce users:
load data infile '/var/lib/mysql-files/export-customers' replace into table wp_users CHARACTER
SET
utf8;
SQL
load data infile '/var/lib/mysql-files/export-customers-meta' replace into table wp_usermeta CHARACTER
SET
utf8;
SQL
load data infile '/var/lib/mysql-files/export-wp-wc-customer-lookup' replace into table wp_wc_customer_lookup CHARACTER
SET
utf8;
SQL
Import WooCommerce orders
Execute the following MYSQL queries to import WooCommerce orders:
load data infile '/var/lib/mysql-files/export-posts' replace into table wp_posts CHARACTER
SET
utf8;
SQL
load data infile '/var/lib/mysql-files/export-posts-meta' replace into table wp_postmeta CHARACTER
SET
utf8;
SQL
load data infile '/var/lib/mysql-files/export-order-items' replace into table wp_woocommerce_order_items CHARACTER
SET
utf8;
SQL
load data infile '/var/lib/mysql-files/export-order-items-meta' replace into table wp_woocommerce_order_itemmeta CHARACTER
SET
utf8;
SQL
With this in place, you have successfully migrated customer and order WooCommerce data from one website to another. Thanks for reading!
Related Posts:
- How To Setup LVS (Linux Virtual Server) Load Balancer on Rocky Linux 8.5
- How To Install Magento 2.4 on Rocky Linux 8
- How To Install Docker on Oracle Linux Server 9
- How to Install WHM/cPanel in Almalinux?
- Configure NTP Server in Oracle Linux 9
- How To Install Ruby on Rails with PostgreSQL on Rocky Linux 8
- How To Install EMQX MQTT Broker on Rocky Linux 8
- How To Install Kamailio SIP Server on Rocky Linux 8
- How to Install and Configure RabbitMQ Server on Rocky Linux 8
- Setup Quick DNS Server On Rocky Linux 8.5 Using Dnsmasq
Latest Posts
- Server-Side Scripting: PHP, Node.js, Python – A Detailed Comparison
- Securing Your Website in 2024: Essential Strategies for Online Safety
- The Future of Web Development Technologies: Trends to Watch in 2024
- How Banks Handle Server-Side Operations and Ensure System Security: An Inside Look
- Tips for Writing Clean, Understandable, and Efficient Code: Avoiding Garbage Code
- Tailwind CSS: Revolutionizing Modern Web Design
- Basic Linux Commands for Beginners: A Starter Guide
- Dairy Farming Loan Apply
- BSNL Recharge Plan
- Bijli Bill Mafi Yojana Online Apply
Technical
- DevOps Roadmap
- How To Install and Configure an SNMP on Ubuntu 20.04
- Apple releases iOS 18 Developer Beta 2 with iPhone screen mirroring, RCS toggle,and more
- How to enable SNMP on Ubuntu Linux 18.04 and above
- How to Force HTTPS Using .htaccess (Updated 2024)
- Display All PHP Errors: Basic & Advanced Usage
- PHP alert
- MongoDB loads but breaks, returning status=14
- MongoDB database deleted automatically
- MongoDB all Error Solutions
Category