【问题标题】:mysql chef database recipe fails on large filemysql chef 数据库配方在大文件上失败
【发布时间】:2014-10-18 02:02:41
【问题描述】:

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

我正在使用 vagrant 和 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

对于它的价值,当我将 db_setup.sql 文件替换为一个更小、更简单的文件(仅创建几个空表)时,它可以毫无困难地执行。

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

【问题讨论】:

    标签: mysql vagrant chef-infra


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      很多很多东西都可以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
      

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

      【讨论】:

      • 这是有道理的,但如果这是问题所在,我是否能够(我可以)通过 ssh 进入盒子并从命​​令行处理脚本?
      • 不管怎样,我确实对 my.cnf 进行了这些更改并重新启动了服务器,但配置过程仍然失败。为了确认,我还 ssh 进入服务器并运行 source db_setup.sql,一切都运行成功。有什么想法吗?再次感谢
      猜你喜欢
      • 2020-05-20
      • 2015-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 2022-01-25
      • 2020-08-17
      • 1970-01-01
      相关资源
      最近更新 更多