I've done some major migrations - including for Sloan (3.4 to 4.x) and from Oracle to Postgres for Guatamela (3.4 to 5.x)
Since the data model is fairly complex and doesn't always involve a 1-to-1 table mapping and involved various business logic, I built an engine that would
a) first query the old site for a given type of data (user, group, group membership, forum post, etc)
b) use the APIs of the new site to recreate the data
c) store various mappings like the user id in the old system to the user id in the new system. This allowed me to port things like the author of the bboard message