title: migrating from postgres to mysql causing strange errors Mysql2::Error: MySQL server has gone away
body: <p>I'm switching the database of a rails 3.0.3 app I have developed from 
  postgres to mysql so that I can avail of amazon's rds. Before I make 
  the change I have been running my test code using mysql on my dev 
  machine with the mysql2 adaptor . My test code is throwing up some 
  errors that I haven't quite been able to get to the bottom of yet. 
  Basically I have a model that is used to store large xml uploads. My 
  test code looks something like this </p>
  
  <pre><code>test "xml upload for large file" do 
    file = File.new("test/files/lib/upload_sample.xml") 
    upload = XmlUpload.create(:xml_contents =&gt; contents = file.read) 
    ..... 
    ..... 
  end 
  </code></pre>
  
  <p>The create line is throwing up the following error </p>
  
  <pre><code>ActiveRecord::StatementInvalid: Mysql2::Error: SAVEPOINT active_record_1 does not exist:     ROLLBACK TO SAVEPOINT active_record_1 
  /Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/connection_adapters/abstract_adapter.rb:202:in `rescue in log' 
  /Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract_adapter.rb:194:in `log' 
  /Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/mysql2-0.2.6/lib/ active_record/connection_adapters/mysql2_adapter.rb:314:in `execute' 
  /Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/mysql2-0.2.6/lib/ active_record/connection_adapters/mysql2_adapter.rb:358:in `rollback_to_savepoint' 
  /Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/connection_adapters/abstract/database_statements.rb: 149:in `rescue in transaction' 
  /Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/  active_record/connection_adapters/abstract/database_statements.rb: 127:in `transaction' 
  /Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/transactions.rb:204:in `transaction' 
  /Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/transactions.rb:287:in `with_transaction_returning_status' 
  /Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/transactions.rb:237:in `block in save' 
  /Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/transactions.rb:248:in `rollback_active_record_state!' 
  /Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/transactions.rb:236:in `save'  
  ....
  </code></pre>
  
  <p>I have been storing the file contents in a text field.  I realise that 
  I should seriously look at storing the files in s3 but this is the 
  setup that I have at the moment.  In postgres everything worked fine 
  but in order to get things to work with mysql I had to set the :limit 
  variable so that LONGTEXT was used instead of  the standard text 
  field. The files can be quite large but when I test using small files 
  there are no problems </p>
  
  <p>I could be barking up the wrong tree entirely but I suspect that the 
  problem may be caused by the database connection being dropped based 
  on the errors thrown up when I try uploading a file in the development 
  mode. I did some checking on this error and I'm not sure what could be dropping the connection, the file isn't taking 8 hrs (the default connection drop time) to insert</p>
  
  <p>Mysql2::Error: MySQL server has gone away: INSERT INTO <code>xml_uploads</code>  ........</p>
  
  <p>My database.yaml settings are the following. </p>
  
  <pre><code>test: 
     adapter: mysql2 
     encoding: utf8 
     reconnect: true 
     database: app_test 
     username: username 
     password: password 
     host: localhost 
  </code></pre>
  
  <p>Does anyone have any clues as to what the problem is and how it can 
  fixed? Any help with this would be greatly appreciated.</p>