Q:

Defacto method of upgrading magento

What, if any, is the defacto standard method of upgrading Magento to a new version.
I know there are lots of variables in play.  But there surely must be a standard set of steps that must be followed.
So far, i think it goes like:
Create a mirror of the site
Disable all 3rd party modules
Do the upgrade
Fix any issues
Enable 3rd party modules
Fix any issues

But i would be interested to hear for others that have gone through this process and have experience on exactly what to do here as there is so many conflicting information out there.

A:

Our database was around 10 gigs and we have about 800,000 "products" (many of those are actually options in a bundled product but it amounts to the same thing in most cases). So this may not be necessary for you... We upgraded from 1.9 to 1.12 a few weeks ago. I did numerous dress rehearsals where I had to fix bad data along the way. 

Make sure you are the only one able to hit the server. For instance let apache listen on a strange port. 
Our upgrade from 1.9 to 1.12 took ~ 3.5 hours so extend your timeouts accordingly. 

I had to modify a few core files to turn off unique and foreign key checks. You are supposed to be able to do this via modifying config.xml or local.xml but this did not work for us. 
./app/code/core/Mage/Core/Model/Resource/Type/Db/Pdo/Mysql.php:  
$configArr['initStatements'] = 'SET NAMES utf8; SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0;';

./app/code/core/Mage/Core/Model/Resource/Type/Db/Mysqli.php:     
$configArr['initStatements'] = 'SET NAMES utf8; SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0;';

./app/code/core/Mage/Core/Model/Resource.php:       
$config['initStatements'] = 'SET NAMES utf8; SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0;';

Database queries I needed to run 
-- Log tables to truncate
truncate log_url;
truncate log_url_info;
truncate log_visitor;
truncate log_visitor_info;
truncate log_visitor_online;

-- Truncate other large unnecessary tables
truncate op_imagecdn_cache;
truncate core_session;
truncate report_viewed_product_index;
truncate report_compared_product_index;
truncate core_cache;
truncate core_cache_tag;

-- Delete old quotes
DELETE FROM sales_flat_quote WHERE updated_at < DATE_SUB(Now(),INTERVAL 60 DAY);

truncate core_url_rewrite; -- You may not want to do this. We had 2.5 million entries...
truncate report_event;
truncate index_process_event;
truncate index_event;
truncate amazonpayments_api_debug;

-- drop all flat category and flat product tables 
drop table catalog_category_flat_store_1; -- etc.

drop table catalog_product_flat_1; --etc. 

Afterwards run your indexers. 

