• 16.1. Установка сервера
  • 16.2. Клиентская часть
  • 16.3. Связка Apache + PHP + MySQL
  • 16.3.1. Первый способ: из пакетов RPM
  • 16.3.2. Второй способ: из исходных текстов
  • 16

    Установка MySQL

    16.1. Установка сервера

    В этой главе я кратко опишу, как установить популярный сервер баз данных MySQL. Благодаря своей простоте сервер MySQL приобрел широкое распространение в сети Интернет. При создании Интернет-сервера вы просто не сможете обойтись без сервера MySQL: большинство провайдеров предоставляет хостинг вместе с сервером баз данных, большинство дизайнеров выбирают MySQL, потому что практически невозможно построить серьезный Интернет-проект без использования баз данных.

    Я здесь не буду рассматривать технические характеристики сервера MySQL и не буду сравнивать его с другими серверами баз данных, такими, как InterBase Server, IBM DB/2, Oracle. MySQL идеально подходит практически для любого Интернет-проекта. Естественно, если вы создаете распределенную систему обработки информации, вам лучше использовать InterBase Server или Oracle, поскольку эти СУБД являются более масштабируемыми, чем MySQL. Итак, приступим к настройке сервера. Прежде всего нужно установить пакеты, необходимые для работы MySQL.

    Я использую MySQL версии 3.20, поэтому я установил такие пакеты:

    MySQL_GPL-3.20.32a-18mdk.

    MySQL_GPL-client-3.20.32a-18mdk.

    MySQL_GPL-shared-libs-3.20.32a-18mdk.

    MySQL_GPL-bench-3.20.32a-18mdk.

    MySQL_GPL-resolveip-3.20.32a-18mdk.

    Проще всего воспользоваться командой rpm –ih MySQL* для установки сервера. Возможно, вы не захотите устанавливать клиентскую версию MySQL-client, однако на этапе настройки я рекомендую все-таки установить ее — она будет использоваться для тестирования сервера.

    После установки пакета нужно создать базу данных mysql. Скорее всего, она уже создана, но, чтобы окончательно убедиться в этом, введите команду:

    mysql_install_db

    Если основная база данных существует, программа сообщит вам об этом. Теперь нужно установить пароль для пользователя root. По умолчанию пользователь root не имеет пароля. Я не буду долго объяснять, как важен правильно заданный пароль для безопасности системы, не говоря уже об его отсутствии. База данных mysql является системной базой данных и содержит следующие таблицы:

    1. таблицу db;

    2. таблицу host;

    3. таблицу user.

    Сейчас нас интересует таблица user. Она содержит пароли всех пользователей, которые имеют право работать с сервером. На данном (начальном) этапе в базу данных внесен только один пользователь — root. Для изменения пароля запустите сервер командой:

    safe_mysqld &

    Эта команда запустит сервер в режиме демона и освободит консоль. Если все пакеты были установлены правильно, вы увидите сообщение:

    mysql: ready for connections

    Однако, может быть и другое сообщение, свидетельствующее об удачном запуске. Затем введите команду:

    mysql –u root mysql

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

    Измените пароль суперпользователя с помощью команды:

    UPDATE user SET Password=PASSWORD(xnew_password') WHERE user='root';

    Как вы заметили, это обычный SQL-запрос, обновляющий поле Password таблицы user для пользователя root. Теперь нужно, чтобы MySQL принял изменения. Для этого выполните еще один запрос SQL:

    FLUSH PRIVILEGES;

    Для принятия изменений можно также использовать программу mysqladmin с параметром reload. Вызвать программу можно так:

    mysqladmin –p reload

    Параметр –р вам обязательно нужно использовать, так как вы только что установили пароль для пользователя root. Выйти из клиента mysql вы можете, введя команду quit.

    Установите права доступа к сценарию /etc/re.d/init.d/mysql:

    chmod +х /etc/re.d/init.d/mysql

    Теперь можете перезапустить сервер командой:

    /etc/re.d/init.d/mysql restart

    Если вы забудете пароль, вы его уже не восстановите. Единственный выход из этого положения — удалить каталог /var/lib/mysql/mysql и создать базу mysql заново командой mysql_install_db.

    Теперь вы уже не можете зарегистрироваться на сервере без пароля. Если вы введете команду mysql –u root mysql, то получите следующее сообщение:

    ERROR: Access denied for user: * root@localhost' (Using password: NO)

    Для регистрации на сервере теперь нужно использовать команду mysql –u root –p. Параметр –р запросит пароль при регистрации.

    Последнее, что вам осталось сделать — это добавить сервер MySQL в автозапуск. С этой целью перейдите в каталог /etc/re.d/rc3.d/ и создайте символическую ссылку на файл /etc/re.d/init.d/mysql:

    ln –s S14mysql /etc/re.d/init.d/mysql

    Префикс S14 определяет очередность запуска сервера mysql. В данном случае он запустится после сервисов network (S10) и portmap (S11). У вас эти значения могут быть другими.

    В своей работе демон mysqld использует файл журнала /var/log/mysql.log. Именно в него заносятся все транзакции, а также все команды, которые ввел пользователь. После установки сервера нужно внести пользователей, которые имеют право работать с сервером баз данных. Введите следующий запрос:

    GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;

    Введенный вами запрос создаст пользователя admin, который будет иметь право выполнять любые операции со всеми базами данных. Данный пользователь будет иметь право подключаться к серверу с компьютера localhost, используя пароль password.

    Маска *.* определяет, к каким базам данных и таблицам имеет право подключаться тот или иной пользователь. Первая звездочка определяет базу, а вторая — таблицу. Если вам нужно, чтобы пользователь admin имел право подключаться с любого хоста, используйте знак процента вместо имени хоста. В этом случае запрос будет выглядеть так:

    GRANT ALL PRIVILEGES ON *.* TO admin@"%" IDENTIFIED BY 'password' WITH GRANT OPTION;

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

    GRANT CREATE,DROP,SELECT,INSERT,UPDATE,DELETE,INDEX ON user.* TO user@% IDENTIFIED BY 'user_password';

    Перед выполнением данного запроса необходимо создать базу данных user. Данный запрос позволяет пользователю user выполнять все операции с его базой данных.

    Полный список полномочий представлен в табл. 16.1. Если запрос GRANT у вас не работает, то вы можете внести пользователя непосредственно в таблицу user базы данных mysql. Структура таблицы user выглядит следующим образом:

    Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv

    Поля Host, User, Password — это, соответственно, узел, из которого пользователь может получить доступ, имя пользователя, пароль пользователя.

    Полномочия пользователей сервера MySQL Таблица 16.1

    Полномочия Описание
    SELECT, INSERT, UPDATE, DELETE Одноименные операции с данными: пользователь имеет право просматривать, добавлять, модифицировать, удалять данные в таблицах баз данных
    INDEX Пользователь имеет право производить операции с индексами таблиц
    REFERENCES Пользователь имеет право работать со ссылками в базах данных и таблицах
    CREATE, DROP Создание и удаление таблиц и баз данных
    GRANT, ALTER Операции с полномочиями
    RELOAD, SHUTDOWN, PROCESS Пользователь имеет право перезагружать, останавливать сервер и просматривать все процессы (подключения)

    Все остальные поля задают полномочия для пользователя. Если выполнение какой-нибудь операции разрешено пользователю, соответствующее поле должно быть равным «Y». В противном случае установите значение «N».

    Например, нам нужно создать пользователя admin, который должен иметь все полномочия. Это можно сделать с помощью такого запроса SQL:

    INSERT INTO user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv,

    Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv) VALUES

    ('localhost', 'admin' ,password('4td561sl2'), 'Y', 'Y, 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');

    При вводе запроса обратите внимание на регистр названий полей. Сервер MySQL различает прописные и строчные буквы! С помощью вышеприведенного запроса был создан пользователь admin, который имеет право регистрироваться на сервере только из узла localhost. Если вам нужно разрешить регистрацию из любого узла сети, используйте знак процента, однако это не совсем корректно с точки зрения безопасности. Пользователь admin обладает всеми возможными привилегиями. Пароль пользователя — 4td561sl2.

    Для создания обыкновенного пользователя используйте следующий запрос:

    INSERT INTO

    user(Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv)

    VALUES('%', 'user',password('123456') , 'Y','Y',' Y', Y');

    16.2. Клиентская часть

    Удобной программой для просмотра структуры базы данных является mysqlshow. Введите следующую команду:

    mysqlshow –p mysql

    В ответ вы увидите список таблиц, которые находятся в базе данных mysql.

    Database: mysql

    +--------+

    I Tables I

    +--------+

    I db     I

    I host   I

    I user   I

    +--------+

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

    Параметры программы mysqlshow Таблица 16.2

    Параметр Описание
    ––host=имя_xocтa Задает имя хоста, к которому вы хотите подключиться
    --port=номер_порта Определяет номер порта для сервера MySQL
    --socket=сокет Указывает сокет
    --user=имя пользователя С помощью этого параметра можно указать нужное имя пользователя
    -p Запрашивает ввод пароля

    Для самих же операций с данными используется программа mysql. Она и является клиентом сервера. В этой программе можно использовать те же опции, что и mysqlshow. Среди многочисленных параметров программа mysql имеет один очень важный параметр –s. Я рекомендую вам всегда его использовать. Этот параметр подавляет большинство ненужных сообщений, выводимых клиентом. На медленных линиях связи это должно повысить производительность. Да и наблюдать за всеми рамочками и ненужными сообщениями особо не хочется.

    16.3. Связка Apache + PHP + MySQL

    Настроить данную связку, которая очень полезна при Web-программировании, можно двумя способами. Первый из них — это использовать программы, которые входят в состав дистрибутива и, как правило, устанавливаются из пакетов RPM. Второй способ заключается в загрузке последних версий Apache, MySQL и PHP и в самостоятельной их сборке из исходных текстов. Первый способ я могу порекомендовать начинающим пользователям, так как он более прост. Если же вы чувствуете уверенность в своих силах, приступайте сразу к чтению второго способа.

    16.3.1. Первый способ: из пакетов RPM

    Могу сразу обрадовать пользователей дистрибутивов Red Hat 7.2 и Mandrake 8.1 (или более поздних версий): вам не нужно настраивать первую часть связки — все настраивается во время установки системы. В состав дистрибутива Red Hat 7.2 входит сервер Apache 1.3.20-16, а при установке системы устанавливаются библиотека gd и интерпретатор php версии 4.0.6, а также модуль для сервера Apache. Поэтому вы можете сразу приступить к тестированию связки Apache + PHP (см. файл test .php ниже). Не забудьте установить сервер Apache, если он еще не установлен (перед выполнением данной команды перейдите в каталог, в котором находятся пакеты RPM):

    rpm –Uh apache*

    Затем следует настроить сервер. Настройка Apache подробно обсуждалась в гл. 12 этой книги. Не нужно настраивать сервер полностью: достаточно указать только директиву ServerName и попробовать запустить сервер.

    Как правило, сервер должен успешно запуститься и функционировать. Для проверки его работы введите команду:

    lynx http://localhost

    Текстовый браузер lynx должен отобразить стартовую страницу Apache. После успешного запуска сервера остановите его командой:

    /etc/init.d/httpd stop

    Проверьте наличие библиотеки gd — она необходима для работы с графикой в РНР:

    rpm –qa | grep gd

    Если библиотека gd не установлена, установите ее командой, предварительно указав ту версию библиотеки, которая у вас имеется (я использую версию 1.8.4):

    rpm –Uhv gd-1.8.4-4.1386.rpm

    Установите пакет php, если вы его еще не установили:

    rpm –Uh php*

    После этого установите модуль Apache, обеспечивающий поддержку РНР:

    rpm –Uh mod_php*

    Данный модуль должен входить в состав дистрибутива и обычно находится на первом инсталляционном диске. Затем в файле httpd.conf найдите и раскомментируйте следующую строчку. После этого файлы с расширением . php будут правильно обрабатываться сервером:

    AddType application/x-httpd-php4 .php

    Теперь можно проверять правильность настройки двух компонент связки: Apache и РНР. Создайте тестовый файл test. php с таким содержимым:

    <?

     phpinfo();

    ?>

    Этот файл сохраните в каталоге DocumentRoot сервера Apache. Обычно это каталог /var/www/html. После этого запустите любой браузер и введите следующий адрес: http://localhost/test.php

    При этом на экране вы должны увидеть различную информацию о РНР, сервере Apache и других компонентах и библиотеках, например, о библиотеке gd (см. рис. 16.1).

    Рис. 16.1. Функция phpinfo()


    Функция phpinfo() очень информативна: внимательно изучив информацию, которую она предоставляет, вы много узнаете о своем Web-сервере. К тому же эту информацию можно использовать при Web-программировании.

    Теперь немного настроим РНР. С помощью функции phpinfo() узнайте, где расположен инициализационный файл РНР. Обычно он называется php.ini и находится в каталоге /etc. Откройте этот файл в любом текстовом редакторе и раскомментируйте следующую строку, убедившись, что в вашей системе есть файл mysql.so (он устанавливается при установке MySQL):

    extension=mysql.so

    После этого перейдите в секцию MySQL файла php.ini и установите параметры сервера MySQL по умолчанию:

    mysql.default_port =

    mysql.default_socket =

    mysql.default_host = localhost

    mysql.default_user =

    mysql.default_password =

    Эти параметры будут использоваться при установлении соединения с сервером, если в функциях РНР они не будут явно указаны. Никогда не указывайте пользователя root (а тем более его пароль) в качестве пользователя по умолчанию!

    Теперь можно приступить к установке и настройке сервера MySQL. В состав современных дистрибутивов, например, Red Hat 7.2, входит сервер MySQL версии 3.23. Вы можете использовать эту версию, но я рекомендую установить более старую версию — 3.20. Если вы установили версию 3.23, установите также пакет mod_auth_mysql. Данный пакет обеспечивает базовую аутентификацию для сервера Apache с использованием таблиц MySQL. Напомню, что сам сервер MySQL устанавливается командой:

    rpm –Uh mysql*

    Запустите сервер. Можно также добавить вызов сервера MySQL в сценарии автозагрузки. При добавлении сервера MySQL в сценарии загрузки (/etc/re.d/) обратите внимание на то, что сервер MySQL должен быть запущен ПЕРЕД сервером Apache. Представьте такую ситуацию: сначала запускается сервер Apache и сразу же получает запрос от клиента к базе данных MySQL, а сервер баз данных еще не запущен. Даже если запускать сервер MySQL сразу после Apache, то все равно ему понадобится еще некоторое дополнительное время для инициализации. Не забудьте установить пароль для пользователя root сервера MySQL:

    mysql –u root –e "update user set password=password('new_password') user='root'" mysql

    Перезагрузите сервер:

    mysqladmin reload

    Теперь можно проверить работу всей связки Apache + PHP + MySQL. С этой целью создайте небольшой тестовый файл mysql_test.php в каталоге /var/www/html.

    <?

     // Используется имя пользователя root и пароль passwd

     if (!mysql_connect("localhost", "root", "password") )

     {

      echo "He могу соединиться с сервером\n";

      echo mysql_error() ;

      exit;

     }

     echo "Работает!"

    ?>

    Как вы уже успели догадаться, если в окне браузера вы увидите слово «Работает!», значит, вы все сделали правильно.

    16.3.2. Второй способ: из исходных текстов

    Как я уже говорил, это более сложный способ, но у него есть свои преимущества. Во-первых, у вас появится возможность использовать самые последние версии серверов Apache, MySQL и интерпретатора РНР, которых нет в составе даже самого нового дистрибутива Linux. Во-вторых, вы сами сможете контролировать процесс сборки и включать поддержку необходимых вам функций, исключив такую ситуацию, когда, например, разработчики пакетов RPM при сборке интерпретатора РНР забыли включить поддержку сервера MySQL. Мне попадался такой дистрибутив php: функции mysql_connect() в нем просто не было.

    Итак приступим к настройке. Но перед этим скачайте из Интернет последние версии Apache, MySQL и РНР. Предварительно удалите из системы старые версии, если такие были установлены. После загрузки распакуйте исходные тексты в каталог /src. Далее, сначала установите сервер MySQL. С этой целью перейдите в каталог с исходными текстами MySQL и введите следующие команды (первая команда включает поддержку по умолчанию кодировки koi8-r):

    ./configure --with-charset=koi8_ru

    make

    make install

    Затем аналогично установите Apache, перейдя в соответствующий каталог:

    ./configure

    make

    make install

    Для получения информации обо всех опциях команды configure введите команду configure --help. После этого распакуйте РНР и перейдите в каталог с исходными текстами РНР. Введите команды:

    ./configure --with-mysql --with-apache=../apache_1.3.20 --with-mod_charset

    make

    make install

    Первая команда конфигурирует интерпретатор РНР для работы с сервером баз данных MySQL и Web-сервером Apache. Естественно, вы должны правильно указать путь к исходным текстам Apache с помощью параметра –-with-apache.

    Затем вернитесь в каталог, содержащий исходные тексты Apache, и введите команду:

    ./configure --activate-module=src/modules/php4/libphp4.a

    Перед этим нужно убедиться в существовании файла Iibphp4.a. Этот файл должен существовать, если php собрался нормально. Если конфигуратор configure успешно завершил свою работу, введите команды:

    make

    make install

    Этими командами вы собираете сервер Apache с подключенным модулем libphp. Проверить подключился ли нужный модуль вы можете после установки сервера (выполнения команды make install) с помощью команды:

    httpd –l

    В списке модулей должен быть модуль libphp4.c, а также модуль mod_charset.c — его вы подключили при первой сборке. После этого можно отредактировать файл /etc/php.ini и установить пароль для пользователя root сервера MySQL (не путайте пользователя root всей системы с пользователем root сервера MySQL!). Обе операции уже были описаны в п. 16.3.1. Теперь только остается добавить запуск серверов в сценарии автозагрузки системы. Напомню, что сервер MySQL должен запускаться до сервера Apache.








    Главная | В избранное | Наш E-MAIL | Прислать материал | Нашёл ошибку | Наверх