我和我的几位同事最近将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时出现了这个错误。似乎一旦我开始得到这个错误,无论我使用什么用户名,我都不能超过我当前的连接数。如果我关闭了连接,我就可以重新打开连接。
我们有以下环境:
有什么原因吗?
谢谢!朱莉
发布于 2014-03-31 23:06:22
这里的答案对我没有任何帮助,但最终我得到了MySQL 5.6。
修复MySQL 5.6的三个选项:
/etc/my.cnf (如果不存在创建)并添加:
mysqld innodb_file_per_table = OFF并重新启动MySQL。然后,您需要将数据库转储到SQL文件(mysqldump)中,然后删除并重新创建数据库,然后重新加载数据。
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错误报告,它暗示了这个解决方案!
发布于 2014-02-12 13:34:06
我们也有同样的问题。这个帮我们修好了
project-root$ mysql.server stop
project-root$ gem uninstall mysql2
project-root$ bundle install
project-root$ mysql.server start发布于 2013-07-25 07:28:11
这是最新的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版本。然后,您可以基于这些使用说明卸载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中签出母版。brew version命令甚至允许您只签出mysql的公式,但我认为这与只签出sha的整个存储库,然后在安装旧mysql版本后返回到master没有任何好处。
https://stackoverflow.com/questions/17813630
复制相似问题