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

Как выбрать, какой Apache MPM использовать?

Linux

Почему происходит высокая загрузка ЦП при низкой средней нагрузке?

Linux

Запуск jmap, получение которого невозможно без открытия файла сокета

Linux

Как запустить процесс Node.js в фоновом режиме и запретить его завершение

×