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
nEcdyGgx 13 Augustа в 18:26 #
555
nEcdyGgx 13 Augustа в 18:32 #
555
nEcdyGgx 13 Augustа в 18:32 #
555
nEcdyGgx 13 Augustа в 18:32 #
555
nEcdyGgx 13 Augustа в 18:32 #
555
nEcdyGgx 13 Augustа в 18:32 #
-1 OR 2+830-830-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:32 #
-1 OR 3+830-830-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:32 #
-1 OR 3*2
nEcdyGgx 13 Augustа в 18:32 #
-1 OR 3*2>(0+5+830-830) --
nEcdyGgx 13 Augustа в 18:32 #
-1 OR 2+255-255-1=0+0+0+1
nEcdyGgx 13 Augustа в 18:32 #
-1 OR 3+255-255-1=0+0+0+1
nEcdyGgx 13 Augustа в 18:32 #
-1 OR 3*2
nEcdyGgx 13 Augustа в 18:32 #
-1 OR 3*2>(0+5+255-255)
nEcdyGgx 13 Augustа в 18:32 #
-1' OR 2+883-883-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:32 #
-1' OR 3+883-883-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:32 #
-1' OR 3*2
nEcdyGgx 13 Augustа в 18:32 #
-1' OR 3*2>(0+5+883-883) --
nEcdyGgx 13 Augustа в 18:32 #
-1' OR 2+265-265-1=0+0+0+1 or 'BgoeDjf8'='
nEcdyGgx 13 Augustа в 18:32 #
-1' OR 3+265-265-1=0+0+0+1 or 'BgoeDjf8'='
nEcdyGgx 13 Augustа в 18:32 #
-1' OR 3*2
nEcdyGgx 13 Augustа в 18:32 #
-1' OR 3*2>(0+5+265-265) or 'BgoeDjf8'='
nEcdyGgx 13 Augustа в 18:32 #
-1" OR 2+918-918-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:32 #
-1" OR 3+918-918-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:32 #
-1" OR 3*2
nEcdyGgx 13 Augustа в 18:32 #
-1" OR 3*2>(0+5+918-918) --
nEcdyGgx 13 Augustа в 18:32 #
if(now()=sysdate(),sleep(15),0)
nEcdyGgx 13 Augustа в 18:32 #
0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z
nEcdyGgx 13 Augustа в 18:32 #
0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z
nEcdyGgx 13 Augustа в 18:32 #
(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
nEcdyGgx 13 Augustа в 18:32 #
-1; waitfor delay '0:0:15' --
nEcdyGgx 13 Augustа в 18:32 #
-1); waitfor delay '0:0:15' --
nEcdyGgx 13 Augustа в 18:32 #
1 waitfor delay '0:0:15' --
nEcdyGgx 13 Augustа в 18:32 #
VUvCSuxT'; waitfor delay '0:0:15' --
nEcdyGgx 13 Augustа в 18:32 #
-5 OR 869=(SELECT 869 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:32 #
-5) OR 943=(SELECT 943 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:32 #
-1)) OR 829=(SELECT 829 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:32 #
rGFWghhO' OR 790=(SELECT 790 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:32 #
G7uZxW4w') OR 594=(SELECT 594 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:32 #
wnagPX5C')) OR 910=(SELECT 910 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:32 #
555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
nEcdyGgx 13 Augustа в 18:32 #
555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
nEcdyGgx 13 Augustа в 18:33 #
1'"
nEcdyGgx 13 Augustа в 18:33 #
@@K5Shr
nEcdyGgx 13 Augustа в 18:47 #
555
nEcdyGgx 13 Augustа в 18:52 #
555
nEcdyGgx 13 Augustа в 18:52 #
555
nEcdyGgx 13 Augustа в 18:52 #
555
nEcdyGgx 13 Augustа в 18:52 #
555
nEcdyGgx 13 Augustа в 18:52 #
-1 OR 2+440-440-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:52 #
-1 OR 3+440-440-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:52 #
-1 OR 3*2
nEcdyGgx 13 Augustа в 18:52 #
-1 OR 3*2>(0+5+440-440) --
nEcdyGgx 13 Augustа в 18:52 #
-1 OR 2+806-806-1=0+0+0+1
nEcdyGgx 13 Augustа в 18:52 #
-1 OR 3+806-806-1=0+0+0+1
nEcdyGgx 13 Augustа в 18:52 #
-1 OR 3*2
nEcdyGgx 13 Augustа в 18:52 #
-1 OR 3*2>(0+5+806-806)
nEcdyGgx 13 Augustа в 18:52 #
-1' OR 2+862-862-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:52 #
-1' OR 3+862-862-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:52 #
-1' OR 3*2
nEcdyGgx 13 Augustа в 18:52 #
-1' OR 3*2>(0+5+862-862) --
nEcdyGgx 13 Augustа в 18:52 #
-1' OR 2+59-59-1=0+0+0+1 or 'MF7IJwtY'='
nEcdyGgx 13 Augustа в 18:52 #
-1' OR 3+59-59-1=0+0+0+1 or 'MF7IJwtY'='
nEcdyGgx 13 Augustа в 18:52 #
-1' OR 3*2
nEcdyGgx 13 Augustа в 18:52 #
-1' OR 3*2>(0+5+59-59) or 'MF7IJwtY'='
nEcdyGgx 13 Augustа в 18:52 #
-1" OR 2+449-449-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:52 #
-1" OR 3+449-449-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:52 #
-1" OR 3*2
nEcdyGgx 13 Augustа в 18:52 #
-1" OR 3*2>(0+5+449-449) --
nEcdyGgx 13 Augustа в 18:52 #
if(now()=sysdate(),sleep(15),0)
nEcdyGgx 13 Augustа в 18:52 #
0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z
nEcdyGgx 13 Augustа в 18:52 #
0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z
nEcdyGgx 13 Augustа в 18:52 #
(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
nEcdyGgx 13 Augustа в 18:52 #
-1; waitfor delay '0:0:15' --
nEcdyGgx 13 Augustа в 18:52 #
-1); waitfor delay '0:0:15' --
nEcdyGgx 13 Augustа в 18:52 #
1 waitfor delay '0:0:15' --
nEcdyGgx 13 Augustа в 18:52 #
YUrAw3Oq'; waitfor delay '0:0:15' --
nEcdyGgx 13 Augustа в 18:52 #
-5 OR 39=(SELECT 39 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:52 #
-5) OR 206=(SELECT 206 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:52 #
-1)) OR 581=(SELECT 581 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:52 #
mtqT74Kr' OR 447=(SELECT 447 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:52 #
nQJT7GBS') OR 259=(SELECT 259 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:52 #
tAktcEET')) OR 707=(SELECT 707 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:52 #
555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
nEcdyGgx 13 Augustа в 18:52 #
555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
nEcdyGgx 13 Augustа в 18:52 #
1'"
nEcdyGgx 13 Augustа в 18:52 #
@@Prb8W