繁体   English   中英

Mac OSX 上的 Mysql 5.6 问题

[英]Mysql 5.6 headaches on Mac OSX

我和我的几个同事最近使用 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注意到了这个错误。 似乎一旦我开始收到此错误,无论我使用什么用户名,我都不能超过我当前的连接数。 如果我关闭一个连接,那么我可以重新打开一个。

我们有以下环境:

  • 我们中的一些人: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 (如果不存在则创建)并添加:

     [mysqld] innodb_file_per_table = OFF

并重新启动 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/en/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 错误报告

我们遇到了同样的问题。 这为我们修复了它

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会给你 sha 你必须在 /usr/local 中签出才能安装旧版本

   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中checkout master。 brew versions 命令甚至为您提供了仅检出 mysql 公式的命令,但我认为这与仅检出 sha 的整个存储库然后在安装旧的 mysql 版本后返回 master 相比没有任何优势。

我们发现使用以下方法为我们解决了这个问题:

brew install mysql --use-llvm

这是在 OSX 10.8 上的 rbenv 中的 REE (1.8.7) 上的 rails 2.3 上。 青年会

我在相同的配置(mysql 5.6.12)上遇到了同样的问题。 我刚刚用自制软件将 mysql 升级到 5.6.13 版,问题就解决了。

我用 mysql 5.6.16 解决了这个问题,它是通过 Mavericks 上的 Homebrew 新安装的,还有 rbenv 和 rails 等。

决定在解决这里的其他解决方案之前重新启动。 问题解决了!

因此,如果您在安装 mysql 等之后还没有重新启动,我建议您在完成这里的答案之前重新启动。

我发现有效的是将table_open_cache设置为不高于 1000 的值

table_open_cache=1000

我在错误页面上找到了这个,最后一条评论https://bugs.mysql.com/bug.php?id=71960

在小牛队,这对我有用:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM