Как добавить узел в кластер mnesia? - PullRequest
20 голосов
/ 25 апреля 2009

Я новичок в Эрланге и Мнезии ..

Как добавить новый узел disc_only_copies в базу данных mnesia, в которой уже есть схема?

Спасибо

1 Ответ

43 голосов
/ 25 апреля 2009

Начните новый узел (b@node) erl -sname b -mnesia dir '"/path/to/storage"' -s mnesia. Это запускает новый узел ram_copies с именем b@node.

На исходном узле (a@node) в командной строке erlang выполните mnesia:change_config(extra_db_nodes, ['b@node']).. Это приведет к тому, что исходный узел подключится b к кластеру mnesia. На этом этапе b@node присоединился к кластеру, но имеет только копию схемы.

Чтобы создать новый узел b@node, способный хранить копии дисков, нам нужно изменить тип таблицы схемы на b@node с ram_copies на disc_copies. Запустите mnesia:change_table_copy_type(schema, 'b@node', disc_copies). на любом узле.

b@node имеет только копию схемы на данный момент. Чтобы скопировать все таблицы из a@node в b@node и сохранить типы таблиц, вы можете запустить:

[{Tb, mnesia:add_table_copy(Tb, node(), Type)}
 || {Tb, [{'a@node', Type}]} <- [{T, mnesia:table_info(T, where_to_commit)}
                               || T <- mnesia:system_info(tables)]].

Выполнение этой команды может занять некоторое время, так как она скопирует содержимое каждой таблицы по сети.

b@node теперь является точной копией a@node. Вы можете изменить этот оператор - замените переменную Type на disc_only_copies в вызове mnesia:add_table_copy/3, чтобы скопировать таблицы, но убедитесь, что они только на диске.

Документация mnesia объясняет, как использовать функции, которые я здесь показал.

...