我有一台运行 macOS 10.15 (Catalina) 的 Mac mini,并且我已通过自制软件安装了 mariadb 10.5.9。
一切运行良好且正常,但有一个例外:我无法让数据库在系统启动时启动。它尝试使用brew安装的launchd项目。但由于某种原因它失败了。一旦登录到计算机,如果我以 root 身份运行相同的命令,数据库就会立即启动并且运行没有问题。
我过去也遇到过类似的问题,这些问题是由
/usr/local/var/mysql
上的权限引起的,但这似乎不是这里的问题。
具体细节如下。这是我用来启动服务器的 launchd 项目。它正在运行,我可以在错误日志中看到数据库尝试启动。
<?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>homebrew.mxcl.mariadb</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/opt/mariadb/bin/mysqld_safe</string>
<string>--datadir=/usr/local/var/mysql</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/usr/local/var</string>
</dict>
</plist>
因此尝试启动数据库,但失败了。但是,当我在启动后在终端中运行相同的命令时,数据库会正常启动。但如果我忘记这样做,世界当然会爆炸,或者至少会发生一些不好的事情。
sudo /usr/local/opt/mariadb/bin/mysqld_safe --datadir=/usr/local/var/mysql
当 launchd plist 尝试启动服务器时,会在服务器的错误日志中创建以下内容:
210626 04:12:38 mysqld_safe Starting mariadbd daemon with databases from /usr/local/var/mysql
2021-06-26 4:12:39 0 [Note] /usr/local/opt/mariadb/bin/mariadbd (mysqld 10.5.9-MariaDB) starting as process 468 ...
2021-06-26 4:12:39 0 [Warning] Could not increase number of max_open_files to more than 256 (request: 32186)
2021-06-26 4:12:39 0 [Warning] Changed limits: max_open_files: 256 max_connections: 151 (was 151) table_cache: 200 (was 2000)
2021-06-26 4:12:39 0 [Warning] Setting lower_case_table_names=2 because file system for /usr/local/var/mysql/ is case insensitive
/usr/local/opt/mariadb/bin/mariadbd: Please consult the Knowledge Base to find out how to run mysqld as root!
2021-06-26 4:12:39 0 [ERROR] Aborting
210626 04:12:39 mysqld_safe mysqld from pid file /usr/local/var/mysql/Home-Server.local.pid ended
有一些warnings
,但唯一的错误只是一条消息
Aborting
。它没有说“为什么”它正在中止。警告之一是否导致了问题?如果有,是哪一个?如果我从终端执行此操作,为什么服务器可以正常启动?当然,文件系统的最大连接数和区分大小写是相同的。我很茫然。
我找到了解决办法!我不确定它是如何或为什么工作的,但是如果你将
已经
以 root 身份运行,所以添加
sudo
不应该做任何事情。然而,它解决了它!去算算吧。
...
<key>ProgramArguments</key>
<array>
<string>/usr/bin/sudo</string>
<string>/usr/local/opt/mariadb/bin/mariadbd-safe</string>
<string>--datadir=/usr/local/var/mysql</string>
</array>
...