2009-04-24 3 views

답변

38
새 노드 ( [email protected]) erl -sname b -mnesia dir '"/path/to/storage"' -s mnesia를 시작

. 그러면 [email protected]이라는 새 ram_copies 노드가 시작됩니다.

원래 노드 ([email protected])에서 erlang 프롬프트에서 mnesia:change_config(extra_db_nodes, ['[email protected]']).을 실행하십시오. 그러면 원래 노드가 mnesia 클러스터에 b을 연결하게됩니다. 이 시점에서 [email protected]은 클러스터에 가입했지만 스키마 사본 만 보유합니다.

는 디스크 복사본을 저장 [email protected] 할 수있는 노드를 새로 만들려면, 우리는 disc_copiesram_copies에서 [email protected]에 스키마 테이블 형식을 변경해야합니다. 모든 노드에서 mnesia:change_table_copy_type(schema, '[email protected]', disc_copies).을 실행하십시오.

[email protected]에는 현재 스키마 사본 만 있습니다. [email protected][email protected]에서 모든 테이블을 복사하여 테이블 형식을 유지하기 위해, 당신은 실행할 수 있습니다

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

이 명령은 네트워크를 통해 각 테이블의 내용을 복사하므로 실행 시간이 걸릴 수 있습니다.

[email protected]은 이제 [email protected]의 정확한 복제본입니다. 해당 문을 수정할 수 있습니다 - mnesia:add_table_copy/3에 대한 호출에서 disc_only_copies으로 Type 변수를 바꿔 테이블을 복사하지만 디스크에만 있는지 확인하십시오.

mnesia documentation은 여기서 설명한 기능을 사용하는 방법을 설명합니다.

+0

아마도이 질문에 대한 답변을 알고있을 것입니다. http://stackoverflow.com/questions/3702201/remove-not-exist-already-node-from-mnesia-clusterscheme – vinnitu

+0

이 비슷한 질문에 대한 답을 알고 있다고 생각하지 마십시오. 관련 질문? http://stackoverflow.com/questions/13398632/creating-mnesia-disk-copies-of-existing-ram-table – mezamorphic