изменение пути по умолчанию my.cnf в MySQL - PullRequest
5 голосов
/ 08 января 2011

У меня есть два экземпляра mysql на одной машине. Установки находятся в / usr / loca / mysql1 и / usr / local / mysql2.

У меня есть отдельные файлы my.cnf, расположенные в / etc / mysql1 и / etc / mysql2. Я установил первый экземпляр моего sql с использованием исходного кода и с опцией --prefix = / usr / local / mysql1. Второй, который я получил, скопировав и вставив ту же директорию в / usr / local / mysql2.

Когда я запускаю демон mysql в /usr.local/mysql/libexec, он читает файл my.cnf в / etc / mysql1. И если я запускаю демон mysql в / usr / local / mysql2, он читает тот же файл my.cnf. У меня есть отдельные номера портов и файлы .sock, определенные в файле .cnf в этих двух местах.

Я могу прочитать файл my.cnf во втором месте, используя параметр --defaults-file = / etc / mysql2 / my.cnf при запуске mysqld. Мне не нужно вводить это каждый раз, когда я запускаю демон.

Если у меня будет больше экземпляров, как я могу указать правильный файл my.cnf для чтения каждому демону mysql. Какова причина для ссылок mysqld с файлом my.cnf.

как мне заранее определить местоположение файла my.cnf для каждого экземпляра.

Ответы [ 2 ]

7 голосов
/ 08 января 2011

Как вы уже обнаружили, MySQL имеет скомпилированное местоположение поиска для своего файла конфигурации. Хотя вы могли бы перекомпилировать себя, изменив это, вы также обнаружили параметр - defaults-file в mysqld , который указывает ему использовать совершенно другой путь конфигурации. В сочетании с - data-dir это означает, что вы можете запускать несколько экземпляров MySQL, привязанных к разным портам (и адресам, если нужно), и работать с совершенно отдельными наборами данных, работая с одними и теми же двоичными файлами и библиотеки.

Традиционно в большинстве дистрибутивов операционной системы используется один сценарий инициализации для запуска экземпляра MySQL «по умолчанию»; то есть тот, который установлен в «обычном» месте и со стандартным путем конфигурации. Хотя это относится к наиболее распространенному случаю, то, что вам нужно, немного отличается, поэтому вам нужно создать отдельные сценарии для запуска отдельных экземпляров.

Если вы планируете развертывать множество экземпляров MySQL на одной и той же машине (и мне придется спросить, почему), то вы можете написать собственный скрипт инициализации, который каким-то образом «обнаруживает» каждый из они (возможно, путем проверки некоторого каталога, содержащего «общий» макет), а затем зацикливаются на них, начиная каждый из них. Конечно, один и тот же скрипт инициализации должен быть в состоянии найти и правильно отключить каждый из них.

0 голосов
/ 08 января 2011

Я думаю, что единственный верный способ - это скомпилировать из исходного кода с опцией префикса.Либо так, либо создайте сценарий bash, который запускает mysql2 с параметром --defaults-file и затем использует его для запуска.

Однако «создать» другую установку, как вы это сделали, не очень хорошо.Когда вы компилируете пакет, PREFIX жестко кодируется в исполняемый файл.Поэтому, когда бы он ни искал ресурс, он начинается с этого префикса, если не указано иное с параметрами командной строки.

Так что на вашем месте я бы просто перекомпилировал из исходного кода новый префикс.

...