For homebrew mysql installs, where's my.cnf?
Asked Answered
D

17

345

For homebrew mysql installs, where's my.cnf? Does it install one?

Deibel answered 1/11, 2011 at 22:55 Comment(0)
T
329

There is no my.cnf by default. As such, MySQL starts with all of the default settings. If you want to create your own my.cnf to override any defaults, place it at /etc/my.cnf.

Also, you can run mysql --help and look through it for the conf locations listed.

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.

As you can see, there are also some options for bypassing the conf files, or specifying other files to read when you invoke mysql on the command line.

Theologize answered 2/11, 2011 at 0:14 Comment(11)
This no longer seems to be the case; I see a my.cnf file in /usr/local/Cellar/mysql/5.6.15/ (or whichever version you have installed)Crave
@williamt "mysql --help" doesn't list that file as being used, I think it's just a default that comes with the installation filesWellfixed
@williamt I think Vinicius is right. I see /usr/local/Cellar/mysql/5.6.20_1/my.cnf but when I added the log-bin to it and restarted mysqld, it still didn't haven't binary logging enabled. It wasn't until I copied that my.cnf to /etc/my.cnf that binary logging was enabled. Perhaps that my.cnf file is used during the initial install, I'm not sure.Technics
I'm on 5.6.26 and I don't see it there.Overrun
On on 5.6.26 can be lolcated by running: ls $(brew --prefix mysql)/*.cnfCorettacorette
mysql --help | grep cnf was actually easier to find the lines.Kokanee
@Technics if you take a look at the init.d script in support-files/mysql.server, you can see it checks for an /etc/my.cnfWeeper
To add to @vynyll's snippet, adding 1 before-context line to grep makes the filtered docs a bit easier to read: mysql --help | grep -B 1 cnfEquipment
Interesting that if you want to change the bind-address, you can't because it's overridden in the cli args. Turns out the plist actually has it: ~/Library/LaunchAgents/homebrew.mxcl.mysql.plistGluttonous
As of now (Feb. 2020) my.cnf is located under /usr/local/etc ([email protected] brew formula)Subjectify
I use "mdfind -name my.cnf" to find my.cnf fileNovella
S
276

The homebrew mysql contains sample configuration files in the installation's support-files folder.

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

If you need to change the default settings you can use one of these as a starting point.

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

As @rednaw points out, a homebrew install of MySQL will most likely be in /usr/local so the my.cnf file should not be added to the system /etc folder, so I’ve changed the command to copy the file into /usr/local/etc.

If you are using MariaDB rather than MySQL use the following:

cp $(brew --prefix mariadb)/support-files/my-small.cnf /usr/local/etc/my.cnf
Spinney answered 22/12, 2011 at 1:21 Comment(6)
sudo cp $(brew --prefix mysql)/support-files/my-default.cnf /etc/my.cnfViand
If Homebrew installed MySQL in /usr/local/ (which is the default I think), you can also place the my.conf in /usr/local/etc/, which don't require root privileges.Bassarisk
brew --prefix mysql doesn't give the correct path, for me, it shows '/usr/local/Cellar/mysql/5.7.16', but indeed mariadb is installed in '/usr/local/opt/mariadb/'Shortterm
@Shortterm Use brew --prefix mariadb. In the MariaDB distribution the my-default.cnf does not exist - so use my-small.cnf. Try this cp $(brew --prefix mariadb)/support-files/my-small.cnf /usr/local/etc/my.cnfSpinney
This needs to be the accepted answer. The first one is incorrect. The question asked was relating to homebrew.Razzia
This solution was help me, although I installed the percona-server. Thanks.Electrotherapeutics
B
36

One way to find out:

sudo /usr/libexec/locate.updatedb
# wait a few minutes for it to finish
locate my.cnf
Beniamino answered 1/11, 2011 at 23:22 Comment(4)
Awesome answer, I learned about locate.updatedb. However, there is no config file by default, see the answer belowPhase
You can use mdfind -name my.cnf instead of locate command on OSXInherence
For me locate my.cnf worked directly. I didn't run sudo /usr/libexec/locate.updatedbRettke
/usr/local/Cellar/mysql/8.0.16/.bottle/etc/my.cnf and /usr/local/etc/my.cnf was what I gotTrinitytrinket
D
26

Add another answer cause

  • The accepted anwser is right. Since we're talking about Homebrew installed mysql, not MySQL installed manually, there's more direct way to find the conf.
  • The former answers may be a little outdated, Homebrew on M1 Mac is stored in a different location

Conf

The my.cnf is copied by Homebrew to following places during installation

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

Homebrew chooses /usr/local, or /opt/homebrew to store packages, so the default conf files are not stored in /etc/ but /usr/local/etc or /opt/homebrew/etc.

In fact, homebrew changed the -DSYSCONFDIR= (default conf location) flag during compiling mysql from source.

Start the Service

A short answer: run brew info mysql and check the tips.

The recommended way is brew services start mysql, which uses the launchd to manage services. (launchd is deemed a systemd alternative on macOS)

For anyone wanna start it manually, mysql.start without any option is enough to start the service. (mysql.start is a script provided by mysql to help start the service)

Deeann answered 23/5, 2021 at 4:14 Comment(2)
You can also use brew services run mysql which runs the server without setting it up for auto-start.Spermatozoid
thanks ! for pointing out this one. /opt/homebrew/etc/my.cnf for M1 MacAxil
R
25

in my system it was

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

as template and

nano /usr/local/etc/my.cnf

as working.

Roxane answered 10/8, 2017 at 15:10 Comment(0)
T
20

Nothing really helped me - I could not overwrite settings in a /etc/my.cnf file. So I searched like John suggested https://mcmap.net/q/56375/-for-homebrew-mysql-installs-where-39-s-my-cnf

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

It found another my.cnf in

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

changing this file worked for me! Don't forget to restart the launch Agent:

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

Update:

If you have a fairly recent installation of homebrew you should use the brew services commands to restart mysql (use your installed homebrew mysql version, i.e. mysql or [email protected]):

brew services stop mysql
brew services start mysql
Trench answered 17/10, 2014 at 14:58 Comment(2)
I think you can also run brew services stop mysql and brew services start mysql in place of the launchctl unload ... lines.Colenecoleopteran
That ist true - but at the time of writing this answer these homebrew commands were not yet available. I'll update the answerTrench
M
20

Since mysql --help shows a list of files, I find it useful to pipe the result to ls to see which of them exist:

$ 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

For my (Homebrew installed) MySQL 5.7, it seems the files is on /usr/local/etc/my.cnf.

Mosley answered 8/9, 2018 at 7:27 Comment(1)
/usr/local is correct for home-brew on an intel Mac. with Apple Silicon home-brew is now at /opt/homebrew and the paths are changingNuptial
M
13

On your shell type my_print_defaults --help

At the bottom of the result, you should be able to see the file from which the server reads the configurations. It prints something like this:

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
Moschatel answered 19/5, 2014 at 6:39 Comment(1)
this is it! thank you :)Propaganda
P
7

Server version: 8.0.19 Homebrew. macOS Catalina 10.15.5 and installed MySQL via Homebrew. Found this file here:

/usr/local/etc/my.cnf

This solution helped :)

Peculate answered 29/5, 2020 at 6:59 Comment(0)
M
6

You can find where the my.cnf file has been provided by the specific package, e.g.

brew list mysql # or: mariadb

In addition to verify if that file is read, you can run:

sudo fs_usage | grep my.cnf

which will show you filesystem activity in real-time related to that file.

Matsu answered 9/6, 2016 at 15:4 Comment(1)
Brilliant! With grep, amazing!Effector
D
4

I believe the answer is no. Installing one in ~/.my.cnf or /usr/local/etc seems to be the preferred solution.

Deibel answered 1/11, 2011 at 23:27 Comment(1)
On my MBP only /etc/my.cnf allows me affect the Homebrew installation of mysql.Spinney
V
2

run

sudo find / -name my.cnf

Usually the first result is the correct one. Should be in

/usr/local/etc/

Vegetable answered 11/2, 2021 at 21:14 Comment(0)
V
1

In case of Homebrew, mysql would also look for my.cnf in it's Cellar directory, for example:

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

For the case one prefers to keep the config close to the binaries - create my.cnf here if it's missing.

Restart mysql after change:

brew services restart mysql
Vanzant answered 9/7, 2018 at 16:10 Comment(0)
M
0

If you are using mac m1 (Apple silicon), the my.cnf is located at

/opt/homebrew/etc/my.cnf

and can also be found by mysql --help

Mcarthur answered 10/9, 2021 at 6:57 Comment(0)
H
0

I have installed MySQL 5.7 using Homebrew

my.cnf file is located in "/opt/homebrew/etc/my.cnf"

Hindman answered 26/5, 2022 at 13:7 Comment(0)
R
-1

For MacOS (High Sierra), MySQL that has been installed with home brew.

Increasing the global variables from mysql environment was not successful. So in that case creating of ~/.my.cnf is the safest option. Adding variables with [mysqld] will include the changes (Note: if you change with [mysql] , the change might not work).

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

Restart the mysql server. and check the variables. y

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

1 row in set (0.00 sec)

Redfaced answered 1/9, 2018 at 5:38 Comment(0)
G
-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. Drop your my.cf file to /usr/local/opt/mysql

  3. brew services restart mysql

Gunderson answered 14/3, 2020 at 3:29 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.