Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

MySQL. Библиотека профессионала - Аткинсон Л

..pdf
Скачиваний:
166
Добавлен:
24.05.2014
Размер:
10.41 Mб
Скачать

422 Глава 22. Библиотека MySQL++

Естественно, в более сложных случаях необходимо создавать Подключиться к серверу MySQL средствами библиотеки несложно: дос

таточно создать объект класса Connection. У этого класса четыре конструктора:

Connection

 

 

 

 

Connection

te)

 

 

 

Connection (const char *db, const char *host

 

const

char

*user

const char

*passwd

bool

te

 

 

 

Connection (const char *db, const char *host, const char

const

char

*passwd,

port,

compress 0,

unsigned

connect_timeout 60, bool te true,

 

 

 

unsigned

int

Восновном аргументы конструктора соответствуют аргументам функции

библиотеки языка С. Аргумент te определяет, будут ли ге нерироваться исключения.

В листинге показан текст минимального клиента. Эта программа

ся к базе данных test на узле localhost. Код очистки не нужен, так как деструктор класса Connectionсамостоятельно закрывает соединение.

ttinclude <iomanip>

ttinclude <sqlplus.hh>

int

char

Подключение к серверу.

Connection con "localhost",

return 0;

Извлечение данных

Подключившись к серверу баз данных, программа создать объект класса Query, с помощью которого будут посылаться запросы. Этот класс является потомком класса но емуразрешается посылать лишь входные данные, а оператор не поддерживается. Чтобы направить запрос серверу, необходимо записать его в поток с помощью оператора и вызвать метод Query: : store либо Query: execute Первый из них возвращает таблицу результатов запроса.

В листинге 22.2 показана простая программа, которая извлекаетданные из табли цы user. Обратите внимание на то, что программа пытается подключиться к серверу от имени пользователя root с явно неправильным паролем. Если будете эксперимен тировать с этой программой, подставьте корректные значения имени пользователя и пароля.

Извлечение данных 423

Обратите также внимание на использование итератора класса Result в цикле На каждом шаге цикла создается объект класса Row, который ведет себя как мас сив строк. возвращает число полей записи.

#include

<iomanip> #include

main(int char

try

Подключение к серверу. Connection

"root",

Создание объекта запроса.

Query query

Отправка запроса.

query "SELECT User, Host FROM user ORDER BY 1,2";

Получение результатов запроса.

Result res

Отображение записей.

Row row;

 

i;

 

for (i

i

i++)

row

*i;

 

for

(unsigned int

j++)

cout

return 0;

catch

"Error: endl; return 1;

424 Глава 22. Библиотека

Изменение данных

Метод : execute предназначен для выполнения которые не возвращают результаты в виде наборов записей. С помощью метода Connection: ected_rows можно узнать число добавленных, удаленных или обновленных записей (листинг 22.3).

#include

<sqlplus.hh>

char

try

Подключение к серверу.

Connection

Создание объекта запроса.

Query query

Создание таблицы.

query "CREATE TABLE IF NOT EXISTS

"ID. NOT NULL

"Name "PRIMARY

Вставка записей.

const char "Leon", "Vicky", "Carl",

"Jeff", "Bob", "Tina", "Joey"

Подготовка запроса.

 

query "INSERT INTO %0

(Name) VALUES

i=0;

i++)

Выполнение запроса.

Изменение данных 425

row inserted" endl;

Удаление

query "DELETE FROM WHERE ID

rows deleted" endl;

Обновление

query "UPDATE testapi SET Name

cout

rows updated" endl;

Удаление таблицы.

query "DROP TABLE testapi";

return 0;

catch

"Query Error: endl; return 1;

Программа, представленная в листинге 22.3, создает таблицу и добавляет в нее за писи. Далее происходит удаление части записей, обновление записей и, наконец, уда ление всей таблицы. Обратите внимание на способ вставки записей. Инструкция INSERT, переданная объекту query, содержит коды начинающиеся с символа Стоящий затем номер определяет порядок аргументов метода execute В данном примере методу требуется узнать имя таблицы и значение столбца. Символ говорит о том, что значение берется в кавычки.

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

вый массив

ТЕМЫ

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

ных, стремящимся повысить производительность своей СУБД или рас ширить ее функциональные возможности.

В главе 23, "Администрирование баз данных", читатели узнают о том, какая ответственность лежит на администраторе баз данных. В главе 24, "Физическое хранение данных", рассказывается о принципах использова ния физических ресурсов в MySQL. В главе 25, "Устранение последствий катастроф", описываются стратегии предотвращения катастроф и устра нения их последствий. Сюда входит восстановление поврежденных таблиц и создание резервных копий. Глава 26, "Оптимизация", посвящена сам оптимизации баз данных и запросов. В главе 27, "Безопасность", рас сматриваются вопросы обеспечения безопасности баз данных.

Вглаве 28, "Перенос данных в разные СУБД", рассказывается о том, зачем может понадобиться перейти из другой СУБД в MySQL или из MySQL — в другую СУБД икакие нюансы необходимо при этом учесть.

Вглаве "Распределенные базы данных", рассматриваются концеп ции распределенных баз данных. В частности, описываются принципы синхронизации и репликации таких баз данных.

Вглаве 30, "Работа с объектами", описывается применение ориентированных методик при работе с базами данных. Приводится пример работы с объектами баз данных на

Глава "Расширение возможностей MySQL", посвящена расшире

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

БАЗ ДАННЫХ

этой

Ответственность Обеспечение доступности данных

Поддержание целостности данных Подготовка к катастрофе Поддержка пользователей Разработка и внедрение стандартов

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

конфигурацию.

Ответственность

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

Перечислим пять основных обязанностей администратора:

обеспечение доступности данных;

поддержание целостности данных;

подготовка к катастрофе;

поддержка пользователей;

разработка и внедрение стандартов.

Обеспечение доступности данных

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

430

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

 

может возникнуть необходимость обратиться к нему. Под него должно быть

выделено

соответствующего уровня.

Сервер

MySQL работает в виде демона, обычно круглосуточно. Сценарий

 

 

входящий в состав дистрибутива, отслеживает те редкие случаи, когда

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

Несмотря на все усилия по оптимизации и настройке исполняемых файлов MySQL и конфигурированию сервера, основной вклад в производительность все же вносит оборудование. Чем оперативнее сервер выполняет запросы, тем более вующим он кажется пользователям. Естественно, большую роль играет устройство хранения данных. Быстрые жесткие диски существенно влияют на производитель ность сервера. Приведем лишь несколько советов, касающихся запуска MySQL на персональном компьютере.

Не полагайтесь лишь на скорость передачи данных, которой обладает жесткий диск. Производительность SCSI дисков будет выше, чем IDE дисков, поскольку в тех нологии SCSI поддерживаются одновременные операции чтения. Еще больше повы шает производительность технология RAID (Redundant of Independent Disks — матрица независимых дисковых накопителей с избыточностью), в которой группа дисков представляется единым устройством. Программа MySQL поддерживает эту технологию, позволяя распределять данные между несколькими файлами, которые могут находиться на разных дисках.

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

самообучаемости пользователей. Потратьте время на то, чтобы научить

 

лей работать с утилитами MySQL илидругими приложениями,

ввод

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

Поддержание целостности данных

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

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

Поддержание целостности данных 431

лишь имени пользователя и пароля недостаточно. Должен быть указан еще и перечень разрешенных IP адресов. Сам компьютер, на котором запущен сервер MySQL, должен находиться в изолированном помещении с ограниченным доступом.

О схеме выдачи привилегий в MySQL пойдет речь в главе 27, "Безопасность". В не которых организациях есть одна большая данных, доступ к которой разрешен множеству пользователей, но только в режиме чтения. В других организациях му пользователю предоставляется собственная закрытая база данных.

Следует регулярно проверять таблицы привилегий и журнальные файлы для вы явления нарушений безопасности. Можно воспользоваться командой чтобы быстро просмотреть изменения, внесенные в таблицы привилегий. Эта системная команда возвращает отличающиеся фрагменты двух текстовых файлов. Если дампы базы данных создаются регулярно, можно сравнить отличия предыдущего дампа от текущего. Рассмотрим пример, показанный в листинге 23.1. Сравнение дам пов позволяет сделать вывод о том, что в базу данных была добавлена учетная запись нового пользователя, которому предоставлены полные привилегии на доступ ко всем базам данных. В Windows имеется адаптированная версия команды входящая в состав пакета Кроме того, многие текстовые редакторы Windows обладают средствами сравнения текстовых файлов.

diff 62абЗ

INSERT INTO VALUES

170al72

INSERT INTO user VALUES

Просмотр журнальных файлов MySQL позволяет выявить необычные операции или обнаружить признаки неэффективной организации таблиц. Подробнее о журнальных файлах, создаваемых программой MySQL, рассказывается в главе 24, "Физическое хра нение данных". Эти файлы очень быстро разрастаются, поэтому необходимо регулярно осуществлять их ротацию. С помощью инструкции FLUSH LOGS можно заставить вер начать новые журнальные файлы, но предварительно следует переименовать суще ствующие файлы и поместить самый старый файл в архив. В Linux дистрибутивMySQL входит сценарий автоматизирующий этот процесс.

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

программа

а в Windows —программа планировщик. Поиск ошибок в таблицах

можно вести с помощью утилиты

или инструкции CHECK TABLES.

Не забудьте сохранить полученные результаты в файле для последующего анализа.

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

рошее решение на случай непредвиденных аварий, например таких, которые проис ходят вследствие внезапного выключения питания.