【问题标题】:Mysql 5.6 headaches on Mac OSXMac OSX 上的 Mysql 5.6 令人头疼
【发布时间】:2013-07-22 17:25:21
【问题描述】:

我和我的几位同事最近在我们的 Mac 上使用自制软件从 MySQL 5.5 升级到 MySQL 5.6,以便在升级我们的服务器之前进行本地测试。自从这次升级以来,我们都在运行我们的 rails 代码时遇到了间歇性的 MySQL 错误:

Lost connection to MySQL server at 'sending authentication information', system error: 32

我们尝试在数据库中重新设置用户名和密码,并增加连接超时,但都没有解决问题。错误日志没有提到这个问题。当我们遇到问题时,我们发现的唯一解决方法是杀死 mysql 并重新启动它。我什至最近在命令行上使用mysql -u root -p 时注意到了这个错误。似乎一旦我开始收到此错误,无论我使用什么用户名,我都不能超过我当前的连接数。如果我关闭一个连接,那么我可以重新打开一个。

我们有以下环境:

  • 我们中的一些人:Rails 3.2、Ruby 2、mysql2 0.3.13、MySQL 5.6.12、Mac OSX 10.8.4
  • 我们其他人:Rails 3.2、Ruby 1.9、mysql2 0.3.13、MySQL 5.6.10、Mac OSX 10.8.4

任何想法可能导致这种情况?

谢谢! 朱莉

【问题讨论】:

  • 同通过DMG安装的Mysql 5.6.14:$ mysqlERROR 2013 (HY000): Lost connection to MySQL server at 'sending authentication information', system error: 32
  • 简单地停止和重新启动 MySQL 实例对我有用。 5.6.14
  • 在 OSX 10.9.2 上使用 Percona Server 5.6 时遇到相同的错误:尤其是在并行单元测试时 - 使用 8 个连接。呵呵。
  • 刚刚找到终极解决方案,在下方贴出答案。
  • 看看这个stackoverflow.com/questions/38459373/…它的作品就像一个魅力

标签: mysql ruby-on-rails-3 mysql2


【解决方案1】:

这里的答案都没有帮助我,但最后我得到了 MySQL 5.6 的工作。

修复 MySQL 5.6 的三个选项:

  1. (已确认) 编辑/etc/my.cnf(如果不存在则创建)并添加:

    [mysqld]
    innodb_file_per_table = OFF
    

并重新启动 MySQL。然后为了使这个工作,您需要将您的数据库转储到 SQL 文件 (mysqldump),然后删除并重新创建数据库,然后重新加载数据。

  1. 更改 OSX 的默认 ulimit 值(由 Github 用户 sodabrew 建议):https://superuser.com/questions/261023/how-to-change-default-ulimit-values-in-mac-os-x-10-6

  2. 将以下选项添加到 my.cnf 的 [mysqld] 部分:table_open_cache = 250。默认情况下,它设置为 2000,远高于 OSX 的默认 ulimit。也不推荐使用此解决方案,因为它会损害 MySQL 的性能 - 如果您的表超过 250 个,它会强制 MySQL 经常重新打开表:https://mariadb.com/kb/en/optimizing-table_open_cache/

为什么会出现这个错误?

从 MySQL 5.6 开始,innodb_file_per_table 选项默认为 ON,这意味着每个表的数据都存储在自己的文件中。 OSX 默认打开文件数限制为每个进程 256 个。通常这不是问题,但在我的情况下,我正在并行运行单元测试,它创建了 8 个数据库,每个数据库有 405 个表。 OSX 对每个进程的打开文件句柄数有限制。 This StackOverflow answer 建议这个限制是 256,这完美地解释了我的问题:在 MySQL 5.6 之前,来自所有这 8 个数据库的所有数据都在一个文件中。

感谢我的同事 Thomas L.,他发现了一个 MySQL bug report 暗示了这个解决方案!

【讨论】:

  • 连不上数据库怎么做mysqldump?
  • 不幸的是,如果你无法连接到数据库,你会创建 mysqldump,因为 mysqldump 只是 mysql 客户端程序之一——它们都需要能够连接到 mysql。
  • 好消息@AlexKovshovik,希望 MySql 能尽快解决这个问题。
  • 我不知道该设置必须在配置的 [mysqld] 部分中。有用的信息。
  • 这是迄今为止我找到的最佳答案。它解决了我所有关于丢失连接的问题。这个答案仍然适用于 OSX Mojave 和 MySQL 5.7。
【解决方案2】:

我们遇到了同样的问题。这为我们解决了问题

project-root$ mysql.server stop
project-root$ gem uninstall mysql2
project-root$ bundle install
project-root$ mysql.server start

【讨论】:

  • 刚刚重启 mysql 服务器对我有用。仅供参考。
【解决方案3】:

这是通过自制软件安装的最新 mysql 版本的问题。

5.6.x 会产生问题。降级到 5.5.x 为我解决了这个问题。

您可以使用自制软件轻松安装旧的公式版本:

brew versions mysql 将为您提供您必须在 /usr/local 中签出才能安装旧版本的 sha

   cd /usr/local
   git checkout 336c976
   brew info mysql

这将显示 5.5.29 作为 mysql 版本。然后,您可以根据这些instructions 卸载 mysql 并只需运行即可重新安装

   brew install mysql

并使用自制软件运行正常的安装过程:

  unset TMPDIR
  mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp

希望对您有所帮助。

你可以在安装旧版本的mysql之后再次在/usr/local中签出master。 brew versions 命令甚至为您提供了仅检查 mysql 公式的命令,但我认为这与仅检查 sha 的整个存储库然后在安装旧的 mysql 版本后返回 master 相比没有任何优势。

【讨论】:

  • 有趣。您是否在任何地方向 Homebrew 报告了此错误或尝试了非 Homebrew 安装?我们希望升级到 5.6 中的一些新功能,因此希望不必回到 5.5。
  • 不,我没有报告这个。不过,这似乎不是自制问题。我用谷歌搜索了这个问题,我发现有些人抱怨这发生在 5.6.x mysql 安装中。所以我降级了。
  • 这对我们有用,但是现在由于性能问题我们必须在生产中升级到 5.6,在本地升级也很好。仍在寻找解决方案。
  • 当我尝试brew versions mysql 现在我得到Error: Unknown command: versions
【解决方案4】:

我们发现使用以下方法可以解决这个问题:

brew install mysql --use-llvm

这是在 OSX 10.8 的 rbenv 中 REE (1.8.7) 之上的 rails 2.3。 YMMV

【讨论】:

    【解决方案5】:

    我在相同的配置(mysql 5.6.12)上遇到了同样的问题。我刚刚用自制软件将mysql升级到5.6.13版,问题就消失了。

    【讨论】:

      【解决方案6】:

      我用 mysql 5.6.16 解决了这个问题,通过 Homebrew 在 Mavericks 上新安装,以及 rbenv 和 rails 等。

      决定在此处解决其他解决方案之前重新启动。问题解决了!

      因此,如果您在安装 mysql 等之后还没有重新启动,我建议您在解决这里的答案之前重新启动。

      【讨论】:

        【解决方案7】:

        我发现有效的是,将 table_open_cache 设置为不高于 1000 的值

        table_open_cache=1000
        

        我在错误页面上找到了这个,最后一条评论https://bugs.mysql.com/bug.php?id=71960

        【讨论】:

          【解决方案8】:

          在小牛队,这对我有用:

          mysql.server stop
          brew install mysql
          mysql.server start
          gem remove mysql2
          gem install mysql2
          

          升级到 Mavericks 后,我重新安装了 Homebrew。 Homebrew 安装了 MySQL 5.6.13 的瓶装版本。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-04-25
            • 2020-08-17
            • 2013-06-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多