Last updated March 21, 2013. Created by twom on May 4, 2012.
Edited by Frank Ralf, Kristen Pol, hanamizuki, junedkazi. Log in to edit this page.

Typically when migrating content, drush is your friend. Drush commands are provided for managing the migration process. Individual migrations can be imported and then rolled back. Running processes can be cleanly interrupted, individual source records can be migrated on their own, and performance can be instrumented.

drush help --filter=migrate provides a complete list of relevant commands

All commands in migrate: (migrate)

migrate-analyze (maz) Analyze the source fields for a migration.
migrate-audit (ma) View information on problems in a migration.
migrate-auto-register (mar) Register any newly-defined migration classes
migrate-deregister Remove all tracking of a migration
migrate-fields-destination (mfd) List the fields available for mapping in a destination.
migrate-fields-source (mfs) List the fields available for mapping from a source.
migrate-import (mi) Perform one or more migration processes
migrate-mappings (mm) View information on all field mappings in a migration.
migrate-messages (mmsg) View any messages associated with a migration.
migrate-reset-status (mrs) Reset a active migration's status to idle
migrate-rollback (mr) Roll back the destination objects from a given migration
migrate-status (ms) List all migrations with current status.
migrate-stop (mst) Stop an active migration operation
migrate-wipe (mw) Delete all nodes from specified content types.

For examples on the options type:
$drush help <command>

Help text from:
drush mi --help

migrate-import Article
Import new articles

migrate-import Article --update
Import new items, and also update previously-imported items

migrate-import Article --idlist=4,9
Import two specific articles. The ids refer to the value of the primary key in base table

migrate-import Article --limit="60 seconds" --stop --rollback
Import for up to 60 seconds after stopping and rolling back the Article migration.

migrate-import Article --limit="100 items"
Import up to 100 items from the migration named Article.

migrate-import User --feedback="1000 items"
Display a progress message every 1000 processed items or less

migrate-import --all=User
Perform User migrations and all that follow it.

Name of migration(s) to import. Delimit multiple using commas.

Process all migrations that come after the specified migration. If no value is supplied, all migrations are processed.

Frequency of progress messages, in seconds or items processed

Override file function to use when migrating images.

Force an operation to run, even if all dependencies are not satisfied

Name of the migration group to run

A comma delimited list of ids to import or rollback. If unspecified, migrate imports all pending items or rolls back all items for the content set.

Capture performance information (timer, memory, or all)

Limit on the length of each migration process, expressed in seconds or number of items

Reimport up to 10K records where needs_update=1. This option is only needed when your Drupal DB is on a different DB server from your source data. Otherwise, these records get migrated with just migrate-import.

Rollback specified migration(s) if applicable.

Stop specified migration(s) if applicable.

In addition to processing unimported items from the source, update previously-imported items with new data

Looking for support? Visit the forums, or join #drupal-support in IRC.


This may not be obvious if you've never used drush before:

drush runs at the command prompt on the same machine as your drupal files reside on, you'll need command line access to that machine (like ssh).

cd to the directory where your site is and run drush there. Once you're current working directory is somewhere inside the directory which contains your drupal site, drush is now working with your site.

+1, mgrant! Your post was incredibly helpful as this was exactly the issue I was facing!

Turns out you can cherry-pick specific, individual source records to migrate (so you don't have to sit through an entire migration whilst debugging) with, for example:

drush mi LibraryDocument --idlist=48,52,108

to pull in only (in my case) Drupal 6 nids 48,52, and 108

..happiness is point and click..