ejabberd: переход с mnesia на mysql

Итак, предыстория: Стояли ejabberd-2.0.5-r3, mysql-5.0.70-r1.

Первое что нужно сделать – это установить модуль ejabberd, дающий возможность получить из mnesia таблицы mysql. Называется он mod_ctlextra.

Проще всего сделать это установив ejabberd-modules из SVN репазитория Process-One.

svn co https://svn.process-one.net/ejabberd-modules
cd ejabberd-modules/mod_ctlextra/trunk
./build.sh
cp ebin/*.beam /usr/lib/erlang/lib/ejabberd-2.0.5/ebin

Теперь в конфиге ejabberd (/etc/jabberd/ejabberd.cfg) добавим строчку, благодаря которой сервер подхватит новый модуль. Добавьте эту строчку в секцию Modules, где-нибудь в середине перечня модулей.

{mod_ctlextra, []},

Перезапустим сервер.

/etc/init.d/ejabberd stop
/etc/init.d/ejabberd start

Я намеренно не использовал /etc/init.d/ejabberd restart, потому что команда очень глючная, после команды остановки, сервер не успевает остановиться, в то время как init-скрипт уже пытается его запустить. Это может привести к тому что придётся руками убивать pid-файл и процесс epmd, чего делать по понятным причинам не рекомендуется.

Подготовим директории для экспорта.

mkdir /tmp/base
chmod 777 -R /tmp/base

Наконец начнём экспорт.

ejabberdctl export2odbc <домен> /tmp/base

После завершения операции вы увидите примерно следующее.

ls /tmp/base
last.txt
offline.txt
passwd.txt
roster.txt
vcard_search.txt
vcard.txt

Это дампы таблиц MySQL, которые вполне можно загрузить через PHPMyAdmin или mysql < file.txt.

Соотношение к структуре MySQL такое (текстовый файл -> таблица):

last.txt -> last
offline.txt -> spool
passwd.txt -> users
roster.txt -> rostetusers
vcard_search.txt -> vcard_search
vcard.txt -> vcard

После того как структура готова, все домены Ejabberd загружены в MySQL, можно настраивать сервер на работу с БД MySQL. Как это сделать, описанно, например здесь. Только мне пришлось сделать ещё такое телодвижение.

cd ejabberd-modules/mysql/trunk
./build.sh
cp ebin/*.beam /usr/lib/erlang/lib/ejabberd-2.0.5/ebin

Вот и всё :)

  • Трэкбеки закрыты
  • Комментарии (2)
  1. Если ставить ejabberd не из пакетов, а инсталятором с оф. сайта, то все компоненты располагаются в /opt/ejabberd-x.x.x/
    где x.x.x – версия приложения.
    В этом случае откомпеллированный модуль нужно скопировать в /opt/ejabberd-x.x.x/lib/ejabberd-x.x.x/ebin и сделать его исполняемым:
    chmod +x mod_ctlextra.beam

    • Хм, а зачем же может понадобится ставить ejabberd инсталятором, когда есть репазитории?

      Кстати он бинарную сборку ставит или компилирует?



Введите код с картинки