Linux

Как найти расположение MySQL my.cnf

Существует ли команда MySQL для поиска конфигурационного файла my.cnf подобно тому, как phpinfo() в PHP находит php.ini?

 

Ответ 1

Не существует внутренней команды MySQL для отслеживания этого, это слишком абстрактно. Файл может находиться в 5 (и более) местах, и все они будут действительными, поскольку загружаются каскадно:

  1. /etc/my.cnf

  2. /etc/mysql/my.cnf

  3. $MYSQL_HOME/my.cnf

  4. [datadir]/my.cnf

  5. ~/.my.cnf

Это места по умолчанию, на которые MySQL обращает внимание. Если он находит более одного варианта, он загружает каждый из них, и значения переопределяют друг друга (в перечисленном порядке). Кроме того, параметр --defaults-file может отменить все эти варианты. Но благодаря тому, что все так запутано, есть большая вероятность, что это просто может быть /etc/my.cnf (если вы просто хотите посмотреть значения используйте значение в SHOW VARIABLES, но для этого вам понадобятся права доступа).

 

Ответ 2

На самом деле, вы можете «запросить» у MySQL список всех мест, где он ищет my.cnf (или my.ini в Windows). Однако это не SQL-запрос. Просто выполните команду:

$ mysqladmin --help

Или для версии 5.7:

$ mysqld --help --verbose

 

В самых первых строках ответа вы найдете сообщение со списком всех мест my.cnf. На моей машине это:

 Параметры по умолчанию считываются из следующих файлов в указанном порядке:

/etc/my.cnf

/etc/mysql/my.cnf

/usr/etc/my.cnf

~/.my.cnf

Или для Windows:

Параметры по умолчанию считываются из следующих файлов в указанном порядке:

C:\Windows\my.ini

C:\Windows\my.cnf

C:\my.ini

C:\my.cnf

C:\Program Files\MySQL\MySQL Server 5.5\my.ini

C:\Program Files\MySQL\MySQL Server 5.5\my.cnf

 Обратите внимание, что может случиться так, что ни в одном из этих мест не окажется файла my.cnf. Поэтому вы можете создать файл самостоятельно — используйте один из образцов конфигурационных файлов, поставляемых с дистрибутивом MySQL (в Linux смотрите файлы /usr/share/mysql/*.cnf и используйте тот, который подходит вам — скопируйте его в /etc/my.cnf, а затем измените по необходимости).

Также обратите внимание, что существует опция командной строки --defaults-file, которая может определить собственный путь к файлу my.cnf или my.ini. Например, для MySQL 5.5 на Windows это указывает на файл my.ini в каталоге данных, который обычно не указывается в mysqld --help --verbose. В Windows посмотрите свойства службы, чтобы выяснить, так ли это в вашем случае.

Наконец, проверьте сайт https://dev.mysql.com/doc/refman/8.0/en/option-files.html там все описано более подробно.

 

Ответ 3

mysql --help | grep /my.cnf | xargs ls

 Эта команда подскажет вам, где находится my.cnf на Mac/Linux:

ls: cannot access '/etc/my.cnf': Нет такого файла или каталога

ls: cannot access '~/.my.cnf': Нет такого файла или каталога

 /etc/mysql/my.cnf

 В данном случае он находится в файле /etc/mysql/my.cnf.

 

 Ответ 4

Это может сработать:

strace mysql ";" 2>&1  | grep cnf

 На моей машине этот код выводит:

stat64("/etc/my.cnf", 0xbf9faafc)       = -1 ENOENT (No such file or directory)

stat64("/etc/mysql/my.cnf", {st_mode=S_IFREG|0644, st_size=4271, ...}) = 0

open("/etc/mysql/my.cnf", O_RDONLY|O_LARGEFILE) = 3

read(3, "# /etc/mysql/my.cnf: The global "..., 4096) = 4096

stat64("/home/xxxxx/.my.cnf", 0xbf9faafc) = -1 ENOENT (No such file or directory)

 

Таким образом, похоже, что /etc/mysql/my.cnf то, что надо, поскольку stat64() и read() были выполнены успешно.

 

Ответ 5

По умолчанию mysql ищет my.cnf сначала в папке /etc. Если в этой папке нет файла /etc/my.cnf, я советую вам создать новый файл в следующей папке, как указано в документации (https://dev.mysql.com/doc/refman/5.6/en/option-files.html).

Вы также можете поискать существующий my.cnf в вашей установке mysql.  Для этого запустите следующую команду:

sudo find / -name "*.cnf"

Вы можете использовать следующий конфигурационный файл с таблицей myisam и без поддержки innodb mysql (из установки порта mysql на mac os x maverick). Пожалуйста, проверьте каждую команду в этом конфигурационном файле.

# Пример конфигурационного файла MySQL для большинства систем.

#

# Это работает для большой системы с памятью = 512M, в которой работает в основном

# MySQL.

#

# Программы MySQL ищут файлы опций в нескольких

# местах, которые зависят от платформы развертывания.

# Вы можете скопировать этот файл опций в одно из этих мест. Информацию об этих местах см:

# http://dev.mysql.com/doc/mysql/en/option-files.html

#

# В этом файле вы можете использовать все опции, которые поддерживает программа.

# Если вы хотите узнать, какие опции поддерживает программа, запустите программу

# с опцией "--help".

 

# Следующие опции будут передаваться всем клиентам MySQL

 [client]

#password   = your_password

port        = 3306

socket      = /opt/local/var/run/mysql5/mysqld.sock

 

# Далее следуют записи для некоторых конкретных программ

# The MySQL server

[mysqld]

port        = 3306

socket      = /opt/local/var/run/mysql5/mysqld.sock

skip-locking

key_buffer_size = 256M

max_allowed_packet = 1M

table_open_cache = 256

sort_buffer_size = 1M

read_buffer_size = 1M

read_rnd_buffer_size = 4M

myisam_sort_buffer_size = 64M

thread_cache_size = 8

query_cache_size= 16M

# Try number of CPU's*2 for thread_concurrency

thread_concurrency = 8

 

# Не следует прослушивать порт TCP/IP. Это может повысить безопасность,

# если все процессы, которым нужно подключиться к mysqld, работают на одном хосте.

# Все взаимодействие с mysqld должно осуществляться через сокеты Unix или именованные каналы.

# Обратите внимание, что использование этой опции без включения именованных труб в Windows

# (с помощью опции "enable-named-pipe") сделает mysqld бесполезным!

#skip-networking

 

# Replication Master Server (по умолчанию)

# Для репликации требуется двоичное протоколирование

log-bin=mysql-bin

 

# двоичный формат протоколирования рекомендуется смешанный режим

binlog_format=mixed

 

# требуемый уникальный идентификатор от 1 до 2^32 - 1

# значение по умолчанию равно 1, если master-host не установлен

# но не будет функционировать как мастер, если пропущено

server-id   = 1

 

# Replication Slave (закомментируйте раздел master, чтобы использовать это)

#

# Чтобы настроить этот хост в качестве ведомого устройства репликации, вы можете выбрать между

# двумя методами:

#

# 1) Использовать команду CHANGE MASTER TO (полностью описана в нашем руководстве) - #

# синтаксис следующий:

#

#    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,

#    MASTER_USER=<user>, MASTER_PASSWORD=<password> ;

#

# где <host>, <user>, <password> заменяются строками в кавычках, а

# <port> номером порта мастера (по умолчанию 3306).

#

#    Пример:

#

#    CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,

#    MASTER_USER='joe', MASTER_PASSWORD='secret';

#

# ИЛИ

#

# 2) Установите переменные, указанные ниже. Однако в случае, если вы выберете этот метод, то

# запустите репликацию в первый раз (даже неудачно, например,

# если вы неправильно ввели пароль в master-password и ведомому не удается

# подключиться), ведомый создаст файл master.info, и любые последующие

# изменения в этом файле значений переменных ниже будут проигнорированы и

# отменяться содержимым файла master.info, если вы не выключите

# ведомый сервер, удалите файл master.info и перезапустите ведомый сервер.

# По этой причине вы можете оставить приведенные ниже строки нетронутыми

# (закомментированные) и вместо них использовать CHANGE MASTER TO (см. выше)

#

# требуется уникальный идентификатор от 2 до 2^32 - 1

# (и отличный от master)

# по умолчанию равен 2, если установлен master-host

# но не будет функционировать как ведомое устройство, если пропущено

#server-id       = 2

#

# Мастер репликации для этого ведомого обязательный параметр

#master-host     =   <hostname>

#

# Имя пользователя, которое ведомый будет использовать для аутентификации при подключении

# к ведущему устройству обязательный параметр

#master-user     =   <username>

#

# Пароль, с которым ведомый будет аутентифицироваться при подключении к

# ведущим обязательный параметр

#master-password =   <password>

#

# Порт, на котором прослушивается мастер,

# необязательный параметр по умолчанию 3306

#master-port     =  <port>

#

# двоичное протоколирование не требуется для ведомых, но рекомендуется установить

#log-bin=mysql-bin

 

# Не комментируйте следующее, если вы используете таблицы InnoDB

#innodb_data_home_dir          = /opt/local/var/db/mysql5

#innodb_data_file_path           = ibdata1:10M:autoextend

#innodb_log_group_home_dir = /opt/local/var/db/mysql5

 

# Вы можете установить .._buffer_pool_size до 50 - 80 %

# оперативной памяти, но остерегайтесь слишком большого использования памяти.

#innodb_buffer_pool_size                 = 256M

#innodb_additional_mem_pool_size = 20M

 

# Установите размер .._log_file_size на 25 % от размера буферного пула

#innodb_log_file_size                    = 64M

#innodb_log_buffer_size                = 8M

#innodb_flush_log_at_trx_commit = 1

#innodb_lock_wait_timeout            = 50

 

[mysqldump]

quick

max_allowed_packet = 16M

 

[mysql]

no-auto-rehash

 

# Удалите следующий символ комментария, если вы не знакомы с SQL

#safe-updates

 

[myisamchk]

key_buffer_size = 128M

sort_buffer_size = 128M

read_buffer        = 2M

write_buffer       = 2M

 

[mysqlhotcopy]

interactive-timeout

 

Схожие статьи

Linux

Существующие решения, позволяющие использовать контроль версий для файлов конфигурации сервера

Linux

Да или нет в сценарии Bash

Linux

Как запускать приложения с графическим интерфейсом в контейнере Linux Docker

Linux

Как завершить дочерний процесс по истечении заданного времени ожидания в Bash