Для доморощенных установок mysql, где my.cnf?

293

Для доморощенных установок mysql, где my.cnf? Это установить один?

chrismealy
источник

Ответы:

263

My.cnf по умолчанию не существует. Таким образом, MySQL запускается со всеми настройками по умолчанию. Если вы хотите создать свой собственный my.cnf для переопределения любых значений по умолчанию, поместите его в /etc/my.cnf.

Кроме того, вы можете запустить mysql --helpи просмотреть его для перечисленных мест конф.

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 в командной строке.

Jericon
источник
49
Это больше не похоже на случай; Я вижу файл my.cnf в /usr/local/Cellar/mysql/5.6.15/ (или любую версию, которую вы установили)
Уильям Туррелл
6
@williamt "mysql --help" не перечисляет этот файл как используемый, я думаю, что это просто значение по умолчанию, которое идет с установочными файлами
Vinicius Pinto
2
Я на 5.6.26 и там этого не вижу.
Адам Грант
3
На 5.6.26 можно заполучить, запустив: ls $(brew --prefix mysql)/*.cnf
danielgpm
23
mysql --help | grep cnfбыло на самом деле легче найти линии.
Винилл
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, /usr/localпоэтому файл my.cnf не следует добавлять в системную /etcпапку, поэтому я изменил команду для копирования файла /usr/local/etc.

Если вы используете MariaDB вместо MySQL, используйте следующее:

cp $(brew --prefix mariadb)/support-files/my-small.cnf /usr/local/etc/my.cnf
ewalshe
источник
4
sudo cp $(brew --prefix mysql)/support-files/my-default.cnf /etc/my.cnf
Мэтт Клегг
7
Если Homebrew установил MySQL в /usr/local/(который, я думаю, используется по умолчанию), вы также можете поместить его my.confв /usr/local/etc/, который не требует привилегий root.
Гитаарик
1
brew --prefix mysql не дает правильный путь, для меня он показывает «/usr/local/Cellar/mysql/5.7.16», но действительно mariadb установлен в «/ usr / local / opt / mariadb /»
Чжаожи
@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
Это должен быть принятый ответ. Первый неверен. Заданный вопрос касался доморощенного.
BugHunterUK
30

Один из способов узнать это:

sudo /usr/libexec/locate.updatedb
# wait a few minutes for it to finish
locate my.cnf
Джон Башир
источник
4
Удивительный ответ, я узнал о locate.updatedb. Тем не менее, по умолчанию нет файла конфигурации, см. Ответ ниже
glebm
15
Вы можете использовать mdfind -name my.cnfвместо locateкоманды на OSX
JacopKane
У меня locate my.cnfсработало напрямую. Я не бегалsudo /usr/libexec/locate.updatedb
Андру
1
/usr/local/Cellar/mysql/8.0.16/.bottle/etc/my.cnfи /usr/local/etc/my.cnf было то, что я получил
Винсент Тан
18

в моей системе это было

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

как шаблон и

nano /usr/local/etc/my.cnf

как работает.

Fusca Software
источник
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 (используйте установленную версию mysql для homebrew, т.е. mysql или mysql@5.7):

brew services stop mysql
brew services start mysql
naabster
источник
Я думаю, что вы также можете бежать brew services stop mysqlи brew services start mysqlна месте launchctl unload ...линий.
Mhulse
1
Это правда - но на момент написания этого ответа эти доморощенные команды еще не были доступны. Я
обновлю
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

который покажет вам активность файловой системы в реальном времени, связанную с этим файлом.

kenorb
источник
4

Я считаю, что ответ - нет. Установка одного из них в ~ / .my.cnf или / usr / local / etc кажется предпочтительным решением.

chrismealy
источник
2
На моем MBP только /etc/my.cnf позволяет мне повлиять на установку mysql в Homebrew.
Ewalshe
1

В случае с Homebrew mysql также ищет my.cnf в каталоге Cellar, например:

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

Для случая предпочитают держать конфигурацию близко к двоичным файлам - создайте my.cnfздесь, если это отсутствует.

Перезапустите mysql после изменения:

brew services restart mysql
Андрей
источник
1

Версия сервера: 8.0.19 Homebrew. macOS Catalina 10.15.5 и установленный MySQL через Homebrew. Нашел этот файл здесь:

/usr/local/etc/my.cnf

Это решение помогло :)

Коннор Лич
источник
-1

Для MacOS (High Sierra), MySQL, который был установлен вместе с home brew.

Увеличение глобальных переменных из среды mysql не было успешным. Так что в этом случае создание ~ / .my.cnf - самый безопасный вариант. Добавление переменных с помощью [mysqld] будет включать изменения (Примечание: если вы измените с помощью [mysql], изменение может не сработать).

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

Перезапустите сервер MySQL. и проверьте переменные. Y

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

1 ряд в наборе (0,00 сек)

lyxProtein
источник
-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

БиН
источник