« Movable Type 3.3 is here! | Main | How to Build Blog Traffic - Community »

A Safe Way to Upgrade to MT 3.3

I posted similar instructions a year ago for upgrading to MT3.2.

Six Apart encourages us to write-over our existing MT files with the new software files in order to upgrade to the new version of software. (As of this writing, there were no specific upgrade instructions for MT3.3 posted at Six Apart. You might want to take a look at the older Installation and Upgrade instructions for MT3.2. 40-plus pages of installation instructions for MT3.3 are available at Movable Type Documentation.) Also review MT3.3 Platform Changes for a list of things that have changed that may cause compatibility issues.

Instead of over-writing existing files, a safer approach is to create a new MT directory. That way if the install doesn't work for some reason, you can revert to using the original mt.cgi path for getting into MT edit. If you have questions regarding your install I encourage you to post them at the MT Support forums.

  1. Do not attempt to do an upgrade late at night when you are about to go to sleep and no one on earth is awake who can help you if you screw up.
  2. There have been some changes to the MT platform, including incompatibility with the BigPAPI plugin. See http://www.sixapart.com/movabletype/docs/3.3/mt33_platform_changes.html for a description of the changes. According to Six Apart, "you should disable BigPAPI and any BigPAPI pluginsfrom the System Overview plugin listing unless you have updated them with a Movable Type 3.3 compatible version." Update any plugins you have installed with their newest MT3.3 compatible versions.
  3. Back up your database. (See Backing Up Your Blog).
  4. Create a new directory on your server for the MT3.3 program files. If your existing MT files are in a directory called "mt", label this new directory something like "mt33" or "mt331", so you can tell the difference.
  5. Download the full version (or upgrade version, they're the same now) of MT3.3 from Six Apart.
  6. Upload the files to the new directory. If your new directory is in the cgi-bin, make sure you upload the mt-static directory outside of the cgi-bin, to somewhere in your public_html directory. Upload the images in the mt-static directory as binary files. Upload all other files as text.
  7. Copy all your plugins to the new plugin directory in the new MT directory. Many plugins also have files outside of the plugin directory (Brad Choate's for example). These can usually be found in the extlib directory. Plugin files can also sometimes be found in the php directory. Copy these from your old MT directory to the new MT directory in the same place - if they are in the extlib directory, copy them to the new extlib directory. Note: do not copy over plugins that exist in the new MT distribution, for example, the no follow plugin.
  8. If you have made custom search templates, copy those over to the new search template directory. If you are planning on using the tags feature in MT3.3, take a look at the new default search template first. There's a new block of code that shows different stuff if visitors are searching for tags and not just content.
  9. Compare your old mt-config.cgi settings to the new settings in mt-config.cgi-original. Using a text editor, like BBEdit, copy the relevant settings over to the new config file. Put your DB password in the new mt-config.cgi-original where indicated. Note that you should have a new cgi path on the config file, as you have put your MT files in a new directory. Also note the default encoding on the new config file (UTF-8). Make sure that it is consistent with the encoding you are already using. If you have changed the names of your comment and trackback cgi files, reflect that in your config file and make sure the new comment and trackback files have the changed names. A complete listing of MT Configuration Directives can be found here. Copy over directives from your old mt-config.cgi file that are not default directives into your new mt-config.cgi-original file. Note that the default directives are no longer listed or commented upon in the new config file.
  10. Change the name of mt-config.cgi-original to mt-config.cgi. Set permissions of the cgi files to 755, with the exception of the mt-config.cgi file. Set the permissions of mt-config.cgi to 644. Note that there is also a .cgi file in the plugins > Style Catcher folder - the stylecatcher.cgi. You will need to set the permissions of this file to 755 as well, if you intend to use this plugin.
  11. Point your web browser to the location of the new mt.cgi file. The program should automatically recognize that you are doing an upgrade and it should prompt you to upgrade. If this doesn't happen, make sure you have done all the previous steps. You might also want to clear your browser cache before pointing to the new mt.cgi file.
  12. Rebuild all of your blogs. If you use dynamic publishing, make absolutely sure that you rebuild the mtview.php (Dynamic Site Bootstrapper) or it will be pointing to the wrong place.
  13. Note that if you are using TypeKey authentication, you will need to do a template refresh of your Site JavaScript template. You can do so from your template listing by selecting the template and then selecting "Refresh Template(s)" from the itemset actions dropdown menu on the right side of the action bar. After you refresh the template, you will need to save and rebuild it.
  14. Once everything is working, remove permissions from your old CGI scripts. After you have completed your upgrade change the permissions of the current mt-upgrade.cgi to 644.

If you would like professional assistance with your Movable Type upgrade or installation, please contact Chad Everett of Everitz Consulting at info{at}everitz.com for a price quote.

Comments (38)


I got this problem with my upgrade, I didn't follow your steps because I made the upgrade thinking that nothing wrong will happen. I post a new topic on the sixapart forums but today I found it down.

Tell me if you can have any idea of this when I'm trying to post a new post or comment:

unknown column: authored_on for class MT::Entry at lib/MT/Object.pm line 283 MT::Object::AUTOLOAD('MT::Entry=HASH(0x9394c3c)') called at lib/MT/Template/ContextHandlers.pm line 1360 MT::Template::Context::_hdlr_entries('MT::Template::Context=HASH(0x93968b8)','HASH(0x907df54)','HASH(0x8e9805c)') called at lib/MT/Builder.pm line 165 MT::Builder::build('MT::Builder=HASH(0x8a13e78)','MT::Template::Context=HASH(0x93968b8)','ARRAY(0x938c148)','HASH(0x8e9805c)') called at lib/MT/Template.pm line 86 MT::Template::build('MT::Template=HASH(0x9396774)','MT::Template::Context=HASH(0x93968b8)','HASH(0x8e9805c)') called at lib/MT/WeblogPublisher.pm line 522 MT::WeblogPublisher::rebuild_file('MT::WeblogPublisher=HASH(0x8eaa25c)','MT::Blog=HASH(0x8eaa37c)','/home/wr276co/public_html/bitacora/archivo/','MT::TemplateMap=HASH(0x93925f8)','Monthly','MT::Template::Context=HASH(0x93968b8)','HASH(0x8e9805c)',1,'Category',...) called at lib/MT/WeblogPublisher.pm line 392 MT::WeblogPublisher::_rebuild_entry_archive_type('MT::WeblogPublisher=HASH(0x8eaa25c)','Entry','MT::Entry=HASH(0x8ea5c00)','Blog','MT::Blog=HASH(0x8eaa37c)','ArchiveType','Monthly','NoStatic','undef',...) called at lib/MT/WeblogPublisher.pm line 182 MT::WeblogPublisher::rebuild_entry('MT::WeblogPublisher=HASH(0x8eaa25c)','Entry','MT::Entry=HASH(0x8ea5c00)','BuildDependencies',1,'OldPrevious','','OldNext','',...) called at lib/MT.pm line 685 MT::rebuild_entry('MT::App::CMS=HASH(0x87b81c8)','Entry','MT::Entry=HASH(0x8ea5c00)','BuildDependencies',1,'OldPrevious','','OldNext','',...) called at lib/MT/App/CMS.pm line 7738 MT::App::CMS::rebuild_pages('MT::App::CMS=HASH(0x87b81c8)') called at lib/MT/App.pm line 664 eval {...} called at lib/MT/App.pm line 617 MT::App::run('MT::App::CMS=HASH(0x87b81c8)') called at lib/MT/Bootstrap.pm line 47 eval {...} called at lib/MT/Bootstrap.pm line 42 MT::Bootstrap::import('MT::Bootstrap','App','MT::App::CMS') called at /home/wr276co/public_html/cgi-bin/movabletype/mt.cgi line 11 main::BEGIN() called at lib/MT/Bootstrap.pm line 11 eval {...} called at lib/MT/Bootstrap.pm line 11

If you can help in any way, I'll thank you...

This is almost certainly a plugin error. What plugins are you using?

By the way, if you have a paid license, you would be best off filing a help ticket at http://secure.sixapart.com/t/help

This is the list:

Better File Uploader Version 1.03
BigPAPI Version 1.04
Blogroll, v1.00
FeedBurner Version 1.0RC1
Feeds.App Lite Version 1.0
Nofollow Version 2.0
StyleCatcher Version 1.1
SubCategories v. 1.2
Template Backup and Refresh Version 1.1
Widget Manager Version 1.0
SpamLookup - Lookups Version 2.1
SpamLookup - Link Version 2.1
SpamLookup - Keyword Filter Version 2.1

I don't have a paid license... :(

As mentioned in the tutorial, the Big PAPI plugin (and any plugins that need it) is not compatible with MT 3.3. Blogroll v1.0 is not compatible. Neither is Multiblog. Both Blogroll and Multiblog have newer versions that are compatible; you'll need to install the new versions.

Yes, completely disable BigPAPI and, unless I'm missing something, the SubCategories plugin which has been native in MT since 3.1. You also don't need ifempty as of MT 3.2 and exclude_cats as of 3.3.

An updates is forthcoming for Better File Uploader.

I believe that the latest Multblog is compatible and Blogroll also has a compatible version.

The following should be compatible, but I haven't tested each.

* Compare plugin
* FeedBurner plugin
* FilterCategories
* RelatedEntries
* SmartyPants
* perlscript
* switch
* textile2
* validable

And these are bundled so we know they are compatible:

* Feeds.App Lite
* Nofollow
* StyleCatcher
* Template Backup and Refresh
* Widget Manager
* SpamLookup

Brad Choate Author Profile Page:

WR276 / WR726... do you have an 'entry_authored_on' column in your mt_entry table? The stack trace you give makes it look like the error is coming from the ContextHandlers module; is it possible you have a patch in that module that is causing the problem? I can't find any 'authored_on' phrase in that file (lib/MT/Template/ContextHandlers.pm).

There is no such column in that table.

The MT Support Forums are back online (after being offline for several days), so if you have any questions regarding your upgrade, please make them on the forums.

hi Elise! thanks for the help! read your post only while I was already uploading the files, so I overwrite the old ones. happily everything went ok. but without your permissions tip, I would get stuck on a 500 Internal Server Error message. can't believe this is not on the docs! (and hey, what happened do them? Six Apart used to be very careful on the documentation... or am I too 'amateur'?)

hm... now it seem I have a problem with portuguese characters... again. gonna try to work it out. thanks again!

domino Author Profile Page:

Once again, a huge thank you for writing this. I used your 3.2 instrucitons last time, and it was so much easier! Plus, as you mention, the MT documentation is scarily bereft of upgrade info..

omar Author Profile Page:

Ditto everything domino said. I've been suggesting this site to everyone I know who is looking to start a blog with MT.

Thanks for this!

Virtual directories: I stumbled across this trick for managing the migration switch over. Once I was happy with the 3.3 install, I edited my virtual directory settings, changing the physical directory from /mt32 to the new /mt33 one, keeping the same public ..domain.com/mt/mt.cgi admin URL.

(Of course I originally had this virtual directory setup because of my IIS/CGI errors - I'm hosting on Win2003. My hoster's HELM interface made the editing even easier.)


I use custom fields extensively now and I guess my main concern is that they might disappear entirely if I do this upgrade... particularly since I leave them in the plug-in instead of using the database option.

Anyone have any experience with that?

Hi Tony,
That's a great question for the forums. Please let us know what you find out.


I know this is a stupid question, but better to be safe than sorry.

When I have made my update, and it seems to work, can i then delete the old /mt/ archive that I have replaced with the new /mt33/? Or do I need both when using your great upgrade tutorial?

Hi Tomas,
You can delete the old directory. But I wouldn't right away.
Problems and issues have a way of cropping up unexpectedly. I think I waited at least 6 months after my upgrade to MT3.2 before I deleted the earlier directory. Will likely do the same with this upgrade to MT3.3.

Hello Elise and thanks for your answer.
I put the old cgi-files to 644, hopefully that will stop any sort of interference from the old version.

And the old static files I can delete? I posted in MT forums on a problem I get after upgrading with moving contents to a new blog. My guess -but that is not a good one - is that it must be something from the old installation that is interfereing since it does not work,

Hi Thomas,
Check your configuration file and make sure that the path to the mt-static file is correct.
That file should be outside of the cgi-bin by the way.
When I did my upgrade, my static files were located in a folder in the public_html directory of my site. The mt-static folder did not change locations, but I uploaded all the new files to it (overwriting the previous files). You can do it this way, or you can give it a different location than your previous folder, just make sure that the correct path is in the new configuration file.


Thanks for the great instructions, this is the first time I've upgraded my install all by myself. (Until I forgot to enable suexec on the new directory...but that doesn't count since I'm not the one who decided to run it under suexec in the first place!)

You rock, thanks for doing this write up. I used your instructions for 3.2 last time as well.

Nice job!


Hi Elise, this will be my first time upgrading MT and it will be from MT 2.661 to MT 3.3, do you think I should be expecting problem with this upgrade since it is a from quite an old version?

And after reading your instruction of installing MT 3.3 on new directory and rebuild the site, won't the new rebuild page overwrite the old ones? Or it's actually what suppose to happen?

Thank you in advance.


Great instructions. I'm getting 500 errors all over the place with my install. I did the whole new directory upgrade - like you suggested - and while I can login to MT, create entries, rebuild ... and that all works -- the actual pages it rebuilds show 500 errors.

I have tried everything I can think of ... but nothing seems to work.

Elise, Thanks for doing these step by steps on upgrades, they are a great help.

I have a question regarding step #7 - copying plugins. I posted it on the forums, but haven't gotten an answer yet.

For the plugins that require an upgrade, what order should I do this? Many of these upgrades require running a cgi file after the plugin files are uploaded.

  • Should I complete the MT upgrade and then install the new plugin versions? If so, should I copy over the old, non-3.3 plugins to the MT 3.3 directories before the MT upgrade or just leave them out?
  • OR - Should I upgrade my plugins in 3.2 first, then upgrade MT?
  • Does it matter?
  • Am I being paranoid? :-)

I'm particularly concerned about loosing or corrupting any plugin data stored in my database.


Hi Salguod. If you have followed the upgrade instructions to create a new directory for your MT3.3 what I would do is copy all the plugins from your old install to the new one. Then find the plugins that need to be upgraded and install those new files in the new directory. Remove the BigPAPI plugin if you are using it.

Don't upgrade your plugins in your MT3.2 install. There's no point and they most likely won't work. If something goes wrong with your MT3.3 install, you want to fall back on a working install.

Thanks, Elise. Got an answer from you and Lisa on the forums at about the same time. :-D

That's a good point about not mucking up the old install in case I make a mess.

There's also the WidgetManager cgi file in the plugins folder to change permissions on.


Thank goodness for you, Elise!

Of course, I was a bad girl, and copied over all the files into my cgi-bin thinking, "Well, they have no instructions that say otherwise, and I can't find anything about this on Google or Six Apart's site..." and I didn't back up the files I had there, figuring at least my actual entries wouldn't be lost. So when I tried to call up the page, naturally it didn't work... A post on a Six Apart forum is what led me here.

Your post was so well thought out and written... so easy for me to follow. I can't thank you enough. Since I'd already copied everything over with Fetch FTP, The key for me was to move mt-static to my site root (I'd forgotten about that!) and then change the permissions as you instructed, rename the mt.cgi file and then rebuild my blogs! After that, I went through the upgrade and everything works perfectly. I like the new features and am eager to dig in to it.

If I had not found that link to this page, I would have no doubt either been sitting there for several more hours before deciding to re-install from scratch. Instead, I found your article and was done in about 20 minutes, including upload time. THANK YOU!!!!!

- Jaye

I also just can thank you for your good and detailed explanations. I was following also your sugegstions and did a parallel installation of mt3.3 to my existing mt3.2 one. All details I desribe in my blog www.sauerzapfe.com German language. Best wishes Ulli


Do I NEED to transfer over my plugins from my old version of MT to the new one? Could I just start over with downloading them once I have 3.33 set up? That seems easier than digging through all of the folders (Plugins, Extlib, PHP) that could have plugins in them, looking for things that sound familiar. Will it break things if I do it that way, do you think?

Hi Sarah,
You could download the new plugins if you want. It's probably easier to copy them from the other directory.

Hi Elise,

As usual, you do a great job of making the most daunting (whether perceived or purely so) task easy and clear. Just used your suggestions on upgrading to version 3.34 and it went flawlessly. I've always dreaded the MT upgrade process every time I've done it, but I'll be following your suggestion of creating a new directory with all my clients for this version upgrade. The only mistake I made was my own - not paying attention to the need stated in the new mt-config.cgi to delete all other database sections EXCEPT the one being used. Got a database error upon entering the new path in the browser, but after fixing the mt-config.cgi problem and refreshing the browser, the upgrade process was seamless. Thanks again.


Thanks very much for these instructions - they worked perfectly, apart from one glitch caused by MediaTemple Grid Server hosting (Movable Type was an add-on they offered as part of their old Shared Server hosting, and they've since changed to WordPress).

After following the instructions and going to mt.cgi, I was getting a 403 error. I had a look in the old MT directory and there was an .htaccess file there - I copied that across to the new directory and it worked.

A KnowledgeBase article for Shared Server hosting on MediaTemple also said that there needed to be an explicit line in the .htaccess file about Symlinks (whatever they are) if you wanted to use dynamic templates, so I included that as well for the future, even though I don't use dynamic templates.

So the whole .htaccess file looked like this:

<Files mt.cfg>
        <Limit GET POST>
        deny from all
<Files mt-db-pass.cgi>
        <Limit GET POST>
        deny from all
Options +ExecCGI
AddHandler cgi-script .cgi
Options -Indexes +FollowSymlinks

Thanks for the clear details. Moving at a very careful pace, I followed your instructions and was totally updated in 30 minutes. After having gone through it once, I'm sure I could do it now in maybe 5.

The only thing not on your list that I had to do was update the bookmark in my browser that points to my mt.cgi file (now in the new mt335 directory).

just a very simple question.
Is this tutorial also applicable to upgrade from version 3.33 to 3.35 exactly as it is?
Thanks and Regards


Thank you so much - I'd been tearing my hair out over the official MT instructions (or lack thereof), and this helped me upgrade from 3.17 in less than half an hour with no problems whatsoever. Fantastic.


Trying to upgrade from MT 3.2 to 3.65. But I keep getting the following error msg when I run the mt-upgradecheck.cgi: Upgrade was not successful, or you have no authors. Not sure what to do next to correct this.

Hi Ady -

I'm not sure what version 3.65 is - 3.35 was the last of the 3.35 branches, at least as of this writing, and it did not come with a file named mt-upgradecheck.cgi.

If you haven't already, you may want to contact Six Apart directly for assistance in troubleshooting your issue. While the mt-check.cgi can help, it sounds like you might have a problem of some sort that is beyond general knowledge.

Gene Boggs:

Not so simple for me. I have a stock (i.e. unmodified with no extra plugins) MT3.3 + sqlite3, that seg-faults when upgrading to MT4.01. Yay!

$ perl ./tools/upgrade --name gene
upgrade -- A command line tool for upgrading the schema for Movable Type.
* Upgrading database from version 3.3.
* Upgrading table for Entry records...
* Populating default file template for templatemaps... (100%)
* Merging comment system templates...
Segmentation fault (core dumped)

I guess it is time to put on my kevlar debugging suit... :\

Post a comment

(If you haven't left a comment here before, your comment may need to be approved before will appear on the entry. Thanks for waiting.)