Начните новый узел (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 объясняет, как использовать функции, которые я здесь показал.