MySQL & mSQL

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


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




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