Mysql 5.6在Mac OSX上头疼

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

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

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

我们有以下的环境:

  • 我们中的一些人: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

任何想法可能是什么原因造成的?

谢谢! 朱丽叶

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

修复MySQL 5.6的三个选项:

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

     [mysqld] innodb_file_per_table = OFF 

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

  1. 更改OSX的默认ulimit值(由Github用户sodabrewbuild议): 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的方式。 这个解决scheme也不被推荐,因为它会损害你的MySQL的性能 – 如果你有超过250个表,它会迫使MySQL经常重新打开表: https : //mariadb.com/kb/en/optimizing-table_open_cache/

为什么这个错误发生?

由于MySQL 5.6的innodb_file_per_table选项默认为ON,这意味着每个表的数据都存储在它自己的文件中。 OSX默认的打开文件数量限制是每个进程256个。 通常这不是一个问题,但在我的情况下,我正在并行运行unit testing,它创build了8个数据库,每个数据库有405个表。 OSX限制每个进程打开文件句柄的数量。 这个StackOverflow答案表明这个限制是256,这完全解释了我的问题:在MySQL 5.6之前,所有这8个数据库中的所有数据都在一个文件中。

感谢我的同事Thomas L.发现了一个暗示这个解决scheme的MySQL错误报告 !

我们有同样的问题。 这为我们固定

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

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

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

你可以很容易地用自制软件安装旧的公式:

brew versions mysql会给你你必须在/ usr / local中签出才能安装旧版本

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

这将显示你的MySQL版本5.5.29。 然后,您可以根据这些说明卸载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,没有任何优势。

我们发现使用以下修复这个对我们来说:

 brew install mysql --use-llvm 

这是在OSX 10.8的rbenv上的REE(1.8.7)的ontop 2.3上。 因人而异

我在同样的configuration(mysql 5.6.12)有同样的问题。 我刚刚用自制软件升级了MySQL到版本5.6.13,问题没有了。

我碰到这个问题与MySQL 5.6.16,通过自家小牛新鲜安装,随着rbenv和铁路等。

决定重新启动之前,通过其他解决scheme在这里工作。 问题解决了!

所以,如果你从安装mysql等没有重新启动,我build议重新启动之前通过这里的答案。

在小牛队,这对我有用:

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

升级到小牛之后我重新安装了Homebrew。 Homebrew安装了MySQL 5.6.13的瓶装版本。