ХАКЕР.PROГрафические инструменты для работы с СУБДИ MySQL, и PostgreSQL не обделены средствами для более комфортной работы с СУБД. Прежде всего, следует отметитьвездесущий PHP-инструментарий: phpPgAdmin и phpMyAdmin. Также для PostgreSQL нужно выделить утилиту pgAdmin— простой, но в то же время достаточно удобный способ администрировать базу.«diff -u my-large.cnf my-small.cnf». Для небольшойдомашней машины вполнеподойдет шаблон my-small.cnf, которыйследует скопировать в /etc под именемmy.cnf. Для более крупных инсталляцийлучше просмотреть самому один из выбранныхшаблонов и подогнать параметрыпод оптимальные значения в зависимостиот объема имеющейся в наличии памяти.Если ты планируешь использовать таблицытипа InnoDB, то my.cnf нужно будет обязательноподредактировать — по умолчаниювсе, что касается этих таблиц, в немзакомментировано.Отыщи в конфигурационном файле в секции[mysqld] следующие строки, снимикомментарии и приведи в соответствие сосвоими потребностями:# Путь к каталогу, где будут размещеныInnoDB-таблицы:innodb_data_home_dir = /var/db/mysql/innodb/db/# Имя файла хранилища, его первоначальныйразмер (10 Мб)# и разрешение на автоматическоерасширение при необходимости:innodb_data_file_path =ibdata1:10M:autoextend# Каталог хранения журналов иархивов# (если есть возможность, лучшевыносить на отдельный винт):innodb_log_group_home_dir = /var/db/mysql/innodb/log/innodb_log_arch_dir = /var/db/mysql/innodb/log/# Память, отводимая под буферы(если на машине работает что-то,# кроме mysql, лучше не подниматьвыше 30-70% от объема ОЗУ):innodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size= 2M# Размеры журнальных файлов (рекомендуетсядержать на уровне# 20-25% от размера буферов):innodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50/ 156xàêåðПриведенные цифры, естественно, можноменять в зависимости от конкретной ситуации— от ресурсопотребления другихпроцессов, работающих на этой жемашине, объема памяти и т.д. Каталоги, указанныев конфигурации, должны существовать(в том смысле, что их придется создатьвручную до того, как сервер будет перезапущенс новыми параметрами) и принадлежатьпользователю mysql:$ sudo -u mysql mkdir -p /var/db/mysql/innodb/{db,log}В опции innodb_data_file_path можно указыватьнесколько файлов. При первом запускесервера после внесения изменений в конфигурациюбудет выполнена инициализацияуказанных хранилищ:$ sudo /usr/local/mysql/bin/mysqld_safe --user=mysql --datadir=/var/db/mysqlStarting mysqld daemon withdatabases from /var/db/mysqlСразу замечу, что остановить запущенныйсервер можно такой командой:$ sudo kill `sudo cat /var/db/mysql/toshiba.pid`Для удобства команды запуска и остановаможно оформить в виде стартовогосценария. Еще одна причина воспользоватьсядистрибутивной установкой — там всеэто уже сделано.Таблицы формата MyISAM будут размещатьсяв указанном каталоге «пофайлово», в то времякак таблицы InnoDB размещаются в одномили нескольких файлах-хранилищах, согласноконфигурационному файлу.В PostgreSQL поддерживается один тип хранилищаданных, поэтому все несколько проще— нужно создать каталог, где будет располагатьсяхранилище, сделать его владельцемпольз ов ателя postg res и выполнитьинициализацию:$ sudo mkdir -p /var/db/pgsql/data$ sudo chown postgres /var/db/pgsql/data$ sudo su postgres$ cd /usr/local/pgsql/bin$ ./initdb -D /var/db/pgsql/data$ exitПосле инициализации будет выведенопредупреждение, что для локальных подключенийразрешена так называемая trust-аутентификация(об этом — чуть позже), и показаныдва способа запустить сервер. В первом случае— «postgres -D /var/db/pgsql/data» — серверзапустится в интерактивном режиме, то естьинформация о его работе будет отображатьсяв окне терминала, а при закрытии терминаласервер будет остановлен. Безусловно, работающийпроцесс всегда можно перевести в фоновыйрежим, либо сразу указав символ «&» послекоманды, либо в дальнейшем приостановивего работу комбинацией клавиш и затемвозобновив в фоне с помощью утилиты bg:$ sudo -u postgres ./postgres -D/var/db/pgsql/dataLOG: database system was shutdown at 2006-12-16 13:58:54 MSK...LOG: database system is ready// здесь нажали [1]+ Stopped sudo -u postgres ./postgres -D /var/db/pgsql/data$ bg[1]+ sudo -u postgres ./postgres -D/var/db/pgsql/data &Управление сервером с помощью pg_ctl, намой взгляд, более удобно, и в этом случаесервер будет сразу запущен как фоновыйпроцесс. Только нужно не забывать, чтообе команды должны быть выполнены отимени пользователя postgres. В приведенномвыше примере это выполняется с помощьюутилиты sudo. Если запуск сервера прошел безошибок, значит, для работы все готово.А если возникнут какие-либо проблемы, тоони достаточно подробно будут расписаныв сообщениях, выводимых на экран илив лог. Чаще всего они бывают связаны с правамидоступа: либо не того пользователясделали владельцем хранилища, либо отимени неправильного пользователя запускается02 /98/ 07
ХАКЕР.PROmysql_install_db: читаем все внимательноphpMyAdmin: все, что нужно для комфортной работы, — браузери кусочек Апачасервер. Но перед началом работы хорошо быпосмотреть, а что же у нас творится в настройках.Конфигурация PostgreSQL запрятанав каталоге хранилища, которое создаетсяво время инициализации. В нашем случаеэто будут файлы postg resql.conf,pg_hba.conf и pg_ident.conf в каталоге/var/db/pgsql/data. В первом из нихсосредоточены основные опции, управляющиеработой сервера. По умолчанию ониработают достаточно хорошо, но в случаепроблем с производительностью имеет смыслпопробовать их подкрутить под конкретныеусловия. Оставшиеся два файла отвечают задоступ к серверу. Они снабжены предельноподробными комментариями, так что разобратьсяс ними не составит труда. Кстати, предупреждениео trust-аутентификации, полученноепри инициализации базы, связано соследующими строками в pg_hba.conf:# "local" is for Unix domain socketconnections onlylocal all all trust# IPv4 local connections:host all all 127.0.0.1/32 trust# IPv6 local connections:host all all ::1/128 trustОни означают, что любой локальныйпользователь, подключающийся к любойбазе, сможет соединяться с сервером безуказания пароля. В некоторых дистрибутивахвместо второго all (означающего «всепользователи») ставят более жесткое ограничение— sameuser, при котором пользовательможет подключиться к базе только в томслучае, если его имя в PostgreSQL совпадаетс системным именем. Если тебе нужен доступк БД «снаружи», добавь соответствующиестроки. Например, так можно разрешитьдоступ к серверу всем пользователям к базеcommon из указанной подсети с аутентификациейчерез PAM или LDAP (поддержка соответствующихтипов аутентификации должнабыть добавлена на этапе компиляции):host commonall 10.0.0.0/8 pam,ldapОтрегулировав права, можно подключатьсяк базе template1 (она создается при инициализациии служит шаблоном для всех создаваемыхвпоследствии баз, если явно не указанабаза-«родитель»):$ bin/psql -U postgres template1template1=# create user test;CREATE ROLEtemplate1=# create database testowner test;CREATE DATABASEtemplate1=# \c test testYou are now connected to database«test» as user «test».test=> create table test (fnumnumeric, fstr varchar);CREATE TABLEtest=> \qЗдесь мы создали пользователя test и одноименнуюбазу для экспериментов. Раз всеполучилось, значит, установка прошла безэксцессов.Кое-что про функциональностьК сожалению, рамки этой статьи не позволяютподробно остановиться на работес базами, но это, как говорится, уже делотехники. Пару слов скажу о возможностях,которые предоставляют эти СУБД.Начиная с версии 5.0, функциональныевозможности MySQL существеннорасширились: появилась поддержкатриггеров, хранимых процедур, представлений(view), курсоров. Поддержканескольких типов таблиц позволяет гибколавировать между надежностью и скоростью.В общем, MySQL сейчас вплотнуюприближается по своим возможностямк таким «монстрам», как Oracle, DB2 иMS SQL, хотя на данном этапе ей пока недостаетзрелости.А что же PostgreSQL? Все перечисленные вышефункциональные возможности в ней былидавно, и их можно считать вполне зрелымии проверенными временем. Огромнымплюсом, на мой взгляд, является возможностьиспользования различных языков для разработки«серверной логики».К тому же PostgreSQL всегда славилась своейподдержкой стандартов — в отличие отдругих СУБД, включая MySQL, в PostgreSQLстандарты SQL-92 и SQL-99 поддерживаютсянаиболее полно и последовательно, в последнихверсиях появилась частичнаяподдержка SQL-2003. Хотя, как показываетпрактика, стандарты, к сожалению, не пользуютсядолжной популярностью.О производительности говорить не буду, посколькуэтот вопрос требует проведения серьезногоисследования и, по возможности, наразличном железе. Небольшие тесты, которыея проводил «на коленке», не продемонстрировалиявного преимущества MySQL, дажес таблицами MyISAM, и если веритьсторонним исследованиям, PostgreSQLгораздо лучше держит нагрузку, в то времякак MySQL проваливается при большом числеодновременных запросов (смотри tweakers.net/reviews/657/2).ИтогиИтак, получается, что MySQL и PostgreSQLсейчас довольно близки функционально, хотя M y S Q L п о - п р е ж н е м у в р о л идогоняющего. То, что одна сложнее другойв установке или в работе, тоже не скажешь,— это, скорее, дело привычки и личныхпредпочтений. Скорость работы — вопросс ложный, и отв ет на него з ависитот целого ряда условий (режим использования,железо, размеры и структура базы и т.д.).Выбирать, конечно, тебе, но советую обратитьвнимание на PostgreSQL, если ты еще с нейне работаешь. Она того заслуживает. zxàêåð 02 /98/ 07/157