Администрирование баз данных
Теперь, когда ваш сервер баз данных работает 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 после внесения вами изменений. Если вы ее не выполните, внесенные изменения будут учтены только при следующем перезапуске сервера.