Сегодня я постараюсь подробно описать процесс сборки и инициализации баз данных MySQL и PostgreSQL на платформе Mac OS X. Начальные шаги для подготовки системы к сборке описаны здесь, так что если вы не выполнили описанных там шагов, вряд ли что-то получится.
Итак, приступим:
![]() |
![]() |
Сборка MySQL
Начнём мы с MySQL. В моём примере будет рассматриваться сборка версии 5.1.39 (последняя в ветке 5.1 на сегодняшний день), но принцип одинаков и для других версий. Также хочется отметить, что в моих примерах сервер MySQL будет установлен в директорию /usr/local, и все команды приведены с учётом этого пути, так что если вы решите устанавливать сервер в другую директорию, изменяйте предложенные в примерах команды в соответствии с необходимыми вам путями.
Чтобы начать, необходимо скачать исходники MySQL нужной вам версии. Для этого нужно зайти на эту страницу, и в разделе "Sources" выбрать для скачивания один из пакетов. Распакуйте исходники из архива: это можно сделать при помощи встроенного в Leopard инструмента для работы с архивами (просто кликните по архиву два раза). Теперь переходим к сборке. Откройте Terminal и перейдите в директорию с исходниками. Далее список команд, которые необходимо последовательно выполнить в терминале.
Для начала ознакомьтесь со списком конфигурационных параметров, которые оказывают влияние на сборку сервера базы данных. Это можно сделать, выполнив в терминале команду:
Вы увидите огромный перечень параметров с описанием того, на что они влияют. Если раньше вам приходилось иметь дело с MySQL, вы поймёте, в чём дело. Если же нет, рекомендую подробнее почитать об этом на сайте MySQL. Я не буду задерживаться на параметрах, перейдём к конфигурации исходников для последующей сборки. Лично я конфигурировал сервер со следующими опциями:
Этими параметрами я указываю, куда именно я хочу установить сервер, а также включаю ряд опциональных параметров.
После того, как конфигурация успешно завершилась, запускаем компиляцию:
Запаситесь терпением, поскольку выполнение этой команды займёт довольно много времени. Посе завершения компиляции, необходимо выполнить команду установки от имени суперпользователя:
Если до этого всё было хорошо (очень на это надеюсь), теперь у вас установлен сервер MySQL, и необходимо выполнить пару шагов для завершения установки. Для начала запустите от имени суперпользователя команду создания ссылки на директорию с сервером (для удобства) и инициализации базы данных:
Теперь, если вы всё ещё находитесь в каталоге с исходниками (если нет, перейдите туда или измените указанную ниже команду), выполните следующее действие:
Тем самым вы скопируете скрипт запуска сервера в каталог с установленным MySQL и дадите права на его исполнение только владельцу файла (его мы изменим позже) либо суперпользователю.
Следующая команда установит пользователя mysql (он присутствует в системе Mac OS X Leopard сразу после установки) владельцем всех файлов установленного сервера:
Вот и всё, теперь осталось лишь запустить сервер. Для этого выполните команду:
Если после выполнения этой команды вы увидите на экране слово SUCCESS, значит всё прошло успешно, сервер запустился. Чтобы остановить сервер, замените параметр start в команде, данной выше, на stop. Чтобы ознакомиться со всеми командами, доступными скрипту, запустите его без аргументов, и он выведен на экран доступный для использования список параметров.
Сборка PostgreSQL
Непосредственно сборка этой базы данных мало чем отличается от MySQL: всё те же ./configure, make и make install, но в зависимости от конфигурационных установок, вам может потребоваться установка дополнительных библиотек. Но обо всём по порядку.
Для начала необходимо скачать исходники: взять коды нужной вам версии можно отсюда. В моих примерах будет рассматриваться сборка версии 8.4.1, но принцип тот же и для других версий, — единственное, что нужно будет делать, в случае, если вы используете отличную от моих примеров версию, — указывать правильные пути к файлам. Как и в случае с MySQL, описанном выше, устанавливать эту базу данных я буду в директорию /usr/local.
Распакуйте исходники, запустите терминал и перейдите в появившуюся у вас директорию.
Список доступных конфигуратору опций вызывается командой
Поскольку я буду собирать базу с поддержкой XML и XSLT, мне потребуется библиотека libxml2, отсутствующая в Mac OS X Leopard (хотя, могу и ошибаться, возможно она там есть, но довольно старая. В подробности не углублялся). Тут-то и потребуется наличие у вас MacPorts, об установке которого я писал во вступлении. Для того, чтобы установить в систему эту библиотеку, необходимо в терминале выполить следующую команду:
После чего в вашу систему будет автоматически установлен ряд библиотек (gperf, libiconv, zlib), необходимых для установки libxml2, а так же нужная нам библиотека.
Теперь приступаем к конфигурированию PostgreSQL
Затем копиляция (она тоже небыстрая) и установка в систему:
Теперь предстоит проделать ряд манипуляций с системными пользователями, чтобы получить группу и пользователя, необходимых для работы PostgreSQL. В отличие от mysql, пользователь postgres в Leopard отсутствует. Его, конечно, можно создать при помощи пункта "Учётные записи" в Системных настройках, но тогда этот пользователь появится и в окне приглашения входа в систему, что вам, уверен, совершенно ни к чему. А потому придётся действовать через консольную утилиту dscl - Directory Service command line utility. Все команды, которые необходимо последовательно выполнить, я объединил в одну, так что для создания группы и пользователя с именем postgres, скопируйте указанную ниже команду и выполните её в терминале:
Поскольку у вас появился пользователь postgres, необходимо назначить его владельцем свежеустановленного сервера PostgreSQL. Для этого выполните команду:
Теперь необходимо инициировать создание начальной данных структуры для сервера и указать серверу, где ему следует хранить данные. Сделать это надо от имени созданного вами пользователя postgres, но чтоб по много раз не переключаться, воспользуемся встроенными средствами системы:
Теперь завершающие шаги: сделайте симлинк на директорию с сервером (для удобства в будущем):
И можете запускать свой сервер:
Чтобы остановить сервер, достаточно выполнить команду
На этом заканчивается первая часть: установка баз данных. Приношу извинения за задержку материалов. Дело в том, что я заболел, так что сейчас мне немного не до компьютера. Остальные материалы опубликую после выздоровления.
Очень надеюсь, что у вас не возникнет проблем со сборкой данных пакетов. Все вопросы и указания на ошибки в тексте, как всегда, можете публиковать в комментариях.








Сент 30, 2009 в 20:40
Статья отличная, только вот мне не понятно, зачем собирать из сорцов если есть пакеты для мака (http://dev.mysql.com/downloads/mysql/5.1.html#macosx-dmg)???
Сент 30, 2009 в 21:39
Дело в том, что во время сборки из сорцов можно указать именно те опции, которые вам требуются, установить именно туда, куда нужно и стартовать так, как вам удобно.
А может быть это просто сила привычки. :)
Окт 1, 2009 в 02:23
а в чем проблема ставить все из портов? зачем тогда ставить mac ports ели ставим все ручками? а если надо будет обновится? что потом делать с зависимостями?
Окт 2, 2009 в 06:45
Еще у меня появилась бешенная мысль, для всего этого написать веб морду, что бы можно было управлять всем этим добром. Т.е. редактирование конфигов через веб, рестарт сервисов, добовление виртуальных хостов и т.д. Потом все это дело в пакет dmg, и почти “Denwer for Mac OS X Leopard” :) Удобно для последующей установки…
Окт 2, 2009 в 23:12
Евгений,
а в чем проблема ставить все из портов?
Можно, конечно, ставить и из портов, но от выхода последней версии продукта в состояние STABLE до появления пакета в портах проходит некоторое (иногда, довольно продолжительное) время. Самостоятельная же сборка позволяет поставить продукт сразу же (или до выхода в STABLE).
зачем тогда ставить mac ports ели ставим все ручками?
Из портов ставим только служебные (системные) библиотеки, дабы отслеживать зависимости и легко обновлять.
а если надо будет обновится?
Обновить версию БД? Никто не мешает. Собираем в другой каталог (для этого при сборке я указываю установку в директорию с номером версии), запускаем на другом порту, тестируем. Если всё хорошо – заменяем симлинк и пользуемся новой версией, а старую убираем. Ну или имеем две независимых ветки продукта (необходимости бывают разные).
что потом делать с зависимостями?
Вот тут не вполне понял, о каких конкретно зависимостях идёт речь.
Окт 8, 2009 в 20:34
Что то продолжения долго нету…
Окт 8, 2009 в 22:28
Приношу за это свои извинения.
Просто в начале прошлой недели я довольно сильно заболел, и последствия того недуга до сих пор не позволяют полноценно прийти в себя и вернуться к делам. :(
Окт 9, 2009 в 08:54
Ясно. Желаю скорейшего выздоровления, блог подождет.
И еще вопрос, возможно ли публиковать что то свое?
Окт 9, 2009 в 09:47
Желаю скорейшего выздоровления, блог подождет.
Благодарю за пожелание и понимание.
И еще вопрос, возможно ли публиковать что то свое?
Не вполне понял, о чём конкретно идёт речь. Вы хотите опубликовать свою статью? Если так, то это, разумеется, не проблема. Главное, чтобы материал по моим субъективным оценкам был достаточно интересным. Можете присылать свои идеи мне на rodion.baskakov@gmail.com, обсудим детали в переписке.
Окт 10, 2009 в 11:53
>>Не вполне понял, о чём конкретно идёт речь. Вы хотите опубликовать свою статью? Если так, то это, разумеется, не проблема.
Именно это я и имел ввиду :)
Окт 11, 2009 в 01:53
В таком случае Вы можете связаться со мной по указанному в моём предыдущем комментарии адресу email для обсуждения подробностей.
Окт 12, 2009 в 17:30
у вас в примерах в место 2х черточек стоит тире
./configure –help
./configure –help
Окт 12, 2009 в 17:38
Прошу прощения, что не обратил на это внимание. Это, по всей видимости, движок Wordpress производит такую замену. :(
Сегодня же перепишу везде, как нужно.
P.S. Проверил статьи в редакторе административного интерфейса, там всё нормально. Значит, подменяет при выводе, а не при сохранении. :(
Окт 12, 2009 в 18:31
sudo su – postgres -c ‘/usr/local/postgresql-8.4.1/bin/initdb -D /usr/local/postgresql-8.4.1/data’
а что делает эта команда? выдает ошибку su: no directory
Окт 12, 2009 в 20:25
а что делает эта команда?
Выполняет от имени суперпользователя запуск сервера от имени пользователя postgres (как бы нелепо и запутанно это ни звучало :) )
выдает ошибку su: no directory
Вы создавали пользователя postgres по инструкции, описанной выше?
Окт 15, 2009 в 21:11
Создалась только группа а юзер нет
выдает ошибку
create: Invalid Path
DS Error: -14009 (eDSUnknownNodeName)
Окт 18, 2009 в 02:42
junkies
Только что скопировал весь блок, создающий группу и пользователя postgres, и вставил в терминал на Snow Leopard — и пользователь и группа создались без единой ошибки.
Не могли бы Вы точнее описать, на какой именно из всех команд вылетает указанная Вами ошибка?
Окт 18, 2009 в 21:36
столкнулся с такой же проблемой как и JUNKLES
попробовал ввести аналогичную команду:
sudo su – postgres -c ‘echo $PATH’
на что получил ответ такой же ответ:
su: no directory
скрипт с манипуляциями системными пользователями вводил как целиком, так и по отдельности каждую команду, заключенную между &&. Разницы не почувствовал. Все предыдущие команды выполнились безошибочно.
Окт 18, 2009 в 23:13
Попробуйте выполнить в терминале вот такую команду:
Это должно решить проблему.
Окт 22, 2009 в 19:00
почти прошло ) после выполнения предыдущей команды и команды sudo su – postgres -c ‘/usr/local/postgresql-8.4.1/bin/initdb -D /usr/local/postgresql8.4.1/data’:
The files belonging to this database system will be owned by user “postgres”.
This user must also own the server process.
The database cluster will be initialized with locale C.
The default database encoding has accordingly been set to SQL_ASCII.
The default text search configuration will be set to “english”.
creating directory /usr/local/postgresql8.4.1/data … initdb: could not create directory “/usr/local/postgresql8.4.1″: Permission denied
я новичок в юникс подобных системах, поэтому не вполне представляю себе что делать с сообщением в последней строке?
Окт 22, 2009 в 20:37
Игорь, попробуйте ещё раз задать права на эту директорию пользователю postgres
а после это ещё раз запустите инициализацию, которая у Вас закончилось ошибкой
Окт 23, 2009 в 00:14
Успех!!! Спасибо. Только вот смущает сообщение:
server starting
mcount: gmon.out: Permission denied
Окт 23, 2009 в 01:50
Это сообщение появляется в том случае, если конфигурировать PostgreSQL с опцией --enable-profiling
В причине его появления я пока, признаться, не разобрался. Если Вас это сообщение сильно смущает, пересоберите PostgreSQL, предварительно сконфигурировав его без указанной выше опции, и всё будет в порядке.
Окт 24, 2009 в 00:42
спасибо за помощь.
а вообще, этот цикл статей очень полезный и нужный.
Дек 21, 2009 в 10:55
Отличный цикл статей, спасибо! Вот кто подскажет если уже стоит MAMP и MySQL версии 5.0.11 – как лучше проапргейдить новым MySQL, если он уже установлен?
Сент 16, 2011 в 20:38
Генрих…
кэп ру …
Сент 16, 2011 в 20:43
Мирон…
графити …