对于自制mysql安装,where's my.cnf?

对于自制mysql安装,my.cnf在哪里?它安装了吗?

195772 次浏览

有一种方法可以知道:

sudo /usr/libexec/locate.updatedb
# wait a few minutes for it to finish
locate my.cnf

我相信答案是否定的。在~/.my.cnf或/usr/local/etc中安装一个似乎是首选的解决方案。

默认情况下没有my.cnf。因此,MySQL以所有默认设置启动。如果您想创建自己的my.cnf来覆盖任何默认值,请将其放在/etc/my.cnf

此外,你可以运行mysql --help并查看它列出的conf位置。

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
The following groups are read: mysql client
The following options may be given as the first argument:
--print-defaults        Print the program argument list and exit.
--no-defaults           Don't read default options from any option file.
--defaults-file=#       Only read default options from the given file #.
--defaults-extra-file=# Read this file after the global files are read.

正如你所看到的,还有一些选项可以绕过conf文件,或者当你在命令行上调用mysql时指定要读取的其他文件。

homebrew mysql在安装的support-files文件夹中包含样例配置文件。

ls $(brew --prefix mysql)/support-files/my-*

如果需要更改默认设置,可以使用其中一个作为起点。

cp $(brew --prefix mysql)/support-files/my-default.cnf /usr/local/etc/my.cnf

正如@rednaw指出的那样,MySQL的自酿安装很可能在/usr/local中,所以my.cnf文件不应该被添加到系统的/etc文件夹中,所以我改变了命令,将文件复制到/usr/local/etc中。

如果你正在使用MariaDB而不是MySQL,请使用以下命令:

cp $(brew --prefix mariadb)/support-files/my-small.cnf /usr/local/etc/my.cnf

在你的shell类型my_print_defaults --help

在结果的底部,您应该能够看到服务器从中读取配置的文件。它输出如下内容:

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
没有什么真正帮助我-我不能覆盖/etc/my.cnf文件中的设置。 所以我搜索像约翰建议https://stackoverflow.com/a/7974114/717251

sudo /usr/libexec/locate.updatedb
# wait a few minutes for it to finish
locate my.cnf

它发现另一个my.cnf在

/usr/local/Cellar/mysql/5.6.21/my.cnf

更改这个文件对我有用!别忘了重启启动Agent:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

更新:

如果你最近安装了homebrew,你应该使用brew services命令重新启动mysql(使用你安装的homebrew mysql版本,即mysql或mysql@5.7):

brew services stop mysql
brew services start mysql

你可以找到my.cnf文件是由特定的包提供的,例如。

brew list mysql # or: mariadb

除了验证文件是否被读取,你可以运行:

sudo fs_usage | grep my.cnf

它将实时显示与该文件相关的文件系统活动。

在我的系统里是这样的

nano /usr/local/etc/my.cnf.default

作为模板和

nano /usr/local/etc/my.cnf

为工作。

在Homebrew的情况下,mysql也会在它的Cellar目录中查找my.cnf,例如:

/usr/local/Cellar/mysql/5.7.21/my.cnf

对于这种情况,人们更喜欢将配置保持在接近二进制文件的位置——如果缺少my.cnf,则在这里创建my.cnf

修改后重启mysql:

brew services restart mysql

对于MacOS (High Sierra),已经安装了自制的MySQL。

从mysql环境中增加全局变量不成功。因此,在这种情况下,创建~/.my.cnf是最安全的选择。使用[mysqld]添加变量将包括更改(注意:如果使用[mysql]更改,更改可能不起作用)。

<~/.my.cnf> [mysqld] connect_timeout = 43200 max_allowed_packet = 2048M net_buffer_length = 512M

重启mysql服务器。检查变量。 y < / p >

sql> SELECT @@max_allowed_packet; +----------------------+ | @@max_allowed_packet | . +----------------------+ | 1073741824 | +----------------------+

set中的1行(0.00秒)

由于mysql --help显示了一个文件列表,我发现将结果管道到ls以查看其中哪些文件存在是有用的:

$ mysql --help | grep /my.cnf | xargs ls
ls: /etc/my.cnf: No such file or directory
ls: /etc/mysql/my.cnf: No such file or directory
ls: ~/.my.cnf: No such file or directory
/usr/local/etc/my.cnf

对于我的(安装了Homebrew) MySQL 5.7,似乎文件在/usr/local/etc/my.cnf上。

  1. $ps aux | grep mysqld /usr/local/opt/mysql/bin/mysqld——basedir=/usr/local/opt/mysql——datadir=/usr/local/var/mysql——plugin-dir=/usr/local/opt/mysql/lib/plugin

  2. 放下你的我。cf文件到/usr/local/opt/mysql

  3. brew services restart mysql

服务器版本:8.0.19 Homebrew。macOS Catalina 10.15.5,通过Homebrew安装MySQL在这里找到这个文件:

/usr/local/etc/my.cnf

这个解决方案帮助:)

运行

sudo find / -name my.cnf

通常第一个结果是正确的。

/usr/local/etc/

添加另一个答案

  • 接受的是错误的。我们说的是Homebrew安装的mysql,而不是手动安装的MySQL。
  • 前一个答案可能有点过时,Homebrew在M1 Mac上存储在不同的位置

相依

在安装过程中,Homebrew将my.cnf复制到以下位置

  • /usr/local/etc/my.cnf for x86 Mac
  • /opt/homebrew/etc/my.cnf为M1 Mac

Homebrew选择/usr/local/opt/homebrew来存储包,因此默认的conf文件不存储在/etc/中,而是存储在/usr/local/etc/opt/homebrew/etc中。

事实上,homebrew在从源代码编译mysql时改变了-DSYSCONFDIR=(默认的conf位置)标志。

启动服务

一个简短的回答:运行brew info mysql并检查提示。

推荐的方法是brew services start mysql,它使用launchd来管理服务。(launchd在macOS上被认为是systemd的替代品)

对于任何想手动启动它的人来说,没有任何选项的mysql.start就足以启动服务。(mysql.start是由mysql提供的脚本,用于帮助启动服务)

如果您使用的是mac m1 (Apple silicon), my.cnf位于

/opt/homebrew/etc/my.cnf

并且也可以通过mysql --help找到

我已经使用Homebrew安装了MySQL 5.7

My.cnf文件位于“/opt/homebrew/etc/ My.cnf "