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


Answers:


263

默认情况下没有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时要读取的其他文件。


49
似乎不再是这种情况了;我看到一个/usr/local/Cellar/mysql/5.6.15/ my.cnf文件(或已安装哪个版本)
威廉·特瑞尔

6
@williamt“ mysql --help”没有列出该文件的使用情况,我认为这只是安装文件随附的默认文件
Vinicius Pinto 2014年

2
我在5.6.26上,在那看不到它。
亚当·格兰特

3
在5.6.26上可以运行以下命令: ls $(brew --prefix mysql)/*.cnf
danielgpm

23
mysql --help | grep cnf实际上更容易找到线条。
–vinyl

267

自制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可能是在本地安装的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

4
sudo cp $(brew --prefix mysql)/support-files/my-default.cnf /etc/my.cnf
马特·克莱格

7
如果Homebrew在/usr/local/其中安装了MySQL (我认为这是默认设置),那么您也可以将my.confin 放置在/usr/local/etc/不需要root特权的位置。
gitaarik

1
brew --prefix mysql没有给出正确的路径,对我来说,它显示为“ /usr/local/Cellar/mysql/5.7.16”,但实际上mariadb安装在“ / usr / local / opt / mariadb /”中
zhaozhi

@zhaozhi使用brew --prefix mariadb。在MariaDB发行版my-default.cnf中不存在-请使用my-small.cnf。试试这个cp $(brew --prefix mariadb)/support-files/my-small.cnf /usr/local/etc/my.cnf
ewalshe '16

这需要被接受。第一个不正确。提出的问题与自制有关。
BugHunterUK

30

找出一种方法:

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

4
很棒的答案,我了解了locate.updatedb。但是,默认情况下没有配置文件,请参见下面的答案
glebm 2012年

15
您可以在OSX上使用mdfind -name my.cnf而不是locate命令
JacopKane 2016年

对我来说locate my.cnf直接工作。我没有参加sudo /usr/libexec/locate.updatedb
Andru

1
/usr/local/Cellar/mysql/8.0.16/.bottle/etc/my.cnf/usr/local/etc/my.cnf 是我得到了什么
文森特·唐

18

没有什么真正的帮助我-我无法覆盖/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

更改此文件对我有用!不要忘记重启启动代理:

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

我想你也可以运行brew services stop mysql,并brew services start mysql在地方的launchctl unload ...线路。
mhulse

1
这是真的-但是在编写此答案时,这些自制命令尚不可用。我将更新答案
naabster

17

在我的系统中

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

作为模板和

nano /usr/local/etc/my.cnf

在工作。


13

由于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


10

在您的外壳上 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

5

您可以找到my.cnf特定软件包提供文件的位置,例如

brew list mysql # or: mariadb

除了验证是否读取该文件,您还可以运行:

sudo fs_usage | grep my.cnf

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


4

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


2
在我的MBP上,仅/etc/my.cnf允许我影响mysql的Homebrew安装。
ewalshe 2011年

1

如果是Homebrew,mysql还将在其Cellar目录中查找my.cnf,例如:

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

对于这种情况,我们希望使配置保持接近二进制文件-创建 my.cnf如果丢失,请在此处。

更改后重新启动mysql:

brew services restart mysql


-1

对于MacOS(High Sierra),已与家庭Brew一起安装的MySQL。

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

<〜/ .my.cnf> [mysqld] connect_timeout = 43200 max_allowed_pa​​cket = 2048M net_buffer_length = 512M

重新启动mysql服务器。并检查变量。ÿ

sql> SELECT @@ max_allowed_pa​​cket; + ---------------------- + | @@ max_allowed_pa​​cket | + ---------------------- + | 1073741824 | + ---------------------- +

设置1行(0.00秒)


-1
  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. 将您的my.cf文件放到 /usr/local/opt/mysql

  3. brew services restart mysql

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.