4.1.4 Запуск нескольких серверов MySQL на одном компьютере
Иногда возникают обстоятельства, когда необходимо запустить несколько
серверов на одном компьютере. Например, может понадобиться произвести
тестирование новой версии MySQL, не изменяя текущей установки программы.
Или еще вариант: вы являетесь поставщиком услуг Internet, который хочет
предоставить независимые установки MySQL для различных клиентов.
Если необходимо запустить несколько серверов, то проще всего
скомпилировать серверы с различными портами TCP/IP и файлами сокетов (see section 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, то будет выдан список
самых важных настраиваемых переменных в 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, который работает с портом,
отличным от того, с которым откомпилирован ваш клиент, можно
воспользоваться одним из следующих методов: