ejabberd: переход с mnesia на mysql
Итак, предыстория: Стояли ejabberd-2.0.5-r3, mysql-5.0.70-r1.
Первое что нужно сделать - это установить модуль ejabberd, дающий возможность получить из mnesia таблицы mysql. Называется он mod_ctlextra.
Проще всего сделать это установив ejabberd-modules из SVN репазитория Process-One.
Теперь в конфиге ejabberd (/etc/jabberd/ejabberd.cfg) добавим строчку, благодаря которой сервер подхватит новый модуль. Добавьте эту строчку в секцию Modules, где-нибудь в середине перечня модулей.
Перезапустим сервер.
Я намеренно не использовал /etc/init.d/ejabberd restart, потому что команда очень глючная, после команды остановки, сервер не успевает остановиться, в то время как init-скрипт уже пытается его запустить. Это может привести к тому что придётся руками убивать pid-файл и процесс epmd, чего делать по понятным причинам не рекомендуется.
Подготовим директории для экспорта.
Наконец начнём экспорт.
После завершения операции вы увидите примерно следующее.
Это дампы таблиц MySQL, которые вполне можно загрузить через PHPMyAdmin или mysql < file.txt.
Соотношение к структуре MySQL такое (текстовый файл -> таблица):
После того как структура готова, все домены Ejabberd загружены в MySQL, можно настраивать сервер на работу с БД MySQL. Как это сделать, описанно, например здесь. Только мне пришлось сделать ещё такое телодвижение.
Вот и всё :)
- 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
{mod_ctlextra, []},
- /etc/init.d/ejabberd stop
- /etc/init.d/ejabberd start
- 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
- last.txt -> last
- offline.txt -> spool
- passwd.txt -> users
- roster.txt -> rostetusers
- vcard_search.txt -> vcard_search
- vcard.txt -> vcard
- cd ejabberd-modules/mysql/trunk
- ./build.sh
- cp ebin/*.beam /usr/lib/erlang/lib/ejabberd-2.0.5/ebin