ХАКЕР.PROСергей Супрунов/ amsand@rambler.ru /Скулы на рингеСравнительное описание процесса установки и настройки двух популярных СУБДВ мире свободных программ так повелось: мы говорим «база данных» — подразумеваем мускуль». А чемнам, спрашивается, не угодила Postgre SQL, открытая (даже более открытая, чем MySQL), свободная, с мощнейшейфункциональностью? Кто-то скажет — сложная; кто-то — тяжелая; кто-то — что тормозит. Но всегдали высокая скорость — самое главное? И правда ли то, что поставить ее сложнее, чем совладатьс «дельфинчиком»? Вот в этом мы и попытаемся сегодня разобраться…ИнсталляцияДля чистоты эксперимента обе СУБД ставитьбудем из исходников. Если приложение естьв менеджере пакетов твоей системы (мнепока еще не попадались такие, где не былобы MySQL или PostgreSQL), то лучше устанавливатьоттуда. Так и с обновлениемменьше проблем, и отслеживать зависимостипроще — а то попробуй потом какому-нибудьRoundCube докажи, что СУБД у тебя ужеесть. Но поскольку «официальная» инсталляцияникаких проблем вызвать не должна (скомандовать«aptitude install mysql-server-5.0» или«portinstall postgresql-server» особого трудане составит), то мы пойдем по пути наибольшегосопротивления.Итак, разжившись архивами с исходнымкодом свежих версий (сразу бросаетсяв глаза соотношение их размеров — 24 МбMySQL 5.0.27 против 10 Мб PostgreSQL8.2.0; а еще говорят, что постгрестяжелый), потратим несколько минут на изучениеопций конфигурации, чтобы не было потоммучительно больно… Как обычно, полный списокдоступных опций можно просмотреть, введяв полученном после распаковки тарболакаталоге следующую команду:$ ./configure --helpВ случае с MySQL первое, на что следует обратитьвнимание, — это кодировка, которуюСУБД будет использовать по умолчанию.Поскольку latin1 нас вряд ли устроит, нужнобудет указать опцию '--with-charset' в соответствиис твоей кодировкой (скорее всего, это будетkoi8r, cp1251 или utf8). Если ты планируешьработать в дальнейшем с несколькими кодовымистраницами, то дополнительные кодировкиукажи в опции '--with-extra-charsets'. Чтобысебя ни в чем не ограничивать, можешь задатьсразу '--with-extra-charsets=all'.Вторая вещь, не совсем привычная дляпользователей, работавших ранее с другимиСУБД, — возможность выбрать типтаблиц. MySQL поддерживает целую вереницуразличных движков на все случаижизни: BDB, InnoDB, MyISAM, HEAP... Первыедва — Berkeley DB (разработчик — SleepycatSoftware, ныне принадлежащий Oracle)и InnoDB (опять-таки купленный Oracle) — являютсятранзакционными. Это обеспечиваетвысокую надежность работы с данными (БДне потеряет согласованность в случае возникновенияпрограммного или аппаратногосбоя, и существует возможность восстановитьили откатить незавершенные операции) и позволяетобъединять логически связанные измененияв БД в атомарные (транзакционные)блоки, фиксирующиеся в базе по принципу«все или ничего». Таблицы MyISAM не поддерживаюттранзакции, что обеспечивает имболее высокую скорость работы, но меньшуюнадежность. Таблицы HEAP размещаютсяв оперативной памяти, благодаря чему работаюточень быстро, но, естественно, несохраняют данные при сбоях. С учетом рядадругих ограничений HEAP-таблицы удобноиспользовать для временных данных, но для«нормальной» работы они мало пригодны.Если ты точно знаешь, какой тип таблиц тебенужен, то можно при сборке СУБД указать толькоих. Обычно в таких случаях рекомендуютиспользовать MyISAM там, где ради скоростиможно пожертвовать всеми данными, и InnoDBдля остальных задач.Перейдем к PostgreSQL. С языками здесь чуть проще— эта СУБД не будет напрягать тебя по поводудефолтных кодировок и т.д. Единственное, чтоможно сделать, — это указать в '--enable-nls'перечень языков, на которых система будетс тобой общаться.А вот над чем можно задуматься, так это надсписком языков программирования. Их можноиспользовать для разработки триггеров, хранимыхпроцедур и прочих прелестей. PostgreSQLподдерживает несколько языков на твой выбор— «из коробки» можно включить поддержкуPL/Tcl, PL/Perl и PL/Python, вдогонку к стандартномуPL/pgSQL; также поддерживаютсяPHP и Java.Опции '--with-krb5', '--with-pam' и '--with-ldap'позволяют включить поддержку дополнительныхспособов авторизации, что можетбыть очень полезно для работы в локальнойсети, когда требуется обеспечить предельнуюгибкость и прозрачность при работе пользователейс базой. Также подумай сразу, нужна литебе поддержка безопасных соединений/ 154xàêåð 02 /98/ 07
ХАКЕР.PROpgAdmin: до PL/SQL Developer от Oracle пока явноне дотягивает, но работать приятноinitdb: должно быть все OК('--with-openssl') и протокола автоматической настройкисети Bonjour ('--with-bonjour').По большому счету, параметры, предлагаемые по умолчанию,достаточно хороши, и если ты ставишь себе СУБД «общегоназначения», то вполне можешь ничего не менять. Толькодля MySQL лучше бы не забыть указать кодировку, чтобыпотом не удивляться, что как-то криво работает сортировкапо отечественному алфавиту.Итак, после того как ты наметил для себя, с какими параметрамиследует собирать приложения, сборка и инсталляциятрадиционны и просты:$ sudo addgroup mysql$ sudo adduser -g mysql mysql$ ./configure --prefix=/usr/local/mysql --with-charset=utf8$ make$ sudo make installВозможно, придется самую малость повозиться с зависимостями(раз уж мы пошли по пути сборки изисходников, то избежать этого трудно). Например, потребуетсябиблиотека curses (или ncurses), причем нужныбудут и заголовочные файлы, которые обычно вынесеныв отдельный dev-пакет и по умолчанию редкоустанавливаются.Для PostgreSQL:$ sudo adduser postgres$ ./configure --prefix=/usr/local/pgsql --with-python --with-perl$ make$ sudo make installЗдесь из зависимостей могут встретиться библиотекиreadline и zlib (тоже с dev-пакетами). Если PostgreSQL собираетсяс поддержкой процедурных языков PL/Perlи PL/Python (как в примере), то понадобятся также devпакетыдля Libperl и Python. Для другихопций, естественно, будут выплывать своизависимости. Главное — не забудь создать нужных дляработы пользователей и группы.С установкой на этом все, переходим к настройкам.Инициализация и настройкаИтак, установка позади. Прежде чем приступать кработе, нужно выполнить инициализацию баз, а такжесверить настройки по умолчанию со своимижеланиями. По традиции, начнем с MySQL.Для инициализации базы разработчики подготовилиспециальный скрипт mysql_install_db, который можнонайти в каталоге bin. Запускать его следует с правамиroot, чтобы он мог создать необходимые каталоги, но желательносразу указать параметр '--user', чтобы задатьпользователя, который станет владельцем созданногокаталога. Можно, конечно, потом поменять праваи вручную, но лучше сразу:$ sudo ./mysql_install_db --user=mysql --datadir=/var/db/mysqlВ конце работы этого сценария на экран будут выведеныинструкции по дальнейшим действиям. В частности, нужнобудет задать пароль пользователю root (не путай его ссистемным рутом):$ /usr/local/mysql/bin/mysqladmin -u rootpassword 'jabubntkmysq'Кстати, почитай документацию к mysqladmin — это оченьмощная утилита для администрирования СУБД. База test,с которой будем экспериментировать, создастся автоматическина этапе инициализации. Рабочие базыможно создать либо из клиента mysql командой CREATEDATABASE, либо с помощью той же mysqladmin. При необходимостисоздай пользователя (CREATE USER), и можноработать.Но прежде чем запускать сервер, желательносначала создать конфигурационный файл (по умолчанию/etc/my.cnf). Разработчики любезно заготовилинесколько шаблонов конфигурации дляразличных случаев, смотри каталог support-filesв исходниках. Шаблоны my-large.cnf, my-medium.cnfи my-small.cnf отличаются по большей частизначениями, заданными для различных влияющих напотребление памяти переменных (буферов, кэшейи т.д.). Если интересно, можно выполнитьiВечный спор «MySQLvs PostgreSQL» можнонайти практическина любом «админском»сайте. Главное— не доверяй слепопервым попавшимсяаргументам.http://www.mysql.com— сайт компанииMySQL AB;www.mysql.org— почти то жесамое, но ориентированноенасообщество;www.postgresql.org— официальный сайтСУБД PostgreSQL;www.mysql.ru — русскоязычныйсайтпочитателей MySQL;www.postgresql.ru— страница русскоязычнойдокументациипо PostgreSQL.xàêåð 02 /98/ 07/155