erlang - significado - ¿Cómo agregar un nodo a un clúster mnesia?
mnesia elixir (1)
Soy un novato erlang y mnesia ..
¿Cómo agrego un nuevo nodo disc_only_copies a una base de datos mnesia que ya tiene un esquema?
Gracias
Inicie su nuevo nodo ( b@node
) erl -sname b -mnesia dir ''"/path/to/storage"'' -s mnesia
. Esto inicia un nuevo nodo ram_copies llamado b@node
.
En su nodo original ( a@node
), en el indicador de mnesia:change_config(extra_db_nodes, [''b@node'']).
ejecute mnesia:change_config(extra_db_nodes, [''b@node'']).
Esto hará que el nodo original se conecte b
al clúster de mnesia. En este punto, b@node
ha unido al clúster pero solo tiene una copia del esquema.
Para hacer nuevo el nodo b@node
capaz de almacenar copias de disco, necesitamos cambiar el tipo de tabla de esquema en b@node
de ram_copies
a disc_copies
. Ejecute mnesia:change_table_copy_type(schema, ''b@node'', disc_copies).
en cualquier nodo.
b@node
solo tiene una copia del esquema en este punto. Para copiar todas las tablas de a@node
a b@node
y mantener los tipos de tabla, puede ejecutar:
[{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)]].
Este comando puede tardar un poco en ejecutarse, ya que copiará el contenido de cada tabla a través de la red.
b@node
ahora es una réplica exacta de a@node
. Puede modificar esa declaración: reemplace la variable Type
con disc_only_copies
en la llamada a mnesia:add_table_copy/3
para copiar las tablas, pero asegúrese de que estén en el disco solamente.
La documentación de mnesia explica cómo usar las funciones que he mostrado aquí.