How to Migrate from Magento 1 to Magento 2 Without Losing Data

Why Migrate from Magento 1 to Magento 2?
If you're still running Magento 1, you're playing with fire. Official support ended in June 2020, which means no more security patches or updates. Hackers love outdated systems, and you don't want to wake up to a compromised store. Magento 2 isn't just safer—it's faster, more scalable, and packed with modern features like improved checkout and mobile responsiveness.
The migration might seem daunting, but with the right approach, you can move your store without losing a single customer record or product SKU. Let's break it down step by step.
Pre-Migration Checklist
Before touching any code, prepare your battlefield:
- Backup everything - Database, files, custom code, the works.
- Inventory your extensions - Many M1 extensions won't work on M2.
- Clean house - Remove unused products, categories, and test orders.
- Check server requirements - M2 needs PHP 7.4+, MySQL 8.0+, and more resources.
Step 1: Set Up Your Magento 2 Environment
Install a fresh Magento 2 instance on a staging server (never migrate directly on production). Here's a quick Composer command to get started:
composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition=2.4.6-p1 /var/www/magento2
Configure your env.php
with the correct database connection details. Pro tip: Use the same database credentials as your M1 store during migration to avoid connection issues.
Step 2: Install the Data Migration Tool
Magento provides an official tool that handles most of the heavy lifting:
composer config repositories.magento composer https://repo.magento.com
composer require magento/data-migration-tool:2.4.6
Copy the config files from the migration tool to your Magento 2 root:
cp -r vendor/magento/data-migration-tool/etc/* app/code/Magento/DataMigrationTool/etc/
Step 3: Configure the Migration Settings
Edit config.xml
in the migration tool's etc/ce-to-ce
folder (use ce-to-ee
if moving to Enterprise Edition). Here's a sample configuration:
<source>
<database host="localhost" name="magento1_db" user="magento_user" password="securepassword"/>
</source>
<destination>
<database host="localhost" name="magento2_db" user="magento_user" password="securepassword"/>
</destination>
<options>
<crypt_key>your_magento1_encryption_key</crypt_key>
<map_file>etc/ce-to-ce/1.9.3.2/map.xml</map_file>
</options>
Step 4: Run the Migration in Stages
The migration happens in three phases:
- Settings - Migrates system configuration and websites/stores
- Data - Moves products, categories, customers, orders, etc.
- Delta - Captures changes made during migration
php bin/magento migrate:settings --reset vendor/magento/data-migration-tool/etc/ce-to-ce/config.xml
php bin/magento migrate:data --reset vendor/magento/data-migration-tool/etc/ce-to-ce/config.xml
php bin/magento migrate:delta vendor/magento/data-migration-tool/etc/ce-to-ce/config.xml
Each step can take hours for large stores. Use --reset
only on the first run.
Handling Custom Code and Extensions
This is where most migrations stumble. Your custom modules and themes need to be:
- Rewritten for Magento 2's architecture
- Tested thoroughly before going live
- Replaced with M2 equivalents where possible
For example, a simple M1 module's config.xml
:
<config>
<modules>
<Magefine_Example>
<version>1.0.0</version>
</Magefine_Example>
</modules>
</config>
Becomes in M2:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Magefine_Example" setup_version="1.0.0">
<sequence>
<module name="Magento_Catalog"/>
</sequence>
</module>
</config>
Post-Migration Tasks
After successful migration:
- Reindex everything:
php bin/magento indexer:reindex
- Flush cache:
php bin/magento cache:flush
- Test checkout process with real orders
- Set up 301 redirects for old URLs
- Configure cron jobs for M2
Common Pitfalls and Solutions
Issue | Solution |
---|---|
Duplicate URLs after migration | Run URL rewrite generator: php bin/magento catalog:url:rewrite:regenerate |
Missing product images | Manually copy media folder from M1 to M2's pub/media |
Customer passwords not working | Install our Password Migration Tool |
Performance issues | Enable Varnish and Redis caching |
When to Consider Professional Help
While the migration process is documented, complex stores often hit unexpected issues. Consider our Magento Migration Service if:
- You have over 10,000 products
- Custom workflows or ERP integrations
- Multiple international stores
- Limited technical resources
Migrating to Magento 2 is like moving to a bigger, better house—it's disruptive but worth it. Take it step by step, test thoroughly, and soon you'll enjoy all the benefits of a modern eCommerce platform.
Got stuck? Our Magento experts have migrated hundreds of stores successfully. Drop us a line!