OpenLDAP 数据备份与恢复

openldap的数据备份,可以通过slapcatldapsearch两种方式来进行。
openldap的数据恢复,则使用slapadd命令。

一、OpenLDAP备份

1.1 全量备份数据

1.1.1 使用slapcat备份

slapcat命令只能在openldap服务器上执行

1
[admin@localhost ~]$ sudo slapcat -n 2 -l ~/ldap_bak.ldif

查看备份文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[admin@localhost ~]$ cat ldap_bak.ldif | more
dn: dc=sys,dc=com
o: sys com
dc: dogo
objectClass: top
objectClass: dcObject
objectClass: organization
structuralObjectClass: organization
entryUUID: 0f3e7bdc-c8cf-103a-9030-fb0e0d362af1
creatorsName: cn=admin,dc=sys,dc=com
createTimestamp: 20201202094656Z
entryCSN: 20201202094656.375651Z#000000#000#000000
modifiersName: cn=admin,dc=sys,dc=com
modifyTimestamp: 20201202094656Z

dn: cn=admin,dc=sys,dc=com
cn: admin
objectClass: organizationalRole
description: Directory Manager
structuralObjectClass: organizationalRole
entryUUID: 0f4013fc-c8cf-103a-9031-fb0e0d362af1
creatorsName: cn=admin,dc=sys,dc=com
createTimestamp: 20201202094656Z
entryCSN: 20201202094656.386109Z#000000#000#000000
modifiersName: cn=admin,dc=sys,dc=com
modifyTimestamp: 20201202094656Z

……/省略部分内容/……

1.1.2 使用ldapsearch备份

ldapsearch命令可以在openldap服务器或者openldap客户端上执行

1
[admin@localhost ~]$ ldapsearch -x -D "cn=admin,dc=sys,dc=com" -w "abc.123456" -b "dc=sys,dc=com" -LLL -H ldap://192.168.10.74 > ~/ldap_bak.ldif

以上是使用用户密码验证方式备份,如果openldap允许匿名访问的话,执行命令如下:

1
[admin@localhost ~]$ ldapsearch -x -b "dc=sys,dc=com" -H ldap://192.168.10.74 -LLL > ~/ldap_bak.ldif

1.3 备份指定basedn数据

例如,只备份用户数据,可以指定用户所在basedn,例如:cn=users,dc=sys,dc=com

1
[admin@localhost ~]$ ldapsearch -x -D "cn=admin,dc=sys,dc=com" -w "abc.123456" -b "cn=users,dc=sys,dc=com" -LLL -H ldap://192.168.10.74 > ~/uesrs_bak.ldif

二、OpenLDAP恢复

2.1 全量数据恢复

关闭openldap服务,并删除数据

1
2
[admin@localhost ~]$ sudo systemctl stop slapd
[admin@localhost ~]$ sudo rm -rf /var/lib/ldap/*

导入openldap备份数据

1
[admin@localhost ~]$ sudo slapadd -l ~/ldap_bak.ldif

复制DB配置文件

1
[admin@localhost ~]$ sudo cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

调整ldap目录属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[admin@localhost ~]$ sudo chown ldap:ldap -R /var/lib/ldap/
[admin@localhost ~]$ sudo ls -l /var/lib/ldap/
total 29384
-rwx------. 1 ldap ldap 4096 Nov 11 10:46 alock
-rw-------. 1 ldap ldap 8192 Nov 11 10:46 cn.bdb
-rw------- 1 ldap ldap 2351104 Nov 11 10:46 __db.001
-rw------- 1 ldap ldap 17457152 Nov 11 10:46 __db.002
-rw------- 1 ldap ldap 3761704 Nov 11 10:46 __db.003
-rwx------. 1 ldap ldap 845 Nov 11 10:47 DB_CONFIG
-rwx------. 1 ldap ldap 8192 Nov 11 10:46 dn2id.bdb
-rw-------. 1 ldap ldap 8192 Nov 11 10:46 givenName.bdb
-rwx------. 1 ldap ldap 32768 Nov 11 10:46 id2entry.bdb
-rwx------. 1 ldap ldap 10485760 Nov 11 10:46 log.0000000001
-rw-------. 1 ldap ldap 8192 Nov 11 10:46 mail.bdb
-rw-------. 1 ldap ldap 8192 Nov 11 10:46 objectClass.bdb
-rw-------. 1 ldap ldap 8192 Nov 11 10:46 ou.bdb
-rw-------. 1 ldap ldap 8192 Nov 11 10:46 sn.bdb

启动OpenLDAP服务

1
2
3
4
5
6
7
8
9
10
11
12
13
[admin@localhost ~]$ sudo systemctl start slapd
[admin@localhost ~]$ systemctl status slapd
● slapd.service - OpenLDAP Server Daemon
Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2020-11-06 10:55:38 CST; 3 weeks 0 days ago
Docs: man:slapd
man:slapd-config
man:slapd-hdb
man:slapd-mdb
file:///usr/share/doc/openldap-servers/guide.html
Main PID: 894 (slapd)
CGroup: /system.slice/slapd.service
└─894 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:///

2.2 恢复指定basedn数据

恢复指定basedn数据时,需要只有basedn的备份数据,或从全量数据中摘出来需要恢复的basedn数据的单独ldif文件
例如,恢复用户所在的basedn数据

1
[admin@localhost ~]$ ldapadd -H ldap://192.168.10.74 -x -D "cn=admin,dc=sys,dc=com" -w "abc.123456" -f ~/uesrs_bak.ldif

需要注意的是,要提前确保需要恢复的basedn和basedn下的数据不能重复,否则遇到重复的数据会失败并退出,可以提前将重复的数据删除再进行恢复或者恢复到一个新的basedn(需要改备份文件的basedn相关内容)

-------------本文结束感谢您的阅读-------------