首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql 5.6 Mac上的头痛问题

Mysql 5.6 Mac上的头痛问题
EN

Stack Overflow用户
提问于 2013-07-23 14:50:47
回答 8查看 28K关注 0票数 49

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

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

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

我们有以下环境:

  • 我们中的一些人: Rails 3.2,Ruby2,mysql2 0.3.13,MySQL 5.6.12,MacOSX10.8.4
  • 我们其他人: Rails 3.2,Ruby1.9,mysql2 0.3.13,MySQL 5.6.10,MacOSX10.8.4

有什么原因吗?

谢谢!朱莉

EN

回答 8

Stack Overflow用户

发布于 2014-03-31 23:06:22

这里的答案对我没有任何帮助,但最终我得到了MySQL 5.6。

修复MySQL 5.6的三个选项:

  1. (确认)编辑/etc/my.cnf (如果不存在创建)并添加: mysqld innodb_file_per_table = OFF

并重新启动MySQL。然后,您需要将数据库转储到SQL文件(mysqldump)中,然后删除并重新创建数据库,然后重新加载数据。

  1. 更改OSX的默认值(由Github用户苏打水建议):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经常重新打开表。

为什么会发生这个错误?

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

感谢我的同事Thomas .,他发现了一个MySQL错误报告,它暗示了这个解决方案!

票数 74
EN

Stack Overflow用户

发布于 2014-02-12 13:34:06

我们也有同样的问题。这个帮我们修好了

代码语言:javascript
复制
project-root$ mysql.server stop
project-root$ gem uninstall mysql2
project-root$ bundle install
project-root$ mysql.server start
票数 11
EN

Stack Overflow用户

发布于 2013-07-25 07:28:11

这是最新的mysql版本的一个问题,它是通过自制安装的。

5.6.x造成问题。降级到5.5.x为我解决了这个问题。

您可以很容易地使用自制软件安装旧的公式版本:

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

代码语言:javascript
复制
   cd /usr/local
   git checkout 336c976
   brew info mysql

这将向您展示5.5.29作为mysql版本。然后,您可以基于这些使用说明卸载mysql,然后只需运行

代码语言:javascript
复制
   brew install mysql

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

代码语言:javascript
复制
  unset TMPDIR
  mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp

希望这能有所帮助。

在安装了mysql的旧版本之后,您可以在/usr/local中签出母版。brew version命令甚至允许您只签出mysql的公式,但我认为这与只签出sha的整个存储库,然后在安装旧mysql版本后返回到master没有任何好处。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17813630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档