问与答 Ruby on Rails 3-Mac OSX上的Mysql 5.6令人头疼

kemp · 2020-02-22 14:00:06 · 热度: 8

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

mysql -u root -p

我们尝试在数据库中重新创建用户名和密码,并增加连接超时,但是都没有解决问题。 错误日志未提及该问题。 遇到问题时,我们发现的唯一解决方法是杀死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

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

谢谢!朱丽叶

猜你喜欢:
共收到 7 条回复
jan #1 · 2020-02-22 14:00:07

这里没有任何答案对我有帮助,但最终我使MySQL 5.6正常工作。

修复MySQL 5.6的三个选项:

  1. (确认)编辑table_open_cache = 250(如果不存在则创建)并添加:

    table_open_cache = 250

然后重启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/zh-CN/optimizing-table_open_cache /]

为什么会发生此错误?

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

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

tupac #2 · 2020-02-22 14:00:08

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

project-root$ mysql.server stop
project-root$ gem uninstall mysql2
project-root$ bundle install
project-root$ mysql.server start
kit #3 · 2020-02-22 14:00:09

这是通过自制软件安装的最新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中检出master。 brew版本命令甚至提供给您命令以检出mysql的公式,但是与仅检出sha的整个存储库,然后在安装旧的mysql版本之后返回主站相比,我认为这没有任何好处。

emanuel #4 · 2020-02-22 14:00:10

我们发现使用以下内容可以为我们解决此问题:

brew install mysql --use-llvm

它位于OSX 10.8上rbenv中REE(1.8.7)之上的2.3上。 青年汽车

merle #5 · 2020-02-22 14:00:11

我在相同的配置(mysql 5.6.12)上遇到相同的问题。 我刚刚将带有自制程序的mysql升级到5.6.13版,问题不再存在。

devin #6 · 2020-02-22 14:00:12

我用mysql 5.6.16解决了这个问题,它是通过Homebrew在raver,rails等上通过Homebrew刚安装在Mavericks上的。

决定在此处尝试其他解决方案之前重新引导。 问题解决了!

因此,如果您自从安装mysql等以来没有重启过,我建议您先重新启动,然后再解决此处的问题。

van #7 · 2020-02-22 14:00:13

在Mavericks上,这对我有用:

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

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册