SQL script to migrate from Movable Type to WordPress
While trying to migrate a large blog from Movable Type to WordPress, I found the built-in export and import functionality unable to handle volume of content on the blog or to properly preserve the primary keys needed for permalinks.
With assistance from Alvaro on the MisesDev list, we came up with the following MySql SQL script to import the entries directly from the Movable Type (5.01) database to WordPress (2.9.2). What would take many hours otherwise can be done in a minute or two. This is especially important if you don’t want to lose data during the time it takes to migrate the blog, as the script can be run immediately before the switch. This script also includes additional stuff like IP addresses and url-friendly names.
Change the MT database name in the script below:
USE `WordPress`; /* !!! Truncate tables to prevent primary key conflicts !!! */ TRUNCATE TABLE wp_posts; TRUNCATE TABLE wp_comments; TRUNCATE TABLE wp_users; /* users from author */ INSERT INTO wp_users ( ID, user_login, user_pass, user_nicename, user_email, user_url, user_registered, /* user_activation_key, */ user_status, display_name ) (SELECT author_id, author_name, author_password, /* fingers crossed */ IF (author_basename IS NOT NULL,author_basename,author_name) , author_email, IF (author_url IS NOT NULL,author_url,' '), author_created_on, /* user_activation_key, */ author_status, IF (author_nickname IS NOT NULL,author_nickname,author_name) FROM mtutf.mt_author); /* post from entry */ INSERT INTO wp_posts ( ID, post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, /* post_password */ post_name, post_modified, post_modified_gmt, /* --post_modified_gmt, */ /* --post_content_filter, */ /* --post_parent, */ /* --guid, */ /* --menu_order, */ /* --post_type, */ /* --post_mime_type, */ comment_count, to_ping, pinged ) ( SELECT entry_id, entry_author_id, entry_created_on, CONVERT_TZ(entry_created_on,'+00:00','-06:00'), /* GMT */ CONCAT(entry_text,'<!--more-->',entry_text_more) , entry_title, entry_excerpt, TRIM(CAST(entry_status AS CHAR)), TRIM(CAST(entry_allow_comments AS CHAR)), TRIM(CAST(entry_allow_pings AS CHAR)), /* --post_password */ entry_basename, /* --to_ping */ /* --pinged */ entry_modified_on, CONVERT_TZ(entry_modified_on,'+00:00','-06:00'), /* -- post_modified_gmt, */ /* --post_content_filter, */ /* --post_parent, */ /* --guid, */ /* --menu_order, */ /* --post_type, */ /* --post_mime_type, */ entry_comment_count, '', '' FROM mtutf.mt_entry); INSERT INTO wp_comments ( comment_ID, comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_date_gmt, comment_content, /* comment_karma, junk_score? */ /* comment_approved, comment_junk_status?? */ /* comment_agent, */ /* comment_type, */ comment_parent, user_id ) ( SELECT comment_id, comment_entry_id, comment_author, comment_email, comment_url, comment_ip, comment_created_on, CONVERT_TZ(comment_created_on,'+00:00','-06:00'), /* comment_date_gmt, */ comment_text, /* comment_karma, */ /* comment_approved, */ /* comment_agent, */ /* comment_type, */ comment_parent_id, comment_created_by FROM mtutf.mt_comment WHERE comment_junk_status = 1); UPDATE wp_posts SET post_status = 'publish', comment_status='open', ping_status='open'; /* More... */ UPDATE wordpress.wp_posts, mises_blog.mt_entry SET post_content = CONCAT(CONCAT(entry_text,'<!--more-->'), entry_text_more) WHERE LENGTH(entry_text_more) > 0 AND mises_blog.mt_entry.entry_id = wp_posts.id /* Specific to our DB: */ UPDATE wordpress.wp_posts SET guid = CONCAT('http://blog.mises.org/archives/', RIGHT(CONCAT('000000', ID),6), ".asp"); /* Set User Contributor Levels */ INSERT INTO wp_usermeta ( user_id, meta_key, meta_value ) ( SELECT id, 'wp_user_level', 1 FROM wp_users WHERE id NOT IN (2,295,3) ); INSERT INTO wp_usermeta ( user_id, meta_key, meta_value ) ( SELECT id, 'nickname', display_name FROM wp_users WHERE id NOT IN (3,295) ) INSERT INTO wp_usermeta ( user_id, meta_key, meta_value ) ( SELECT id, 'wp_capabilities', meta_value = 'a:1:{s:6:"author";b:1;}' FROM wp_users WHERE id NOT IN (2,295,3) )
![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=394ce66e-aa4c-41a7-938f-79c4cef70b8f)
[...] Shared SQL script to migrate from Movable Type to WordPress | Dot Mac. [...]