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

标签 mysql vagrant chef-infra

“MySQL 服务器已经消失”。嗯。

我正在使用 vagrant 和 chef 来设置我的虚拟开发环境。我快到了,但在最后一步, Chef 在尝试执行我的外部 db_setup.sql 文件时失败了。我可以通过 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

就其值(value)而言,当我用一个更小、更简单的文件替换 db_setup.sql 文件时,它只创建了几个空表,它执行起来没有困难。

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

最佳答案

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

例如:

 [mysqld]
 wait_timeout = 86400
 max_allowed_packet = 1GB

附言。在实际生产中我不会推荐这么高的参数。

关于mysql chef 数据库配方在大文件上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25477128/

相关文章:

vagrant - 关闭不再配置的vagrant box

rvm Recipe 在 vagrant 中安装 ruby​​ 失败

amazon-web-services - 在 Chef 配方中获取 EC2 实例名称

java - 使用 Java 将 MySQL 中的值从一个表写入另一个表

php - 添加准备语句导致代码损坏

mysql - laravel5.4 中 undefined variable

ruby - Chef - 从上次运行的状态中跳过资源

mysql - BookShelf or MySQL如何选择column1-column2作为别名

vagrant - 如何显示特定目录中使用的 Vagrant box 版本

docker - docker引擎版本低于最低错误