поиск:
Полезные ссылки

  • Форум по MySQL

  • Статьи по MySQL

  • Вопросы по MySQL

  • MySQL.com


  • Базы данных

  • MySQL

  • PostgreSQL


  • PHP конференция 2005
    Подробности!

    4.7.3. Mysqld_multi, программа для управления множеством серверов MySQL

    Программа mysqld_multi предназначена для управления несколькими процессами mysqld, работающих на различных сокетах Unix и портах TCP/IP.

    Программа будет искать группу(группы) [mysqld#] в my.cnf (или заданных при помощи --config-file=... файлах), где # - любое положительное число, начиная с 1. Мы говорим про этот номер далее как про номер группы опций, или GNR. Номера групп различают группы опций одну от другой и используются как аргумент при запуске mysqld_multi чтобы указать, какие сервера вы хотите запустить, остановить или получить статус об. Эти группы должны быть такими же, как и обычная группа [mysqld] (например содержать опции для mysqld; см. в руководстве более подробную информацию), но с такими портом, сокетом и т.д., которые требуются для каждого отдельного процесса mysqld.

    mysqld_multi запускается в таком синтаксисе:

    Использование: mysqld_multi [OPTIONS] {start|stop|report} [GNR,GNR,GNR...]
    или            mysqld_multi [OPTIONS] {start|stop|report} [GNR-GNR,GNR,GNR-GNR,...]
    

    GNR здесь означает номер группы. Можно запускать, останавливать или создавать отчеты о любом GNR, или о нескольких из них одновременно. Получить пример о том, как бы вы могли настроить файл опций, можно так:

    shell> mysqld_multi --example
    

    В качестве разделителей в списке GNR применяются запятые, комбинации создаются при помощи тире. Последнее означает, что будут задействованы все номера GNR из диапазона GNR1-GNR2. Если не задан аргумент GNR, то все группы будут либо запущены, либо остановлены, либо будет выведен отчет об этих группах. Обратите внимание, что в списке GNR не должно быть никаких пропусков (пробелов, символов табуляции или пустых строк). Любые данные после пропуска будут игнорироваться.

    mysqld_multi поддерживает следующие опции:

    • --config-file=...

      Альтернативный файл конфигурации (config file). Примечание: данный файл не влияет на собственные опции этой программы (группа [mysqld_multi]), а только на группы [mysqld#]. Без этой опции поиск всех данных будет осуществляться только в обычном файле my.cnf.

    • --example

      Представляет пример файла конфигурации.

    • --help

      Выводит справочную информацию и завершает работу.

    • --log=...

      Файл журнала. Имя файла журнала и полный путь к нему. Примечание: если файл существует, записи будут добавляться в конец файла.

    • --mysqladmin=...

      Исполняемый файл mysqladmin, используемый для завершения работы сервера.

    • --mysqld=...

      Исполняемый файл mysqld, который будет использоваться. Обратите внимание: в этой опции можно также указывать safe_mysqld. Опции передаются mysqld. Необходимо только удостовериться, что в переменной окружения PATH имеется mysqld или что установлен safe_mysqld.

    • --no-log

      Вывод в stdout вместо журнала. По умолчанию журналы включены.

    • --password=...

      Пароль пользователя для доступа к mysqladmin.

    • --tcp-ip

      Подсоединение к серверу(ам) MySQL по TCP/IP вместо Unix-сокетов. Данная опция влияет на завершение работы сервера и создание отчетов. Если файл сокета отсутствует, сервер будет работать, но к нему можно будет обращаться только через порт TCP/IP. По умолчанию соединение осуществляется через сокет Unix.

    • --user=...

      Имя пользователя MySQL для mysqladmin.

    • --version

      Вывод номера версии и завершение работы.

    Некоторые примечания относительно mysqld_multi:

    • Удостоверьтесь, что пользователь MySQL, останавливающий mysqld (например, при помощи mysqladmin), имеет один пароль и имя пользователя для всех директорий данных, к которым производится доступ (имеется в виду - к базе данных mysql). Убедитесь также, что пользователь имеет привилегию Shutdown_priv! Если имеется несколько директорий с данными и несколько различных баз данных mysql с различными паролями для пользователя root в MySQL, можно создать некоего общего пользователя multi_admin для всех, с одинаковым паролем (см. ниже). Сделать это можно так:

      shell> mysql -u root -S /tmp/mysql.sock -proot_password -e
      "GRANT SHUTDOWN ON *.* TO [email protected] IDENTIFIED BY
      

      See Раздел 4.2.6, «Как работает система привилегий». Эти действия нужно выполнять для каждого mysqld для каждой имеющейся директории данных (для этого нужно выбрать другой сокет -S=...).

    • pid-файл играет очень важную роль, если для запуска mysqld используется сценарий safe_mysqld (например, --mysqld=safe_mysqld). Преимущество использования safe_mysqld вместо mysqld заключается в том, что safe_mysqld ``бережет'' каждый процесс mysqld и перезапустит его, если mysqld-процесс умрет по сигналу 9 или подобному (например, в случае ошибки сегментации - хотя, конечно, уж этой ошибки MySQL в принципе совершать не должен;). Пожалуйста, обратите внимание: может оказаться, что сценарий safe_mysqld требуется запускать из определенного каталога. Это означает, что прежде чем запустить mysqld_multi, прийдется перейти в нужный каталог. Если при запуске возникнут проблемы, пожалуйста, просмотрите сценарий safe_mysqld. Обратите внимание на следующие строки:

      --------------------------------------------------------------------------
      MY_PWD=`pwd` Check if we are starting this relative (for the binary
      release) if test -d /data/mysql -a -f ./share/mysql/english/errmsg.sys
      -a -x ./bin/mysqld
      --------------------------------------------------------------------------
      See Раздел 4.7.2, «safe_mysqld, оболочка mysqld».
      

      Этот тест может пройти успешно, однако возможны и проблемы.

    • Не запускайте несколько демонов mysqld с одной и тожй же директорией данных. Используйте различные директории с данными, если Вы четко не уверены в своих действиях!

    • Файл сокета и порт TCP/IP должны быть различными для каждого демона mysqld.

    • Первая и пятая группы mysqld были преднамеренно не включены в пример. В файле конфигурации могут быть ``промежутки'' - это увеличивает гибкость. Порядок, в котором запускаются или завершают работу демоны mysqld, зависит от порядка, в котором они указаны в файле конфигурации.

    • Когда нужно обратиться к некоторой группе (GNR) в этой программе, просто используйте номер в конце имени группы. Например, GNR для группы [mysqld17] - 17.

    • Для mysqld можно использовать опцию --user, но для этого сценарий mysqld_multi должен быть запущен от root. Наличие опции в файле конфигурации не имеет значения; вы получите предупреждение только в случаях, если не являетесь суперпользователем и демон mysqlds запущен под вашим аккаунтом Unix. Важно: удостоверьтесь, что для pid-файла и директории с данными имеется доступ для чтения+записи(+выполнения - для директории с данными) для того пользователя Unix, который запускает определенный процесс mysqld. Не используйте для этого аккаунт root в Unix, если Вы не уверены в своих действиях!

    • Очень важно: удостоверьтесь, что вы понимаете значения опций, которые передаются демонам mysqld, и что осознаете то, почему могут быть нужны отдельные процессы mysqld. Запуск нескольких демонов mysqld с одной директорией данных не увеличит производительность в многопоточной системе!

    See Раздел 4.1.4, «Запуск нескольких серверов MySQL на одном компьютере».

    Пример файла конфигурации для mysqld_multi.

    # Этот файл может находиться в вашей домашней директории (~/.my.cnf) или
    /etc/my.cnf
    # Version 2.1 by Jani Tolonen
    [mysqld_multi]
    mysqld = /usr/local/bin/safe_mysqld
    mysqladmin = /usr/local/bin/mysqladmin
    user = multi_admin
    password = multipass
    [mysqld2]
    socket = /tmp/mysql.sock2
    port = 3307
    pid-file = /usr/local/mysql/var2/hostname.pid2
    datadir = /usr/local/mysql/var2
    language = /usr/local/share/mysql/english
    user = john
    [mysqld3]
    socket = /tmp/mysql.sock3
    port = 3308
    pid-file = /usr/local/mysql/var3/hostname.pid3
    datadir = /usr/local/mysql/var3
    language = /usr/local/share/mysql/swedish
    user = monty
    [mysqld4]
    socket = /tmp/mysql.sock4
    port = 3309
    pid-file = /usr/local/mysql/var4/hostname.pid4
    datadir = /usr/local/mysql/var4
    language = /usr/local/share/mysql/estonia
    user = tonu
    [mysqld6]
    socket = /tmp/mysql.sock6
    port = 3311
    pid-file = /usr/local/mysql/var6/hostname.pid6
    datadir = /usr/local/mysql/var6
    language = /usr/local/share/mysql/japanese
    user = jani
    

    See Раздел 4.1.2, «Файлы параметров my.cnf».

     
    © 1997-2005 PHP Club Team
    Rambler's Top100