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 предоставляет всем
эту возможность совершенно бесплатно. Это действительно одна из самых
мощных, быстрых и надежных СУБД.
С вопросами и предложениями пишите мне. Постараюсь по
мере сил и возможностей ответить.