MySQL. Установка. Настройка. Программирование

Автор: Алексей Литвинюк Сайт: http://www.nestor.minsk.by/kg
   
   
   На сегодняшний день СУБД 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 предоставляет всем эту возможность совершенно бесплатно. Это действительно одна из самых мощных, быстрых и надежных СУБД.
   
   

Опубликовано: HTTP://WWW.R-T-F-M.INFO, pauk ©® 2000-2011.
All rights reserved.
При перепечатки ссылка на сайт обязательна.
Мнение администрации сайта не всегда совпадает с мнением автора..