我和我的几位同事最近在我们的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
注意到了这个错误。似乎一旦我开始收到此错误,无论我使用什么用户名,我都无法超过当前的连接数。如果我关闭连接,那么我可以重新打开一个连接。
我们有以下环境:
任何可能导致此问题的想法?
谢谢! 朱莉
答案 0 :(得分:67)
这里的答案都没有帮助我,但最后我让MySQL 5.6工作了。
修复MySQL 5.6的三个选项:
(已确认)编辑/etc/my.cnf
(如果不存在则创建)并添加:
[mysqld]
innodb_file_per_table = OFF
并重启MySQL。然后,为了使其工作,您需要将数据库转储到SQL文件(mysqldump),然后删除并重新创建数据库,然后重新加载数据。
更改OSX的默认ulimit值(由Github用户sodabrew建议):https://superuser.com/questions/261023/how-to-change-default-ulimit-values-in-mac-os-x-10-6
将以下选项添加到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暗示了这个解决方案!
答案 1 :(得分:7)
我们遇到了同样的问题。这为我们修好了
project-root$ mysql.server stop
project-root$ gem uninstall mysql2
project-root$ bundle install
project-root$ mysql.server start
答案 2 :(得分:4)
这是通过自制软件安装的最新mysql版本的问题。
5.6.x会产生问题。降级到5.5.x解决了这个问题。
您可以使用自制软件轻松安装旧公式:
brew versions mysql
会为您提供在/ usr / local结帐以便能够安装旧版本的沙子
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版本命令甚至为您提供了检查mysql公式的命令,但我认为除了检查sha的整个存储库然后在安装旧的mysql版本后返回master之后,它没有任何优势。 / p>
答案 3 :(得分:0)
我们发现使用以下内容为我们解决了这个问题:
brew install mysql --use-llvm
这是在OSX 10.8上的rbenv中的REE(1.8.7)的导轨2.3上。 YMMV
答案 4 :(得分:0)
我在相同的配置上遇到了同样的问题(mysql 5.6.12)。我刚刚用自制软件将mysql升级到版本5.6.13,问题就消失了。
答案 5 :(得分:0)
我用mysql 5.6.16解决了这个问题,通过Homebrew在mavericks上新安装,以及rbenv和rails等。
在此处完成其他解决方案之前决定重新启动。问题解决了!
因此,如果您在安装mysql之后没有重新启动,我建议您在重复此处之前重新启动。
答案 6 :(得分:0)
我发现可以将table_open_cache
设置为不大于1000的值
table_open_cache=1000
我在错误页面上找到了这个,最近的评论是https://bugs.mysql.com/bug.php?id=71960
答案 7 :(得分:-1)
On Mavericks,这对我有用:
mysql.server stop
brew install mysql
mysql.server start
gem remove mysql2
gem install mysql2
升级到Mavericks后我重新安装了Homebrew。 Homebrew安装了MySQL 5.6.13的瓶装版本。