在 Macos Catalina 上使用 Mariadb 10.4.13 打开的文件太多

Too many open files with Mariadb 10.4.13 on Macos Catalina

我 运行 在 Macos 10.15.5 上使用 mariadb 10.4.13。 因为我做了“酿造升级”我有这个错误: Out of resources when opening file './pluto/_connection.MYD' (Errcode: 24 "Too many open files")

我试图修改此文件 /usr/local/etc/my.cnf 以添加此行 open_files_limit = 60000 但它不起作用,open_files_limit 变量仍然在值 256 上被阻止。

我试过这一行:sudo ulimit -n 1024,但每次我重新启动值 returns 到 256

有什么可以帮我解决问题的吗?

我按照此线程中指出的建议增加了系统限制,从而解决了这个问题:https://discourse.brew.sh/t/mariadb-too-many-open-files/8110 and outlined in the GIST here: https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c

您是否尝试过寻找其他方法来修改 MacOS Catalina 上的打开文件限制?快速搜索使我找到 here,它建议在 运行 时针对系统修改它:

sudo launchctl limit maxfiles <soft limit> <hard limit>

This site and this superuser question建议修改/Library/LaunchDaemons/limit.maxfiles.plist以永久增加它。

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">  
  <dict>
    <key>Label</key>
    <string>limit.maxfiles</string>
    <key>ProgramArguments</key>
    <array>
      <string>launchctl</string>
      <string>limit</string>
      <string>maxfiles</string>
      <string><your soft limit here></string>
      <string><your hard limit here></string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist> 

然后,通过更改权限并验证更改来完成。

sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
launchctl limit maxfiles

从 10.15.5 升级到 10.15.6 后,我在 MacOS 上解决了同样的问题,mariadb 通过自制软件安装,版本 10.5.5。

原来问题不是打开文件限制,而是缺少创建PID文件的权限。

为了修复它,我创建了包含以下内容的 ~/.my.cnf 文件。

[mysqld_safe]
pid-file    = /var/run/mysqld/mysqld.pid

并使用以下命令创建 mysqld.pid 文件(取自 this serverfault issue

mkdir /var/run/mysqld
touch /var/run/mysqld/mysqld.pid
chown -R mysql:mysql /var/run/mysqld

这解决了问题。 MySQL/MariaDB 不再抱怨打开太多文件了。

我还需要杀死所有 运行ning mysql 进程(以获取它们的 PID 运行 ps aux | grep mysql 然后 kill {proces_number}。但也许你不不需要这一步。

  • MacOS 卡特琳娜 10.15.x
  • 使用自制程序安装的 Mariadb

使用 mysql < foo.sql 导入数据库失败:[ERROR] Error in accept: Too many open files

同意上面的帖子。这看起来像是假阴性。这对我有用:

brew services stop mariadb

并确保您没有任何 mysql 进程 运行: ps aux | grep mysql.

mkdir /usr/local/var/run/mysqld

编辑 Mariadb 配置文件 /usr/local/etc/my.cnf 并告诉它使用此目录。

[client-server]
socket = /usr/local/var/run/mysqld/mysql.sock

[mysqld_safe]
pid-file = /usr/local/var/run/mysqld/mysqld.pid

严格来说,您只需要定义 pid 文件,尽管我个人喜欢将 pid 和套接字文件都存储在 /usr/local/var/run - 结构中。我对从 Homebrew 安装的 PHP (/usr/local/var/run/php) 执行相同的操作。

启动数据库服务器,大功告成。

brew services start mariadb

我在 macOS 10.15.7 上使用通过 Macports 安装的 mariadb-10.2 时遇到了同样的问题。检查 open_files_limit 显示它已因未知原因恢复为 256。我已经尝试过这个问题和其他地方描述的许多方法;包括确保 ulimit 足够(20000)和 launchctl limit maxfiles 足够(20000 和 200000),并且在 my.cnf 中有合理的设置 open_file_limit (3000) 这些参数保持在这些值和当 mariadb 恢复为 256 但仍保持预期值时,不会发生变化。

不是根本原因的解决方案,但解决方法是重新启动 mariadb。之后,mariadb 的 open_files_limit 被重置为 ulimit 20000。请注意,在 my.cnf 中它没有被设置为 3000 值,而是被设置为 20000 值。暂时解决了这个问题

另请注意,对于从 MacPorts 安装的 mariadb,重启方式由以下两个命令给出:

  1. sudo 端口卸载 mariadb-10.2-server
  2. sudo 端口加载 mariadb-10.2-server

仅执行加载是行不通的,即使控制台输出显示它已重新启动。它可能会重新启动,但我已经证明 open_files_limit 重置的唯一方法是首先进行卸载。