How to uprgade Magento version

Good day to Amasty blog readers! Today I’m speaking on a topic our team had many requests for: how to upgrade your Magento store correctly?

We have been talking about the importance of upgrading software a lot; it is crucial both for your server software and your Magento installation. Regular updates bring you not only the new features, but also security fixes, which is highly important for your Magento store’s safety.

Feel free to check the post on Magento security details.

Say, you see that your Magento version needs an upgrade. It’s hard to guess which version you have now, but we hope it’s 1.4.2.0 at least.

1. Prepare for Magento upgrade

To make the process more vivid we installed a shop on Magento 1.4.2.0 with sample data and we are going to upgrade it to 1.9.1.0, which is the latest stable Magento version as of this writing.

The website is installed into /home/mgtest/public_html, the database is on localhost and is called mgtest_magento. So if you use the instructions from this article, make sure you replace these values with your own ones.

2. Full Magento backup

This rule refers not only to upgrading Magento, but to any serious changes you’re going to apply on your website.

Backup your Magento store!

This is an essential procedure which saves you from unsuccessful updates, site breakdowns, data loss and makes sure the update won’t drive you up the wall.

The simplest variant of Magento backup can be implemented using these two commands:

tar -czf ~/magento-files.tar.gz -C /home/mgtest public_html

mysqldump --add-drop-table -h localhost -u mgtest -p mgtest_magento | gzip > ~/magento-db.sql.gz

Please feel free to read a detailed article on Magento backup.

In case your Magento version update goes wrong, you can easily roll everything back:

cd /home/mgtest

mv public_html public_html-BAK

tar -xzf ~/magento-files.tar.gz

gzip -dc ~/magento-db.sql.gz | mysql -h localhost -u mgtest -p mgtest_magento

3. Check system requirements

Check if your server suits minimum system requirements of the Magento version you’re upgrading to. You may want to have a look at the PHP version (5.4.x or 5.5.x is needed) and memory_limit value in php.ini in the first place.

4. Create a sandbox

Never ever update the primary website if you’re not 100% sure everything’s go. If you don’t test the update on a sandbox you won’t know if the website is going to work after the update and how much time the upgrading process will take.

Your store’s upgrade may require up to several hours, and there’s no point in shutting the primary e-shop down for the whole working day just to find out that the upgrade went wrong, the time’s lost and all you have to do is to restore the website from a backup copy. Also, remember that recovering from a backup copy takes more time than backing up itself, so count this time in.

To check if the update is going to run smoothly, let’s make a sandbox which we’re going to upgrade first. We have created an empty mgtest_staging database beforehand.

cd /home/mgtest

mkdir public_html/staging

tar -xzf ~/magento-files.tar.gz --strip-components=1 -C public_html/staging

gzip -dc ~/magento-db.sql.gz | mysql -h localhost -u mgtest -p mgtest_staging

Now it’s time to set the sandbox up:

  • Edit the database connection settings in public_html/staging/app/etc/local.xml
  • Go to mgtest_staging database, find core_config_data table and change the website’s URL. Say, the old URL was http://mgtest.local/, then the new one will be http://mgtest.local/staging/
  • If your Magento store uses Apache rewrites, then add RewriteBase /staging/ in public_html/staging/.htaccess
  • Turn compilation off at System / Tools / Compilation
  • Disable cache at System / Cache Management

Now the sandbox is ready to be upgraded.

5. Magento sandbox upgrade

Run the following commands in the console:

cd /home/mgtest/public_html/staging

chmod +x pear

./pear mage-setup

./pear upgrade -f magento-core/Mage_All_Latest-stable

chmod +x mage

./mage config-set preferred_state stable

./mage upgrade-all --force

If the previous command isn’t working, run this one:

./mage install http://connect20.magentocommerce.com/community Mage_All_Latest --force

Clear cache:

cd /home/mgtest/public_html/staging

rm -fr var/cache var/session var/full_page_cache

To finish the upgrade open the home page so Magento updates the database. This process can be lengthy, so consider doing it with the following command:

cd /home/mgtest/public_html/staging

php -f index.php

6. Test, test, test

Carefully check how your website is working. Go to Magento logs at /home/mgtest/public_html/staging/var/log and to web server logs at /var/log/httpd, /var/log/apache2 or /var/log/nginx depending on the distribution kit and the web server you use. Carefully look through the logs to catch any possible errors.

Note: please make sure that you carefully test the performance of your extensions. If you upgrade to the latest and fresh version of Magento, the chance some extensions will work with errors or conflict with each other is rising, because not all Magento extensions providers test their modules right away after the release.

7. Primary Magento upgrade

If the careful research and testing didn’t reveal any malfunctions or you have found how to fix the errors, now it’s time to update the primary website. As the process of upgrade and testing takes certain time, make a fresh backup copy of the primary website, because you don’t want to recover from an old backup copy and lose the latest changes. Before backing up switch your website to maintenance mode and disable cron.

touch /home/mgtest/public_html/maintenance.flag

crontab -u mgtest -e

Save a backup copy:

cd /home/mgtest

tar -czf magento-files.tar.gz -C /home/mgtest public_html

mysqldump --add-drop-table -h localhost -u mgtest -p mgtest_magento | gzip > ~/magento-db.sql.gz

Repeat the Magento update procedure on your main website.

We do not recommend replacing the primary website with the sandbox store, as in that case you’re in risk of losing the data that was changed or added while testing.

Done! The last part is to turn the maintenance mode off and enable cron:

rm /home/mgtest/public_html/maintenance.flag

crontab -u mgtest –e

Mission completed! Now your shop is updated to the latest stable Magento version.

Do you have any questions on Magento upgrade process? Welcome to the comments section.

Update: right now the instruction isn’t working because the http://connect20.magentocommerce.com/community  link isn’t working and we couldn’t find the replacement of it in Magento docs. As soon as we find one, we’ll update the article.