| 
div.main {margin-left: 20pt; margin-right: 20pt}
       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 предоставляет всем эту 
      возможность совершенно бесплатно. Это действительно одна из самых мощных, 
      быстрых и надежных СУБД. С вопросами и предложениями пишите мне. 
      Постараюсь по мере сил и возможностей ответить.
  
 
 |