mysql chef数据库配方在大文件上失败

时间:2014-08-24 23:09:02

标签: mysql vagrant chef

" MySQL服务器已经消失了#34; HMM。

我正在使用vagrant和chef来设置我的虚拟开发环境。我几乎就在那里,但是在最后一步,当尝试执行我的外部db_setup.sql文件时,Chef失败了。我可以通过SSH执行相同的脚本并进入虚拟服务器,安装顺利。

这是我的问题代码(在cookbooks / database / recipies / mysql.rb文件中):

# Query a database from a sql script on disk
mysql_database 'run script' do
  database_name 'my_db'
  connection mysql_connection_info
  retries 3
  sql { ::File.open('/vagrant/db_setup.sql').read }
  action :query
end

该文件是6.9mb,我运行vagrant provision时收到的错误是:

==> default: [2014-08-24T16:04:53-07:00] ERROR: mysql_database[run script] 
(database::mysql line 50) had an error: Mysql::Error: MySQL server has gone away

对于它的价值,当我用一个更小,更简单的文件替换 db_setup.sql文件时,它只会创建一些空表,它会毫无困难地执行。

有什么建议吗?提前谢谢!

2 个答案:

答案 0 :(得分:1)

许多事情都可以cause this error。根据我的经验,它通常是一个超过1MB的SQL文件,或者,你的服务器my.cnf设置得非常低(60秒)的wait_timeout需要适当调整。部署my.cnf时,请尝试wait_timeout 86400和max_allowed_pa​​cket"足够"导入该文件。

例如:

 [mysqld]
 wait_timeout = 86400
 max_allowed_packet = 1GB

PS。我不建议在实际生产中使用这么高的参数。

答案 1 :(得分:0)

我解决了这个问题by getting Chef to leverage the mysql command line tool,而不是使用Ruby来阅读.sql文件。