MySQL & mSQL

         

Запуск mSQL


mSQL - это действительно единственное ядро базы данных типа «завел и поехал». Иными словами, можно установить mSQL, запустить сервер и сразу заняться делом. Серверный процесс mSQL называется msql2d (для серверов mSQL 1 он называется msqld). Этот исполняемый файл и все утилиты, поступающие с дистрибутивом mSQL, находятся в каталоге bin. Запустить экземпляр mSQL можно, просто введя msql2d без всяких параметров командной строки.

Такая реализация по умолчанию не всегда вас удовлетворит. В большинстве случаев потребуется отредактировать файл msql.conf в каталоге дистрибутива mSQL. Этот файл конфигурации mSQL 2 (в mSQL 1 он отсутствует) позволяет определить несколько часто используемых параметров. Его изменение обычно необходимо тогда, когда вы используете какой-нибудь прекомпилированный дистрибутив.

Демон mSQL - не ветвящийся процесс. Это означает, что запуск его из командной строки оставит процесс работать на терминале, пока вы явно не нажмете CTRL-C, чтобы прекратить его, или не переведете процесс в фоновый режим. Под Unix можно запустить сервер mSQL из командной строки в фоновом режиме, введя команду:

msqld2 &

Следующий сценарий запускает процесс сервера mSQL при запуске системы и корректно завершает его при остановке системы:

#!/bin/sh

if [ $1 - "start" ]; then

if [ -x /usr/local/Hughes/bin/msql2d ]; then

su msql -c '/usr/local/Hughes/bin/nisql2d &'

fi

else

if [ $1 = "stop" ]; then

if [ -x /usr/local/Hughes/bin/msqladmin ]; then

su msql -c '/usr/local/Hughes/bin/msqladmin shutdown'

fi



fi

fi

В этом сценарии предполагается, что вы запускаете mSQL в Unix с идентификатором пользователя msql. Разумеется, его нужно заменить конкретным ID пользователя, а также заменить /usr/'local/Hughes именем каталога, в который вы установили mSQL.

Поскольку версия для Win32 не работает пока как служба NT, можно запускать mSQL из папки Автозагрузка (StartUp), просто поместив ярлык для файла msql2d.exe в папку Автозагрузка (использование команды msqladmin мы опишем ниже в данной главе).


Хотя mSQL является очень устойчивой программой, иногда случаются какие-то неполадки, и сервер «умирает». В особенности ранние версии mSQL имели проблемы с устойчивостью, приводившие к неожиданному краху сервера. На этот случай желательно запустить какое-либо средство для проверки состояния сервера баз данных.

Приведенный ниже сценарий Unix старательно проверяет, работает ли еще демон msql2d. Если сервер не активен, он перезапускается, и администратору машины посылается сообщение.

#!/bin/sh

# Извлечь ID процесса демона базы данных

# Это годится для mSQL 2; для mSQL 1

# Строка должна быть другой:

# PID='cat /usr/local/Minerva/msqld.pid' PID='cat /usr/local/Hughes/msq!2d.pid'

# Далее проверяется активность процесса сервера.

# Эта строка пригодна для систем BSD (Linux)

ALIVE='ps aux grep $PID | grep -v grep | awk '{print $2}"

# Для систем SysV (Solaris) раскомментируйте следующую строку

#ALIVE='ps -et grep $PID | grep -v grep | awk '{print $2}"

if [ $ALIVE ]

then

REALLY_ALIVE='msqladmin version' DATE='date'

#Если 'ERROR', или если

# выдачи вообще не было, msqladmin

# не могла подключиться к серверу баз данных

if ! echo $REALLY_ALIVE | grep "^ERROR"

then

exit

fi

if [ ! $REALLY_ALIVE ]

then exit;

fi

else

# Для mSQL 1 должно быть /usr/local/Minerva/hin/msqld &

# for mSQL installations /usr/local/Hughes/bin/msql2d &

mail -s "mSQL daemon restarted" root@yourmachine.com <<EOM

The mSQL daemon died unexpectedly and was restarted on $DATE.

Sincerely,

The mSQL Watchdog

EOM

fi

После запуска mSQL может обмениваться данными с окружающим миром двумя способами. Связь с Интернетом происходит через порт TCP/IP. По умолчанию mSQL слушает порт 1112. mSQL2 слушает порт 1114. Вы можете при желании изменить номер порта либо во время компиляции (mSQL 1), либо через файл конфигурации (mSQL 2).

Локальная связь происходит через сокеты Unix. Сокеты Unix выглядят обычными файлами файловой системы Unix. От обычных файлов их можно отличить по символу, следующему за именем при использовании флага `F` в команде Is. mSQL использует файл /deu/msql, в то время как mSQL 2 использует файл /usr/local/Hughes/msql2.sock.



Запуск нескольких демонов

Иногда может оказаться полезным запустить несколько серверов базы данных одновременно. Наиболее часто причиной этого служит желание увеличить производительность. Поскольку mSQL имеет однопо-точную архитектуру, она обрабатывает запросы последовательно. Если значительная часть обращений происходит лишь к одной из баз данных и даже таблиц, приложения, обращающиеся к другим базам данных или таблицам, могут простаивать длительное время в ожидании обработки запроса.

В многопоточном сервере, таком как MySQL, вы не столкнетесь с этой проблемой, но и в mSQL можно обойти ее, запустив несколько процессов mSQL. Недостатком такого решения является то, что к одной базе данных может обращаться только один демон. Без этого ограничения один демон мог бы переписывать изменения, вносимые другим. Осуществить такое ограничение можно, указав каждому работающему экземпляру msql2d отдельный исходный каталог для хранения баз данных. В mSQL 2 это можно сделать через параметры командной строки и файл конфигурации. Для mSQL 1 придется компилировать и устанавливать mSQL несколько раз в разные каталоги.

Чтобы установить для mSQL 2 второй каталог, используйте следующие команды:

mkdir -p /usr/local/second_database/msqldb/. tmp

ср /usr/local/Hughes/msql.conf /usr/local/Hughes/msql.acl\

/usr/local/second_database

chown -R msql /usr/local/second_database

Некоторые Unix-системы используют mkdirs вместо mkdir -p, в других же такая возможность может вообще отсутствовать, и тогда каждый каталог придется создавать отдельно. Вам придется также заменить идентификатор пользователя, под именем которого вы запускаете msql2d, если он отличен от «msql». В Windows и OS/2 процедура та же, за исключением названий команд и символа-разделителя пути.

Когда каталоги созданы и файлы скопированы, нужно отредактировать файл msql.conf из нового каталога, чтобы переменная Inst_Dir указывала на /usr/local/'second_database, а значение TCP_Port не конфликтовало с другими TCP-службами сервера. Значение Unix_Port можно не изменять, поскольку новый сокет будет образован в новом каталоге.



Для запуска нового демона введите ту же команду msql2d со следующими параметрами:

msql2d -f /usr/local/second_database/msql. conf

При работе с mSQL 1 положение немного сложнее. Придется откомпилировать и установить mSQL столько раз, сколько экземпляров mSQL вы хотите запускать. Все ваши утилиты будут работать с любым экземпляром сервера.

Файл конфигурации mSQL

Мы уже сталкивались с файлом конфигурации mSQL, но еще не вникали в мелкие подробности. В mSQL 1 все, кроме безопасности, определялось во время компиляции. В mSQL 2 есть файл конфигурации, позволяющий управлять поведением сервера mSQL во время работы. Ниже дан пример файла конфигурации.

[general]

Inst_Dir = c:\usr\local\Hughes

mSQL_User = msql

Admin_User = root

Pid_File = %I\msql2d.pid

TCP_Port = 1114

Unix_Port = %I\msql2.sock

[system]

Msync_Timer = 30

Host_Lookup = True

Read_0nly = False

Remote_Access = True

Local_Access = True

[w3-msql]

Auth_Host = NULL

Footer = True

Force_Private = False

Сценарий конфигурации разделен на секции, как ini-файл в Windows, состоящие из пар ключ-значение. Сейчас для нас представляет интерес только секция general.

Inst_Dir

Каталог, в который установлена mSQL. Более точно, это каталог, в котором mSQL ищет ваш ACL-файл, РID-файл для mSQL, и каталог msqldb, в котором размещаются каталоги баз данных. В результате можно поддерживать несколько серверов mSQL с единым набором исполняемых файлов.

mSQL_User

ID пользователя, от имени которого запускается процесс mSQL.

Admin_User

ID пользователя, которому разрешено выполнять команды администрирования, такие как msqladmin, обсуждаемая в следующем параграфе.

TCP_Port

Порт TCP/IP, который будет слушать сервер. В Unix номер порта, меньший 1024, можно выбрать, только если сервер mSQL запущен суперпользователем.

Unix_Port

Имя файла сокета Unix. В этом файле мы использовали переменную % 1% вместо Inst_Dir.




Содержание раздела