OpenDAP のトランザクションログ
OpenLDAP でバックエンドを BDB にしていると以下のようなファイルができている。これは、OpenLDAP のトランザクションログのファイルである。
# ls /var/lib/ldap/log.000000*
/var/lib/ldap/log.0000006973 /var/lib/ldap/log.0000007021
/var/lib/ldap/log.0000006974 /var/lib/ldap/log.0000007022
/var/lib/ldap/log.0000006975 /var/lib/ldap/log.0000007023
/var/lib/ldap/log.0000006976 /var/lib/ldap/log.0000007024
/var/lib/ldap/log.0000006977 /var/lib/ldap/log.0000007025
/var/lib/ldap/log.0000006978 /var/lib/ldap/log.0000007026
/var/lib/ldap/log.0000006979 /var/lib/ldap/log.0000007027
OpenLDAP のトランザクションログの役割は、更新(追加/削除)結果をクライアントに返すまでに、ファイルのログとして各更新(追加/削除)の操作をコミットして、データの整合性を確保することである。
また、更新(追加/削除)操作を処理する前に、操作のログメッセージのトランザクションログをファイルに保存する。もし、システムがクラッシュした場合、トランザクションログを使用してデータベースをリカバリすることでもある。
トランザクションログファイルがたまり続ける
このトランザクションログファイル、放置しているとたまり続けてディスクを圧迫することになる。
手っ取り早いのは slapd を再起動すれば消えてくれるのだが、運用中はおいそれとデーモンを停止できない。
トランザクションログファイルの削除
トランザクションログファイルは以下の条件がそろっていれば削除ができる
- 実行中のトランザクションに関連していない状態
- 新しいトランザクションログファイルが作成されて、チェックポイントが実行された状態
- 唯一のトランザクションログファイルでない状態
上記の状態にするため以下のコマンドを実行する
# cd /var/lib/ldap
# db_checkpoint -h . -1
# db_archive -h . -d
db_checkpoint の「-1」(えるじゃなくいち)を指定し強制的にチェックポイントを作成する。
db_archive でチェックポイントまでのトランザクションファイルを削除する
これで、すっきりトランザクションログファイルが削除される
自動で削除させる
OpenLDAP の DB設定ファイル「DB_CONFIG」に以下を設定し、slapd を再起動する
RPMでインストールすると「/usr/share/openldap-servers/DB_CONFIG.example」にあるので、コピーして編集すればよい。
set_flags DB_LOG_AUTOREMOVE
これを設定すると BDB への更新が発生し、トランザクションログファイルへの書き込みをした時点で、削除可能なファイルがあるかチェックする。