" 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文件时,它只会创建一些空表,它会毫无困难地执行。
有什么建议吗?提前谢谢!
答案 0 :(得分:1)
许多事情都可以cause this error。根据我的经验,它通常是一个超过1MB的SQL文件,或者,你的服务器my.cnf设置得非常低(60秒)的wait_timeout需要适当调整。部署my.cnf时,请尝试wait_timeout 86400和max_allowed_packet"足够"导入该文件。
例如:
[mysqld]
wait_timeout = 86400
max_allowed_packet = 1GB
PS。我不建议在实际生产中使用这么高的参数。
答案 1 :(得分:0)
我解决了这个问题by getting Chef to leverage the mysql
command line tool,而不是使用Ruby来阅读.sql
文件。