2009-04-27 6 views
34

나는이 더 유래 질문보다 저기 serverfault 질문처럼,하지만 저기 serverfault이 아직되지 않기 때문에, 여기에 간다 알고나는 OpenLDAP를 데이터베이스를 복제하려면 어떻게해야

난에서 응용 프로그램을 이동하기로되어있어 하나의 redhat 서버를 다른 서버로 옮기고 응용 프로그램의 내부 작동에 대한 지식이 없으면 OpenLDAP 데이터베이스를 한 컴퓨터에서 다른 컴퓨터로 스키마와 함께 옮길 수 있습니까?

어떤 파일을 복사해야합니까? 나는 설치가 꽤 표준이라고 생각한다.

답변

38

SourceRebels 대답의 문제는 slapcat(8) 데이터가 ldapadd(1)/ldapmodify(1) 주문할 것을 보장하지 않습니다. 남자 페이지에서 :

 
The LDIF generated by this tool is suitable for use with slapadd(8). 
As the entries are in database order, not superior first order, they 
cannot be loaded with ldapadd(1) without first being reordered. 

플러스 LDAP 프로토콜을 통해 LDIF를로드하는 도구를 사용하여 다음 데이터베이스를 덤프 백엔드 파일을 사용하는 도구를 사용하여 매우 일치하지 않습니다.

나는 slapcat(8)/slapadd(8)또는ldapsearch(1)/ldapmodify(1)의 조합을 사용하는 것이 좋습니다 것입니다. 필자가 선호하는 것은 후자가 LDAP 서버에 대한 셸 액세스 나 파일 이동을 필요로하지 않기 때문입니다.예를 들어

, 덤프 데이터베이스 마스터 서버에서 직류에서 = 마스터, DC = COM 및 백업 서버

 
$ ldapsearch -Wx -D "cn=admin_master,dc=master,dc=com" -b "dc=master,dc=com" -H ldap://my.master.host -LLL > ldap_dump-20100525-1.ldif 
$ ldapadd -Wx -D "cn=admin_backup,dc=backup,dc=com" -H ldap://my.backup.host -f ldap_dump-20100525-1.ldif 

-w 플래그 위 그러나 LDAP의 admin_master 암호를 입력하라는 메시지에로드 우리는 리디렉션되기 때문에 프롬프트가 표시되지 않는 파일에 출력 - 단지 빈 줄. 계속해서 ldap admin_master 암호를 입력하면 제대로 작동합니다. ldapadd를 실행하기 전에 출력 파일의 첫 번째 행을 제거해야합니다 (LDAP 비밀번호 입력 :).

마지막 힌트 인 ldapadd(1)은 (추가) 플래그가 켜져 있고 ldapmodify(1)에 대한 하드 링크입니다.

+2

-Wx가 파일로 리디렉션 할 때 작동하지 않습니다. -Wx를 -w로 바꾸면 이 효과적입니다. –

+4

그들은 일반적으로 쉘 기록에 남기 때문에 암호를 명령 행에 넣는 것을 좋아하지 않습니다 ... – sberder

+1

동의하지만, 그것은 저에게 효과가있는 유일한 것입니다. –

8

일부 약속 :

  • 나만의 스키마 저장

    하고 새 서버에서 정의 객체 클래스.

    포함 /etc/ldap/schema/core.schema

  • 이 포함 : 당신은 그것을 얻을 slapd.conf 파일에 당신의 포함 파일을 찾을 수 있습니다 (예를 들어,이 내 slapd.conf 파일의 일부) 새로운 openLDAP 설치의 개인화 된 스키마 및 객체 클래스.

  • slapcat 명령을 사용하여 전체 LDAP 트리를 단일/다양한 ldif 파일로 내보내십시오.

  • ldapadd을 사용하여 새 LDAP 설치로 ldif 파일을 가져옵니다. 모든

    첫 번째는 당신이 두 서버에서 동일한 스키마를 가지고해야합니다 :

+0

감사합니다 ... 문제는 내가 도구 (slapcat)의 이름을 기억하지 못했다는 것입니다. – elzapp

+1

최신 버전의 OpenLDAP의 경우 대신 'slapadd'를 사용해야합니다 'ldapadd'. –

5

나는 프로토콜을 통해 데이터베이스를 복사 선호합니다.

domain.ldif
의 ldapsearch -LLL -Wx -D "CN = 관리자, DC = 도메인" "DC = 도메인"> -b - 그리고에서 그것을 가져옵니다의 ldapsearch와 데이터베이스가 -dump

새로운 서버 :
의 ldapsearch -LLL -Wx -D "CN = 관리자, DC = 도메인 :
ldapmodify를 -Wx -D"CN = 관리자, DC = 도메인 "-a -f oneline에서

domain.ldif "-b"dc = domain "| ldapmodify -w pass -x -D "cn = admin, dc = domain"-a

bin/slap * 명령을 사용하면서 서버와 직접 대화하는 bin/ldap * 명령을 사용하면 백엔드 파일

+3

"두 서버 모두에서 동일한 스키마가 있는지 확인하는 방법"에 관심이 있습니다. 기존 LDAP를 새 서버로 이전하고 이전에 openLdap을 사용 해본 적이 없다는 임무가 있습니다. 가져 오기가 성공할 수 있도록 이전 서버를 미러링하도록 스키마를 가져 오는 방법은 무엇입니까? – Ketema

15

ldapsearch 및 ldapadd는 반드시 LDAP DB를 복제하는 데 가장 좋은 도구는 아닙니다. slapcat과 slapadd는 훨씬 더 좋은 옵션입니다. slapcat와

수출하여 DB :

slapcat > ldif 

가져 DB slapadd와 (LDAP 서버가 중지되어 있는지 확인) :

slapadd -l ldif 
+1

slapcat 맨 페이지에서 "slapcat의 출력은 slapadd (8)의 입력으로 사용됩니다 .lapap의 출력은 일반적으로 출력을 먼저 편집하지 않고 ldapadd (1) 또는 다른 LDAP 클라이언트의 입력으로 사용할 수 없습니다. 이 편집에는 일반적으로 레코드를 상위 우선 순서로 재정렬하고 사용자가 수정하지 않는 운영 속성을 제거하는 작업이 포함됩니다. " - 즉, slapadd가 작동중인 메타 데이터를 무시하므로 ldapadd를 사용하는 것이 많은 작업 일 수 있습니다. – wmorse

+0

@wmorse slapadd는 운영 메타 데이터를 무시하지 않고 slapcat에서 생성 한 ldif에 포함 된대로로드합니다. entryUUID와 같은 작업 속성에 의존하는 복제 등의 프로세스를 유지하려면이 작업이 중요합니다. – Ralf

2

감사합니다, Vish. 매력처럼 일했습니다!

ldapsearch -z max -LLL -Wx -D "cn=Manager,dc=domain,dc=fr" -b "dc=domain,dc=fr" >/tmp/save.ldif 

ldapmodify -c -Wx -D "cn=Manager,dc=domain,dc=fr" -a -f /tmp/save.ldif 

그냥 대상 도메인이 이미 (내 경우)있는 경우에도에 이동합니다 -c를 크기 제한을 피하기 위해 -z max을 추가 : 나는 명령을 편집했다.

3

의 ldapsearch는 LDAP 서버에 대한 연결을 엽니 다 (충분하지 않은 평판 코멘트 ... 쓰기). 대신 Slapcat이 데이터베이스에 직접 액세스하므로 LDAP 연결의 ACL, 시간 및 크기 제한 및 기타 부산물이 평가되지 않으므로 데이터가 변경되지 않습니다. (Matt Butcher, "Mastering OpenLDAP")

+0

자세한 답변을 제공해주십시오. 그렇지 않으면 당신의 대답은 코멘트가되기에 더 적합 할 수 있습니다. –

+0

그럼에도 불구하고 그 요구 사항에 대한 이유가 있으며, 단지 특권이 없기 때문에 논평하는 대신 답변을하지만, 오히려 눈살을 찌푸리게됩니다. –