su13@pochta.ru

| Первый | Второй | Третий | Четвёртый | Пятый | Шестой | Седьмой |


Глава №5.

mSQL

Концепции баз данных и их проектирование имеют очень важное значение, но вы, вероятно, хотите приступить к непосредственной работе с MySQL или mSQL. He исключено, что вы уже выбрали ту или иную СУБД соответственно своим потребностям. Возможно, однако, вы надеетесь, что эта книга поможет вам принять такое решение. В этой главе мы подробно разберем mSQL. Если вы уже стали приверженцем MySQL, то эту главу можно пропустить. Напротив, если вас привлекает mSQL или вы хотите больше узнать о внутренних механизмах обеих баз данных, следует начать с этой главы.

mSQL является реляционной системой управления базами данных (РСУБД), открывшей эру дешевых баз данных малого и среднего масштаба с поддержкой SQL. Малые размеры, впечатляющая производительность и простота изучения сделали ее предпочтительным выбором растущего числа разработчиков программ для Интернет, которым не достает времени, чтобы стать экспертами в области программирования баз данных. Автор mSQL намеренно стремился к достижению этих целей, приступая к созданию программного продукта, способного заполнить зияющий пробел в ряду РСУБД.

Архитектура

Дэвид Хьюз преследовал три цели, создавая mSQL:

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

Скорость и размеры идут рука об руку. Как обнаружил Хьюз, если начать с самого основания и реализовать лишь самые необходимые функции, можно разработать SQL-сервер, который будет требовать столь мало ресурсов, что для его успешного использования не потребуется отдельной машины. В результате, mSQL обладает значительной частью функциональности основных РСУБД, требуя значительно меньших ресурсов.

Скорости и размера, достигнутых в mSQL, было бы достаточно для того, чтобы успешно заменить Postgres в проекте Minerva. Хьюз, однако, хотел изменить и ту модель поведения, которая, собственно, заставила его искать альтернативу. Хьюз спроектировал mSQL так, чтобы та могла обрабатывать множественные одновременные подключения в рамках одного процесса. В результате получается маленький, быстрый, эффективный SQL-сервер, способный одновременно обрабатывать несколько запросов - локально или по сети.

Для реализации своих проектных целей Хьюзу пришлось ограничить функциональность сервера. Диалект SQL, поддерживаемый mSQL, является подмножеством стандарта ANSI SQL2, содержащим наиболее употребительные команды, такие как CREATE, INSERT, SELECT, UPDATE и DELETE. Хьюз отказался от ресурсоемких операций, вроде поддержки транзакций. В том типе приложений, которые используют mSQL, функциональность, опущенная Хьюзом, обычно не требуется.

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

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

mSQL поддерживает два типа соединений со стороны клиента. Удаленные клиенты подключаются к серверу через известный порт TCP/IP. Используя TCP/IP, база данных mSQL может предоставлять доступ любому компьютеру в мире через Интернет. Локальные соединения тоже могут производиться через TCP/IP, но лучшей производительности можно добиться, используя стандартный сокет Unix, что эффективнее примерно на 20%.

Рис. 5-1. Архитектура клиент,/сервер в mSQL

С mSQL связан набор программ, позволяющих осуществлять полный доступ к базе данных. Монитор msql позволяет пользователю непосредственно направлять запросы серверу. Хотя во время разработки этот инструмент полезен, большинству пользователей необходим какой-либо интерфейс для доступа к базе данных посредством какого-либо приложения. Для поддержки разработки приложений mSQL имеет встроенный API на языке С, позволяющий любой С-программе соединяться с сервером mSQL через TCP/IP или сокет Unix.

mSQL поддерживает также сетевой протокол, позволяющий подключаться к серверу по сети, используя другие языки, без С API. С помощью этих двух интерфейсов разработчики, использующие множество языков, разработали библиотеки для подключения к mSQL почти из любого известного языка. В данной книге рассказывается об использовании API для С, Perl, Java и Python.

Версии mSQL

После выхода mSQL сообщество разработчиков программ немедленно подверглось его воздействию. Впервые появилась возможность работы с доступным по цене, поддерживающим SQL, ядром базы данных. Одной из поразительных особенностей было то, что оно не только было сравнимо по производительности с основными коммерческими продуктами, но на практике было быстрее - иногда более, чем в 100 раз -в тех областях, для которых предназначалось.

Однако в наше время вычислительная среда долго не стоит на месте. С возникновением широкомасштабного сотрудничества через Интернет не стало проектов, недоступных для преданных им групп программистов. К 1996 году стали появляться другие недорогие реализации SQL, MySQL в их числе, и mSQL перестала существовать в одиночестве.

В продолжение 1990-х Хьюз разрабатывал и совершенствовал mSQL. Однако ядро базы данных в итоге достигло той точки, где дальнейшая разработка требовала глубокого пересмотра всего проекта. Такая большая работа потребовала бы много времени, поскольку новый проект влечет новые ошибки и промахи. Одновременно необходимо осуществлять и поддержку существующего продукта. Таким образом, mSQL 2 появилась как переработка ядра базы данных при продолжении одновременной поддержки существующего продукта - mSQL 1.

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

Основные изменения, произведенные в mSQL 2 в сравнении с mSQL 1, следующие:

Возросшие устойчивость и производительность

В первом выпуске mSQL 2 были решены все известные проблемы со стабильностью в mSQL 1. Были устранены утечки памяти, а код тщательно протестирован для выявления ошибок. Общая производительность выросла, несмотря на добавление новых характеристик.

Улучшенная поддержка индексов

В первой версии mSQL использовалась очень слабая схема индексирования. В каждой таблице можно было иметь только один индекс, состоящий только из одной колонки, - первичный ключ. В mSQL 2 индексирование полностью переработано с целью поддержки более сложных и часто встречающихся задач. Теперь можно иметь несколько индексов для каждой таблицы и составлять их более чем из одной колонки. Индексирование теперь поддерживает индексные файлы как в виде В-дерева, так и в стиле AVL.

Дополнительные типы данных

В mSQL 2 добавились многие типы данных, что приближает его к полной реализации спецификации ANSI SQL2. Наряду с MONEY, DATE и TIME mSQL 2 поддерживает теперь и тип TEXT. В первоначальной версии mSQL все поля были фиксированной длины, и поэтому текстовые поля типа CHAR имели предустановленный размер. Часто для поддержки таких атрибутов, как адреса электронной почты или названия книг, приходилось определять большое поле типа CHAR, что приводило к неоправданному расходу памяти. Например, для поля адреса электронной почты вы определили бы поле CHAR(35). Даже если адрес оказывался «xxx@imaginary.com», mSQL использовал все 35 символов поля. Еще хуже то, что если адрес оказывался длиннее 35 символов, вам сильно не повезло. Новый тип данных TEXT решает обе проблемы, позволяя вам задать среднюю длину поля. Все, превышающее этот размер, будет храниться в буфере переполнения. При меньшем размере лишние символы не будут записываться. К сожалению, поля типа TEXT имеют недостатки, не позволяющие использовать их в качестве индексов и употреблять в предложениях типа LIKE.

Улучшенный сервис и поддержка API

Стандартный инструментарий, поставляемый с mSQL, улучшен с целью поддержки всех новых характеристик. Хьюз добавил новые функции, такие как, например, копирование и переименование таблиц в msqladmin. Приложение W3-msql для взаимодействия с WWW существенно переделано и дополнено. Язык сценариев переработан в Lite - язык с прямой поддержкой взаимодействия WWW и баз данных.

Если вы новичок в mSQL, то почти наверняка начнете работать с mSQL 2. Если вы имеете дело с уже работающей системой, то следует скрупулезно учитывать различия между обеими версиями, особенно если вы собираетесь перейти на mSQL 2.

Установка mSQL

Первым шагом при работе с mSQL является, естественно, загрузка и установка. Как вы это сделаете, зависит от типа предполагаемой платформы. mSQL появилась как приложение для Linux, и это та платформа, которую поддерживает Хьюз. Если у вас работает какая-то разновидность Unix, mSQL, скорее всего, сможет на ней работать. Даже если нет, mSQL поставляется с исходным текстом, и опытный С-программист исправит места, создающие несовместимость. Дистрибутив для Unix находится по адресу http://www.hughes.com.au.

Если вы работаете под Windows или OS/2, для вас тоже не все потеряно: переложения для Win32 и OS/2 также активно поддерживаются. Последние версии mSQL для PC находятся по адресу http://blnet.com/ msqlpc/. Хотя эти приложения относительно новые, они всегда немного отстают от самых свежих версий, предоставляемых Хьюзом. В момент написания книги номер текущей версии для Unix был 2.0.7, текущей версии для Win32 - 2.0.4.1, и текущей версии для OS/2 - 2.06. Меньше повезло пользователям Мае. На Макинтош перенесены только клиентские средства для mSQL.

Процедура установки зависит от платформы. Пользователям Unix придется компилировать свой дистрибутив, а для Win32 и OS/2 поставляются прекомпилированные двоичные файлы. Поскольку процедура установки меняется от одной версии к другой, мы не станем здесь останавливаться на ее подробностях. Вам следует изучить документацию, предоставленную вместе с вашим дистрибутивом, поскольку она наверняка соответствует точной процедуре установки для вашей версии.

Запуск 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.

Администрирование баз данных

Теперь, когда ваш сервер баз данных работает 24 часа в сутки 7 дней в неделю, надо заставить его обслуживать ваши потребности в доступе к базам данных.

Утилита msqladmin

Утилита msqladmin является вашим главным инструментом администрирования баз данных. Она поддерживает создание, удаление, копирование, переименование и исследование ваших баз данных mSQL. Если вы вернетесь к нашему обсуждению того, что такое база данных в главе 1, то вспомните, что mSQL сама по себе - не база данных. Ваши базы данных - это группы файлов в каждом подкаталоге каталога msqldb. mSQL - система управления этими базами. Одна СУБД одновременно может обслуживать много баз данных. Утилита msqladmin позволяет администрировать базы данных для выбранного сервера.

Создание баз данных

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

msqladmin create DATABASENAME

В этой команде DATABASENAME - имя новой базы данных, которую вы хотите создать. Команда создает новую пустую базу данных с указанным вами именем. Как мы говорили раньше, база данных в mSQL — просто каталог в каталоге msqldb в том месте, куда вы установили mSQL. mSQL помещает все данные, относящиеся к вашей новой базе данных, в файлы, находящиеся в этом каталоге. Например, если вы создаете базу данных с именем «mydata», используя установку mSQL по умолчанию, будет создан каталог /usr/local/Hughes/msqldb/mydata.

Удаление базы данных

Во время разработки нового приложения баз данных вы, вероятно, захотите создать несколько баз данных для поддержки процесса разработки. Например, в процессе разработки принято иметь различные базы данных для разработки, тестирования и окончательного результата. По завершении разработки можно освободиться от баз данных для разработки и тестирования. Утилита msqladmin имеет параметр «drop», позволяющий удалить базу данных:

msqladmin drop DATABASENAME

Как и в команде msqladmin create, DATABASENAME является именем базы данных, которую вы хотите уничтожить. mSQL не позволит вам случайно удалить базу данных. После ввода этой команды она предупредит вас, что удаление базы данных потенциально очень опасно и попросит вас подтвердить свое намерение. После удаления базы данных вы можете убедиться в том, что в каталоге msqldb больше нет каталога, служившего ранее этой базой данных.

Переименование и копирование баз данных

Удобной новой возможностью, включенной в mSQL 2, является возможность переименования и копирования баз данных.

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

msqladmin move OLDNAHE NEWNAME

Например, если вы создали базу данных «midata» с ошибкой в имени и хотите исправить ее, нужно выполнить команду:

msqladmin move midata mydata

Копирование столь же просто:

msqladmin copy mydata mynewdata

Состояние сервера

Если вы работали с MySQL, то обратите внимание, что контроль состояния сервера - область, в которой mSQL явно не силен. Утилита msqladmin служит вам интерфейсом к контролю состояния серверов. msqladmin stats в mSQL 2 выводит на экран следующее:

Server Statistics

-------------------------

Mini SQL Version 2.0.4.1 - Forge Alpha Build #9

Copyright (c) 1993-94 David J. Hughes

Copyright (c) 1995-98 Hughes Technologies Pty Ltd. All rights reserved.

Config file : c:\usr\local\hughes\msql.conf Max connections : 61 Cur connections : 1

Running as user : UID 500

Connection table :

Sock Username Hostname Database Connect Idle Queries,


Здесь требуется некоторое пояснение:

Max connections

Максимальное количество одновременных соединений, которое может обработать сервер.

Cur connections

Число подключений к серверу в данный момент. Sock

Номер сокета Интернет, используемый mSQL для идентификации каждого соединения.

Username

Имя пользователя, подключенного к серверу.

Hostname

Имя машины, подключенной к серверу. «Unix sock» указывает на локальное подключение через сокет Unix.

Database

Имя базы данных, к которой пользователь подключен в данный момент. «No DB» означает, что клиент не выбрал базу данных.

Connect

Общее время соединения клиента с сервером в часах и минутах.

Idle

Число минут, прошедших с момента последнего запроса пользователя.

Queries

Общее количество запросов, посланных клиентом через данное соединение.

Помимо команды msqladmin stats можно получить другую, более статичную информацию с помощью команды msqladmin version. Ее выдача может выглядеть так:

Version Details :-

msqladmin version 2.0.4,1 - Forge Alpha Build #9

mSQL server version 2.0.4,1 - Forge Alpha Build #9

mSQL protocol version23

mSQL connection 127.0.0.1 via TCP/IP

Target platform CYGWIN32_NT-4.0-1586

Configuration Details :-

Default config file c:\usr\local\hughes/msql.conf

TCP socket 1114

Unix socket c:\usr\local\Hughes\msql2.sock

mSQL user msql

Admin user root

Install directory c:\usr\local\Hughes

PID file location c:\usr\local\Hughes\msql2d.pid

Memory Sync Timer 30

Hostname Lookup False

Каждое значение, выводимое командой msqladmin version, может быть установлено в конфигурационном файле mSQL 2.

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

Завершение работы сервера

Ранее в этой главе в примере сценария запуска/остановки для Unix вы видели, как завершать работу сервера mSQL. Команда такая:

msqladmin shutdown

Эта команда осуществляет корректное завершение работы сервера mSQL.

Перезагрузка при изменении параметров сервера

Если вы производите изменения в ACL mSQL, нужно дать серверу команду на перезагрузку этих изменений. Для этого вводится команда:

msqladmin reload

Мы расскажем о mSQL ACL позднее в этой главе.

Параметры командной строки msqladmin

Во всех приведенных до сих пор примерах msqladmin использовалась для администрирования локального сервера mSQL с файлом конфигурации, созданным по умолчанию. Эту утилиту можно использовать для администрирования серверов на других машинах с другими конфигурационными файлами. Полный синтаксис утилиты msqladmin таков:

msqladmin [-h host] [-f conf] [-q] COMMAND

Параметры имеют следующее значение:

-h

Имя машины, на которой работает администрируемый сервер.

-f

Файл конфигурации для сервера, которым вы хотите управлять. Скорее всего, вы будете использовать этот параметр при работе нескольких экземпляров mSQL, как описано ранее в этой главе.

-q.

Запуск в «тихом» режиме. При этом msqladmin не просит подтверждения команд. Этот параметр полезен при запуске утилиты из сценариев.

Резервирование данных

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

При использовании mSQL есть несколько методов резервирования. Как чаще всего бывает в mSQL, они небогаты украшениями, но дело свое делают. Чаще всего для создания резервных копий баз данных mSQL используется команда msqldump. Она делает полный стандартный дамп всей базы. Для каждой базы данных в системе нужно выполнить свою команду, например:

msqldump database1 > /usr/backups/database1.sql. daily

msqldump database2 > /usr/backups/database2.sql. daily

msqldump database3 > /usr/backups/database3.sql. daily

В этом примере создается дамп трех разных баз данных в одном каталоге.

Расширение daily используется для указания на то, что резервные копии создаются ежедневно. Как часто вы будете резервировать данные, зависит от их важности, размера и типа имеющихся у вас носителей. Поскольку mSQL позволяет создавать только полные дампы, размер резервных копий может быть очень большим в системах, содержащих большой объем данных. Если у вас достаточно места, то неплохо делать отдельные резервные копии для каждого дня недели или даже двух недель или месяца. По окончании цикла ленты используются заново, если это необходимо; а при записи на жесткий диск переписываются файлы. При такой схеме всегда есть данные за одну неделю. При создании резервных копий на жестком диске можно объединить отдельные ежедневные копии в одну ежедневную копию, перезаписываемую каждый день. В этом случае следует также иметь отдельную еженедельную копию, чтобы восстановить случайно удаленные данные, отсутствующие в последней дневной копии. Такую схему можно использовать, только если вы ограничены в пространстве для резервирования.

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

Восстановление данных из резервных копий производится столь же просто, как создание копий. Дампы, создаваемые msqldump, имеют стандартную форму SQL и могут быть обработаны монитором msql. Эти дампы содержат команды для создания как таблиц, так и данных, поэтому нужно либо удалить существующие таблицы, либо удалить из дампов команды CREATE TABLE. Если вы восстанавливаете только отдельные строки данных, можно просто скопировать их из дампа и подать на вход монитора msql.

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

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

И последнее, что следует учитывать, - вопрос переносимости. В отличие от двоичной резервной копии, дамп SQL - текстовый и целиком состоит из SQL-команд. При незначительной модификации, главным, образом для удаления специфического SQL, дамп SQL может быть импортирован любым совместимым со стандартом SQL сервером. Это очень удобный способ перемещения данных, если возникает необходимость перейти на новый сервер SQL.

Система безопасности

Система безопасности, поддерживаемая сервером mSQL, может, в зависимости от точки зрения, показаться как достоинством, так и недостатком. С одной стороны, ей легче управлять, чем в любой другой РСУБД. Эта легкость достигается благодаря упрощенности. К сожалению, такая упрощенность недопустима для сколько-нибудь сложных приложений баз данных.

mSQL управляет безопасностью с помощью файла msql.acl, который находится в каталоге установки mSQL. Расширение .acl образовано от «Access Control List» - «Список контроля доступа» - очень гибкой системы авторизации, с некоторого времени используемой в ряде операционных систем и приложений. Формат файла msql.acl следующий:

database=mydata

read=*

write=*

host=*

access=local,remote

database=mynewdata read=*

wriite=admin,root host=* access=local

Для каждой базы данных есть ряд опций. Строки read и write указывают, каким пользователям вы хотите предоставить право чтения (SELECT) базы или записи (INSERT, UPDATE, DELETE) в базу данных. Строка host показывает, какие машины могут иметь удаленный доступ к базе. Если строка access содержит «local», значит, разрешены локальные подключения через сокеты Unix, а если содержит «remote», то разрешены удаленные подключения по TCP.

В файле ACL допустим символ-маска «*» в полях read, write и host. Поэтому можно иметь такой ACL:

database=mynewdata

read=*

write=msql*

host=*. client.com,"isp.com

access=local, remote

Этот ACL означает, что любой пользователь любой машины в client.com, а также любой пользователь любой машины в любом домене, оканчивающемся на isp.com - например, wisp.com или lisp.com, - может иметь подключение к базе данных. Эти пользователи могут осуществлять чтение данных, но только пользователи, чьи имена начинаются с «msql», могут вносить в нее изменения.

По умолчанию все права отсутствуют, поэтому если вы пропустите строку write, никто не сможет модифицировать базу данных. Отдельные пользователи и машины могут исключаться с помощью префикса «-» перед их именем. Рассмотрим пример:

dataoase=moredata

read=-bob,*

write=jane

host=-junk. isp.com,*, isp.com

access=local,remote

Этот ACL разрешает подключение всем хостам домена isp.com, за исключением junk.isp.com. Кроме того, чтение разрешено всем пользователям, кроме пользователя «bob». Только «jane» имеет право записи в базе данных. Поскольку по умолчанию установлен отказ в доступе, конкретно указывать, кому отказано в доступе, как «bob'y»» бессмысленно, если строка не содержит также символа «*».

mSQL действует согласно первому обнаруженному соответствию. Например, строка read=*,-bob дает пользователю «bob» право чтения.

Как указывалось ранее в этой главе, команда msqladmin reload перезагружает ACL после внесения вами изменений. Если вы ее не выполните, внесенные изменения будут учтены только при следующем перезапуске сервера.

Утилиты mSQL

Об одной из поставляемых с mSQL утилит, msqladmin, мы уже рассказали. mSQL содержит семь основных утилит, составляющих основу взаимодействия с ней. В дополнение к этим основным утилитам mSQL

поддерживает облегченную утилиту обработки сценариев Lite и интерфейс к WWW под названием W3-mSQL. Помимо того, существуют многочисленные средства сторонних разработчиков. Сейчас мы подробно остановимся на базовых утилитах, поставляемых с mSQL, и пробежим по списку утилит «со стороны». К Lite и W3-mSQL мы обратимся позднее.

Утилиты командной строки

Каждая утилита командной строки имеет подробную подсказку, разъясняющую ее синтаксис. В основном этот синтаксис является копией команды msqladmln. Именно, параметр -h позволяет указать машину, а параметр -/ позволяет задать имя конкретного файла конфигурации.

msql

Это интерфейс командной строки к mSQL, позволяющий интерактивно выполнить команду SQL для заданной базы данных. Кроме обычных параметров, отмеченных выше, вы задаете имя базы данных, к которой хотите обратиться. Из всех утилит эта, вероятно, используется наиболее часто.

msqldump

Эта команда выводит все содержимое базы данных или таблицы, включая саму структуру таблицы, в виде ряда команд SQL. Результат работы этой утилиты можно использовать для создания резервной копии базы данных и воссоздания ее на другой машине.

msqlimport

Эта команда читает форматированный файл данных и добавляет их в указанную таблицу базы данных. Файл может иметь различный формат, в том числе с разделителем-запятой и кавычками.

relshow

Эта утилита выводит структуру базы данных и находящихся в ней таблиц. Она полезна, если вам нужно узнать, какие таблицы есть в базе данных или какие колонки существуют в нужной таблице.

msqlexport

Эта утилита выводит содержимое таблицы на стандартное устройство вывода в виде текстового файла с разделителями. Многие другие СУБД и приложения, такие как Microsoft Excel, могут читать этот файл и импортировать из него данные.

Поддержка сторонними разработчиками

Как и для любого популярного в сети Интернет программного продукта, существуют многочисленные программы сторонних разработчиков, поддерживающие mSQL. Они охватывают диапазон от утилит конвертирования до интерфейсов программирования. Как бы вы ни применяли mSQL, вы наверняка будете использовать хотя бы один из перечисленных здесь продуктов сторонних разработчиков. Конечно, этот список не может претендовать на полноту, поскольку состав имеющихся утилит ежедневно меняется. Самые свежие списки утилит

сторонних разработчиков можно получить с веб-серверов Hughes и mSQL PC, о которых шла речь ранее в этой главе.

Утилиты преобразования баз данных

dbf2msql

Преобразует файлы DBF в таблицы mSQL. DBF - это формат файлов базы данных dBASE, бывшей когда-то ведущей настольной базой данных. Хотя dBASE утратил популярность, формат DBF установился как наиболее распространенный для передачи данных между различными приложениями баз данных. Все главные настольные приложения баз данных могут читать и писать DBF-файлы. Это приложение полезно для экспорта/импорта данных в коммерческие настольные базы данных.

mSQLpp

Конвертирует ESQL (Ingres Embedded SQL - встроенный SQL для Ingres) в SQL, доступный для mSQL. ESQL встраивается прямо в исходный код программ на С, чтобы облегчить доступ к базам данных из С. Эта программа конвертирует файл исходного кода С с ESQL в файл исходного кода С, использующий стандартный API mSQL.v Она предназначена для работы в качестве препроцессора и обычно позволяет с помощью фильтрации использовать ESQL-файлы с mSQL без всякой модификации.

Интерфейсы CGI

РНР

Создает HTML-страницы со специальными тегами, распознаваемыми анализатором РНР. РНР содержит интерфейсы к большинству основных баз данных, включая MySQL и mSQL. PHP более подробно освещается в главе 12 «РНР и другие средства поддержки HTML, управляемого базами данных».

dbadmln

Обеспечивает интерфейс CGI к mSQL. Это программа CGI, позволяющая обращаться к любой таблице базы данных mSQL, как если бы она была формой HTML. Можно модифицировать данные в таблице и далее осуществлять операции над самой базой данных.

Jate

Полный интерфейс CGI к mSQL. Jate имеет много сервисов, все они доступны через формы HTML. Можно просматривать и редактировать данные, а также настраивать вывод. Jate импортирует данные плоского файла через текстовые поля HTML. Она также оптимизирует некоторые данные и поисковые запросы перед отправкой их на сервер базы данных.

mSQLCGI

Еще один CGI-интерфейс к таблицам mSQL. Эта программа позволяет просматривать и модифицировать таблицы mSQL через WWW с использованием форм HTML. Особенностью этого интерфейса является необходимость обработки каждой таблицы, которую вы хотите использовать, специальной прилагаемой программой, прежде чем к ней можно будет получить доступ через Web.

Клиентские приложения

dbview

Показывает структуру базы данных mSQL. Эта утилита сходна с relshow, но имеет некоторые дополнительные возможности. Например, dbview показывает количество записей в каждой таблице.

XfSQL

Обеспечивает полный доступ к данным таблиц mSQL в качестве клиента Xforms для X Window System. С помощью этого инструмента можно добавлять, удалять и просматривать данные таблиц в X Window System.

XmSQL

Обеспечивает полный доступ к данным таблиц mSQL как независимый от библиотеки клиент X Window System. Благодаря этому она будет компилироваться на любой системе X Window.

mSQLsql

Отображает форматированные таблицы. Используя эту утилиту, можно просматривать таблицу mSQL в различных видах, включая настраиваемые рамки и разделители для форматированных ASCII-таблиц. Можно также генерировать HTML-таблицы, используя заданные пользователем параметры.

mSQLwin-relshow

Аналог утилиты relshow для графического интерфейса Windows.

Интерфейсы программирования

ConNExS

Предоставляет интерфейс между mSQL и электронной таблицей NexS. NexS является популярной электронной таблицей с возможностью интерактивной связи с внешним источником данных. ConNExS позволяет таблицам mSQL служить источником данных для электронных таблиц NexS. Все изменения в электронной таблице будут отображены в связанной с ней таблицей mSQL.

mSQLBase

Предоставляет API SQLBase как С-оболочку для программ, работающих с mSQL. SQLBase API - это API доступа к базам данных независимого разработчика, поддерживающий несколько основных серверов SQL. Эта программа транслирует mSQL API в SQLBase API, в результате чего клиенты SQLBase могут работать с mSQL.

mSQLCLI

Инкапсулирует С API для mSQL таким образом, что клиенты ODBC под OS/2 могут работать с mSQL. ODBC - распространенный независимый от баз данных API, поддерживаемый большинством баз данных под OS/2 и Windows. Эта оболочка реализует стандартные средства ODBC, поддерживаемые mSQL, но только для операционной системы OS/2. Она содержит минимальный уровень функциональности ODBC.

msqldll

Упаковывает С API для mSQL в виде DLL для Windows. С помощью этой DLL можно создавать приложения для Windows, используя Visual Basic или другой инструмент для программирования в Windows, работающий с DLL.

MsqlJava

Создает оболочку сетевого протокола TCP/IP mSQL для Java API, напоминающую mSQL С API. Помогает быстро начать создавать приложения Java разработчикам, которые уже знают mSQL С API, но не знакомы со стандартом JDBC API. MsqlJava работает только с JDK 1.0.

mSQL-JDBC

Реализует стандарт Java Database Connectivity (JDBC) API поверх сетевого протокола TCP/IP mSQL. Этот пакет поддерживает максимальный уровень функциональности JDBC, возможный для mSQL в среде JDK 1.1 и JDK 1.2 (Java 2), включая стандарт JDBC 2.O. В главе 14 «Java и JDBC» подробно обсуждается программирование на Java с использованием этого API, а в главе 22 «Справочник по JDBC» представлено полное справочное руководство по JDBC 2.0.

MsqlODBC

Реализует ODBC API для mSQL 1 в Windows. Дэвид Хьюз в настоящее время работает над реализацией для mSQL 2.

mSQLPerl

Обеспечивает сценариям Perl доступ к базам данных mSQL. В главе 10 «Perl», подробно обсуждается программирование на Perl для MySQL и mSQL, а в главе 21 «Справочник по Perl», представлено полное справочное руководство по mSQLPerl.

mSQLPython

Обеспечивает сценариям Python доступ к базам данных mSQL. В главе 11 «Python», подробно обсуждается программирование на Python для MySQL и mSQL, а в главе 20 «Справочник по Python», представлено полное справочное руководство по mSQLPython.

mSQLRexx

Поддерживает доступ к mSQL из REXX, языка сценариев, наиболее часто используемого в OS/2.

mSQLTCL

Позволяет программам на Tel иметь доступ к базам данных mSQL. Поддержка включает многие расширения Tcl, в том числе Tcl/Tk и Expect.

mSQLVdb

Обеспечивает доступ к базам данных mSQL через библиотеку базы данных Vdb. Vdb - не зависящий от типа базы данных API для С, позволяющий единому клиенту иметь доступ к различным серверам баз данных. Клиенты Vdb могут использовать этот API для доступа к базам данных mSQL.

zmsql

Обеспечивает объектно-ориентированный доступ к базам данных mSQL для программ на C++.

Разное

mod_auth_msql

Осуществляет аутентификацию пользователей сервера Apache. Обычно Apache осуществляет контроль доступа с помощью простых текстовых файлов, содержащих имена пользователей и зашифрованные пароли. Данный модуль позволяет управлять доступом через базу данных mSQL.

mSQLEmacs

Расширяет базовую поддержку режима SQL в Emacs, обеспечивая отступы и выделение цветом для mSQL-диалекта SQL.

msqlexpire

Удаляет из таблиц mSQL устаревшие данные. Для использования этой программы нужно иметь в таблице mSQL колонку, содержащую возраст данных. Эта программа находит в таблице данные старше указанного возраста и удаляет их. Можно потребовать, чтобы msqlexpire посылала уведомления по электронной почте после каждого удаления.

mSQLSSL

Вводит в mSQL поддержку защищенных сетевых соединений по протоколу SSL. Чтобы использовать этот продукт, необходимо скомпилировать mSQL вместе с ним. Будучи установленным, полностью защищает ваши сетевые соединения от любопытных глаз.

Sqs

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

Оглавление

GNU OCXE GNU LINUX
Сайт управляется системой uCoz