MySQL. Установка. Настройка. Программирование
На сегодняшний день СУБД MySQL является одной из самых известных,
надежных и быстрых из всего семейства существующих СУБД. Почему именно
она? Одной из причин являются правила ее распространения - за нее не надо
платить деньги и распространяется она вместе со своими исходными текстами.
Однако многие могут возразить, ведь есть же PostgreSql, почему не она? Да,
действительно PostgreSql также распространяется под лицензией *GNU GPL, но
она не получила столь широкого распространения. Одна из причин - это
заметная медлительность. Сегодня MySQL особенно распространена на
платформах Linux и Windows. Причем на последней встречается гораздо реже.
В этой статье я хотел бы поделиться с читателем личным опытом установки,
конфигурирования, администрирования и программирования СУБД MySQL (в
дальнейшем для простоты будет упоминаться просто MySQL).
Для начало мне бы хотелось познакомить читателя с принципами работы
СУБД, которые используют SQL в качестве командного языка. SQL -
(Structured Query Language, язык структурированных запросов) сердце любой
современной СУБД. Он используется для создания/удаления баз данных,
таблиц, для пополнения таблиц данными, для осуществления выборки данных.
Эта тема заслуживает отдельной статьи, но тем, кому это действительно
необходимо, я бы посоветовал прочесть книгу Мартина Грубера "Понимание
SQL". Исходя из этого, любая СУБД представляет собой программу-сервер,
которая сидит в памяти компьютера и обслуживает TCP порт. В случае с
MySQL, номером порта будет являться число 3306. А клиентская программа,
будь то CGI-приложение на Perl либо полноценный программный продукт для
предприятия на C, соединяется с СУБД по этому порту и посылает ему строчки
на SQL. Тот в свою очередь их интерпретирует, выполняя необходимые
действия, и отсылает результаты запроса обратно клиенту. Таким не хитрым
способом происходит общение сервера баз данных с клиентскими программами.
Теперь, имея некоторое понятие о том, каким образом работают серверы баз
данных, перейдем непосредственно к установке MySQL.
Установка
MySQL написан под десятки видов операционных систем. Это и FreeBSD,
OpenBSD, MacOS, OS/2, SunOS, Win9x/00/NT и Linux. Мною использовался
дистрибутив Red Hat Linux 7.0. В силу своей простоты, данный дистрибутив
не заставил мучаться с установкой и произвел ее самостоятельно на этапе
установки самой ОС. Если вам аналогично повезло, то на этом этап установки
для вас завершен, и вы можете смело переходить к настройке. Для многих
встает вопрос, где взять дистрибутив MySQL. Он может находиться на диске с
Linux в виде установочного модуля RPM либо в виде архива tgz(tar.gz). Если
его там нет, то дистрибутив можно совершенно бесплатно скачать с
официального сайта www.mysql.org. Для установки необходима версия ядра не
ниже 2.0. Если вы скопировали архив *.tar.gz, то для установки скопируйте
его в директорию, где вы хотите установить MySQL, и выполните следующие
действия:
1. Распакуйте архив, выполнив следующую команду
gunzip
< mysql-VERSION.tar.gz | tar xvf -
где, вместо VERSION, будет версия
вашего дистрибутива (к примеру, у меня 3.23.22-beta). В результате будет
создана директория mysql-3.23.22-beta, где находятся файлы
дистрибутива.
2. Перейдите в эту директорию.
cd
mysql-3.23.22-beta
3. Подготовка к установке.
./configure
--prefix=/usr/local/ mysql
make
В данном случае MySQL будет
установлен в директорию /usr/local/mysql. В случае фатального завершения
следующих команд необходимо внимательно ознакомиться с выведенными
ошибками. В случае чего можно обратиться к документации.
4.
Непосредственно установка.
make install
5. Теперь необходимо создать
так называемые grant таблицы. Для этого необходимо выполнить следующий
скрипт:
scripts/mysql_install_db
Теперь можно удалить директорию, в
которую вы распаковывали архив дистрибутива, после чего можете
удостовериться, что MySQL был проинсталлирован в указанную директорию (в
нашем случае - это /usr/local/mysql). Для того чтобы запустить сервер СУБД
MySQL, следует выполнить скрип_f2 safe_mysqld, который находится в
директории /usr/ local/mysql/bin.
На этом процесс инсталляции из
архива tgz(tar.gz) можно считать выполненным.
В случае если вы
устанавливаете MySQL из установочного пакета RPM, то процесс инсталляции
оказывается намного проще. Для установки пакетов RPM существует утилита
rpm. Чтобы установить пакет, вам достаточно набрать следующую
команду:
rpm -i mysql-3.23.22-beta.rpm
Теперь, когда вы выполнили
эту команду, вы можете смело запускать safe_mysqld для первого старта
MySQL.
После того, как мы установили непосредственно MySQL, необходимо
установить также модули Perl, чтобы Perl мог работать с базами данных
посредством технологии DBI/DBD. Об этой технологии будет рассказано чуть
позже. Вам лишь необходимо скачать установочный пакет DBI с сайта
www.cpan.org, а также установочный пакет драйвера DBD с сайта
www.mysql.org и установить их таким же образом, как мы устанавливали
MySQL.
После установки всех вышеперечисленных пакетов смело можно
переходить к настройке.
Настройка
Если установка была произведена корректно, то на данном этапе вы уже
можете использовать MySQL в своих целях. На пятом этапе, когда вы
запускали скрипт scripts/mysql_install_db, у вас появилась новая база
данных 'mysql'.
В ней скрипт создал шесть таблиц: 'user', 'db',
'host', 'tables_priv', 'columns_priv' и 'func'. Эта база данных необходима
для установления привилегий пользователям. По умолчанию сервер MySQL
использует номер порта 3306. Если данный порт у вас чем-то занят, то
необходимо переопределить переменную MYSQL_TCP_PORT. Например, вот
так:
MYSQL_TCP_PORT=3307
export MYSQL_TCP_PORT
Также можно
поменять и другие параметры. В этом может помочь скрипт mysql_config. С
его помощью можно менять, к примеру, директорию, где хранятся файлы баз
данных, имя UNIX сокета, директорию временных файлов и пр.
Чтобы
проверить, правильно ли вы все сделали, запустите MySQL, перейдя в
директорию, где находятся исполняемые файлы, и выполните
команду:
./safe_mysqld &
Теперь наберите './mysqlshow mysql'. Вы
должны увидеть что-то похожее:
Database:
mysql
Tables
columns_priv db func host tables_priv user
Если
не было выдано никаких ошибок, то можете смело набирать './mysql' и по
полученному приглашению набирать команды SQL и не забывать ставить ";"
после каждой команды.
Для примера выполните следующие команды
последовательно:
CREATE DATABASE GRYADKA;
CREATE TABLE MAIN(a00
INTEGER, a01 CHAR(10));
INSERT INTO MAIN VALUES(1,'Hello
world!');
SELECT * FROM MAIN;
После ввода последней строки вы должны
увидеть таблицу:
a00 a01
1 Hello world!
Если так и произошло, то
поздравляю, вы создали свою первую базу данных GRYADKA в СУБД MySQL. В
этой базе данных существует единственная таблица с именем MAIN, которая, в
свою очередь, содержит единственную запись.
Настало время приступить к
написанию программ, которые будут работать с установленной и настроенной
вами СУБД MySQL.
Если по каким-либо причинам сервер MySQL не
запускается, то вам следует обратиться за помощью к справочному
руководству.
Программирование
В этом разделе хотелось бы рассмотреть возможности языка Perl для
работы с MySQL. Может быть, не честно обходить вниманием возможности языка
C и его интерфейс взаимодействия с СУБД, однако сегодня MySQL более
широкое распространение получил на Web-серверах. А Perl как нельзя лучше
других языков подходит для написания CGI-приложений. Многие могут
возразить, что приложения на C работают намного быстрее. И это факт. Но у
Perl есть мощность, простота и кое-какая платформонезависимость. Ну, а его
регулярные выражения и прочие синтаксические особенности несоизмеримо
превозносят его над другими языками программирования.
Итак, на этапе
установки мы установили все необходимое для того, чтобы приложения на Perl
могли взаимодействовать с MySQL. Это взаимодействие можно изобразить на
схеме:
Прикладные программы->DBI ->DBD->СУБД
Как уже
упоминалось выше, DBI обеспечивает единый интерфейс взаимодействия с
различными системами управления базами данных. А DBD связывает этот
интерфейс непосредственно с конкретной СУБД.
В нашем случае это
mysql. Исходя из этого, понятно, что для того, чтобы наша программа могла
общаться и работать с базой данных, необходимо подключить модуль DBI и
драйвер DBD. Это выполняется следующими операторами:
use DBI;
use
DBD::mysql;
Для того чтобы мы могли выполнять SQL запросы к нашей базе
данных, нам нужно установить логическое соединение с MySQL. Это мы
выполняем при помощи метода объекта DBI. При этом он возвращает объект
(дескриптор) соединения, который мы будем использовать для
непосредственного общения с базой данных.
$dbh = DBI->connect('dbi:
mysql:dbname=GRYADKA;host=127.0.0.1;port=3306','','',0);
Вызывая метод
connect, мы передаем ему некоторые параметры. Первый параметр определяет
свойства соединения.
Эта строка имеет следующую
структуру:
"dbi:<имя DBD>:dbname= <имя базы
данных>;host=<имя хоста>;port=<номер порта>"
Далее в
методе connect определяются имя пользователя, пароль и флаги соединения. В
нашем случае имя пользователя и пароль указывать нет необходимости, т.к.
мы не создавали пользователей. Флаги передаются анонимным хэшем и в целом
необходимости в них нет. Чтобы получить более подробную информацию,
смотрите 'man DBI'.
Существует два способа работы с базами данных
MySQL. Первый - так называемый механизм курсоров, а второй,
соответственно, без использования таковых. Для начала рассмотрим механизм
курсоров.
Курсоры - это объекты Perl, которые обеспечивают
последовательный доступ к результатам запросов.
Каждый курсор отвечает
за закрепленный за ним запрос.
$cur = $dbh->prepare('select * from
MAIN;');
$cur - это курсор, который для начала следует выполнить,
используя метод execute:
$cur->execute;
Теперь, после выполнения
запроса, чтобы получить результат запроса, используем метод
fetchrow_array. Он поочередно возвращает массив полей результативной
виртуальной таблицы. К примеру, чтобы вывести на экран все данные,
воспользуемся циклом while:
while (($a00, $a01) =
$cur->fetchrow_array)
{
$i++;
print "Record \#$i: a00 = $a00,
a01 = $a01. \n";
}
Очень часто бывает необходимо подготовить запрос
и после, при его выполнении, передавать ему различные данные. Это довольно
просто решается при помощи механизма placeholders:
$cur =
$dbh->prepare('insert into MAIN values(?,?)');
где вопросительные
знаки следует заменить на значения переменных, переданных в качестве
параметров метода execute:
$a00 = 2;
$a01 = 'second
record';
$cur->execute($a00, $a01);
Для того чтобы закрыть
курсор, необходимо выполнить метод finish.
$cur->finish;
Курсоры
очень удобный момент в технологии DBI. Однако можно обойтись и без них.
Существует множество методов, которые вполне неплохо заменяют
курсоры:
selectrow_array - возвращает одну строку запроса в виде
массива;
selectall_arrayref - возвращает весь ответ сервера в виде
массива, ссылка на массивы;
do - выполняет запрос, ничего не возвращая
(очень удобно при работе с insert, update и пр.)
Например:
($a01) =
$dbh->selectrow_ar-ray('select a01 from MAIN where a00=1;');
#
получаем значение $a01 равное 'Hello world!'
$dbh->do('update set
a01 = 'hello world' where a00 = 1;');
# изменяем значения поля a01 на
'hello world', там где a00=1
И, наконец, для того чтобы разорвать
соединение с MySQL, необходимо выполнить метод
disconnect.
$dbh->disconnect;
Этого, пожалуй, хватит, чтобы
писать довольно сложные программы для работы с базами данных.
И
виртуальный магазин, и сервер знакомств, и всевозможные сайты,
предоставляющие платные услуги, - все нуждаются в возможности обрабатывать
и хранить большие объемы информации. MySQL предоставляет всем эту
возможность совершенно бесплатно. Это действительно одна из самых мощных,
быстрых и надежных СУБД.