Иногда возникают обстоятельства, когда необходимо запустить несколько серверов на одном компьютере. Например, может понадобиться произвести тестирование новой версии MySQL, не изменяя текущей установки программы. Или еще вариант: вы являетесь поставщиком услуг Internet, который хочет предоставить независимые установки MySQL для различных клиентов.
Если необходимо запустить
несколько серверов, то проще всего
скомпилировать серверы с
различными портами TCP/IP и файлами
сокетов (see Раздел 4.7.3, «Mysqld_multi, программа для управления множеством серверов MySQL»).
Предположим, что существующий
сервер настроен на принятые по
умолчанию номер порта и файл
сокета. Настроим новый сервер при
помощи команды configure
следующим образом:
shell>./configure --with-tcp-port=port_number \--with-unix-socket-path=file_name \--prefix=/usr/local/mysql-3.22.9
Здесь port_number и
file_name должны отличаться
от принятого по умолчанию номера
порта и пути файла сокета, а
значение --prefix должно
указывать каталог установки,
который отличается от того, в
котором установлен текущий MySQL.
Проверить сокет, используемый установленным на данный момент сервером MySQL, можно при помощи следующей команды:
shell> mysqladmin -h hostname --port=port_number variables
Обратите внимание: если указать
``localhost'' как имя
удаленного компьютера,
mysqladmin по умолчанию будет
использовать сокеты Unix вместо TCP/IP.
В MySQL 4.1 вы также можете указать
протокол, который надлежит
использовать с помощью опции
--protocol=(TCP | SOCKET | PIPE | MEMORY).
Если на используемом порту находится сервер MySQL, то будет выдан список самых важных настраиваемых переменных в MySQL, включая имя сокета.
Повторно компилировать новый
сервер MySQL нет необходимости, его
просто нужно запустить с другими
параметрами для порта и сокета.
Используемые порт и сокет можно
изменить, указав их как параметры
запуска для safe_mysqld:
shell> /path/to/safe_mysqld --socket=file_name --port=port_number
Модуль mysqld_multi может
также в качестве аргумента
принимать safe_mysqld (или
mysqld) и передавать
параметры из файла конфигурации
для safe_mysqld и дальше для
mysqld.
Если новый сервер запускается на
том же каталоге базы данных, что и
другой сервер с включенной записью
в журналы, необходимо также
указать имена файлов журналов для
safe_mysqld при помощи
параметров --log,
--log-update или
--log-slow-queries. Иначе оба
сервера могут попытаться
осуществить запись в один и тот же
файл журнала.
Предупреждение: обычно нельзя допускать, чтобы два сервера одновременно заносили данные в одну и ту же базу данных! Если ваша операционная система не поддерживает безотказную блокировку доступа, это может привести к возникновению неприятных сюрпризов!
Если для второго сервера
понадобится использовать другой
каталог базы данных, можно
воспользоваться параметром
--datadir=path для
safe_mysqld.
Обратите
внимание: запуск нескольких
серверов MySQL (mysqlds) на
различных компьютерах с доступом к
одному каталогу данных через
сетевую файловую систему обычно не
приводит ни к чему хорошему!
Проблема состоит в том, что сетевая
файловая система становится узким
местом для передачи данных. Она не
предназначена для такого
использования. И даже в этом случае
придется искать решение, которое
позволит обеспечить отсутствие
конфликтов между двумя или более
модулями mysqld. На данный
момент не существует платформы,
которая обеспечивает на 100%
надежную блокировку доступа к
файлам (обычно демон lockd)
во всех возможных ситуациях. Кроме
того, существует еще одна
опасность при использовании
сетевой файловой системы: эта
система может еще больше усложнить
работу программы lockd.
Поэтому лучше смотреть на вещи
проще и забыть об этой идее.
Оптимальным решением будет
использование одного компьютера с
несколькими центральными
процессорами и с операционной
системой, которая эффективно
управляет потоками.
Если нужно подсоединиться к серверу MySQL, который работает с портом, отличным от того, с которым откомпилирован ваш клиент, можно воспользоваться одним из следующих методов:
Запустите клиент с параметрами
--host 'hostname' --port=port_number,
чтобы подсоединиться через TCP/IP,
или [--host localhost
--socket=file_name], чтобы
подсоединиться через сокет Unix.
Запускайте ваш клиент с
--protocol=tcp для
подключения по TCP/IP и
--protocol=socket для
подключения через сокет Unix.
В своей программе на языке C или Perl можно задать аргументы порта или сокета при подсоединении к серверу MySQL.
При использовании модуля Perl
DBD::mysql можно прочитать
параметры из файлов параметров
MySQL (see Раздел 4.1.2, «Файлы параметров my.cnf»).
$dsn = "DBI:mysql:test;mysql_read_default_group=client; mysql_read_default_file=/usr/local/mysql/data/my.cnf" $dbh = DBI->connect($dsn, $user, $password);
Задайте переменные окружения
MYSQL_UNIX_PORT и
MYSQL_TCP_PORT, чтобы указать
на сокет Unix и порт TCP/IP до запуска
клиентов. Если обычно
используются конкретные сокет
или порт, команды для задания
этих переменных окружения
необходимо поместить в свой файл
.login (see
Приложение F, Переменные окружения).
Укажите принятые по умолчанию
сокет и порт TCP/IP в файле
.my.cnf в своем домашнем
каталоге (see Раздел 4.1.2, «Файлы параметров my.cnf»).
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
