4 \chapter{PostgreSQL Installation und Konfiguration}
5 \label{PostgreSqlChapter}
6 \index[general]{PostgreSQL!Installation und Konfiguration }
7 \index[general]{PostgreSQL Installation und Konfiguration }
8 \index[general]{Update}
10 Wenn Sie sich dazu entschlie{\ss}en PostgreSQL zu verwenden,
11 sollten Sie sich \"{u}ber den Aufwand, den ein Datenbank-Update
12 mit sich bringt, im Klaren sein. Grunds\"{a}tzlich werden Sie bei
13 jeder neuen Hauptversion von PostgreSQL Ihre alte Datenbank
14 exportieren m\"{u}ssen, um sie dann in die neue Version einzupflegen.
15 Das wird dadurch erforderlich, dass sich regelm\"{a}{\ss}ig
16 einige internen "`Datenformate"' \"{a}ndern und von den
17 PostgreSQL-Entwicklern keine Tools zu Verf\"{u}gung gestellt
18 werden, um den Update-Vorgang zu automatisieren. Falls Sie den
19 Daten-Ex- und -Import vergessen sollten, kann es sein das Sie
20 auf die Datenbank nicht mehr zugreifen k\"{o}nnen, da die neue
21 PostgreSQL-Version nicht mit den alten Datenbank-Dateien
24 Sollten Sie PostgreSQL aus dem Quelltext selbst
25 kompilieren, m\"{u}ssen Sie dem configure-Kommando die
26 Option {\bf \verb:--:enable-thread-safety} \"{u}bergeben.
28 \section{PostgreSQL Installation}
29 \index[general]{PostgreSQL!Installation }
30 Wenn Sie bei der Konfiguration des Bacula-Quelltextes {\bf ./configure
31 \verb:--:with-postgresql=PostgreSQL-Verzeichnis} angeben, m\"{u}ssen Sie
32 PostgreSQL mindestens in Version 7.4 installiert haben. \"{A}ltere
33 PostgreSQL-Versionen funktionieren mit Bacula nicht. Falls PostgreSQL
34 in einem Standard-Verzeichnis installiert ist, brauchen Sie das
35 "`PostgreSQL-Verzeichnis"' nicht angeben. Wenn es aber zum Beispiel in
36 Ihrem Home-Verzeichnis installiert ist, m\"{u}ssen Sie den kompletten
39 Die Konfiguration und Installation von PostgreSQL ist zwar nicht sehr
40 schwer, kann aber beim ersten Mal etwas verwirrend sein. Wenn Sie es vorziehen,
41 k\"{o}nnen Sie PostgreSQL auch \"{u}ber die Paket-Verwaltung Ihres Betriebssystems
42 installieren. Vorkompilierte Pakete finden Sie auf www.postgresql.org
43 unter \elink{Downloads}{http://www.postgresql.org/download/}
45 Wenn Sie PostgreSQL lieber aus dem Quelltext selbst kompilieren m\"{o}chten,
46 empfehlen wir Ihnen den Anweisungen in der \elink{PostgreSQL
47 Dokumentation}{http://www.postgresql.org/docs/} zu folgen.
49 Benutzer von FreeBSD finden in diesem \elink{FreeBSD Diary
50 Artikel}{http://www.freebsddiary.org/postgresql.php} weitere n\"{u}tzliche
51 Informationen. Selbstverst\"{a}ndlich enth\"{a}lt der Artikel auch f\"{u}r
52 Nicht-FreeBSD-Benutzer wissenswertes bez\"{u}glich der Installation und
53 Konfiguration von PostgreSQL
55 Falls Sie die Bacula "`Batch-Insert"'-Funktion benutzen wollen, die
56 standardm\"{a}{\ss}ig aktiviert ist und f\"{u}r eine schnelle Verarbeitung
57 der Attribute der gesicherten Datein sorgt, m\"{u}ssen Sie unbedingt darauf
58 achten, dass PostgreSQL mit der Option {\bf \verb:--:enable-thread-safety}
59 kompiliert wurde. Bei den meisten gro{\ss}en Linux-Distributionen ist das
60 der Fall. Aber falls Sie nicht sichert sind k\"{o}nnen Sie mit folgendem
61 Kommando feststellen, ob Ihr PostgreSQL gegen die pthreads-Bibliothek
66 nm /usr/lib/libpq.a | grep pthread_mutex_lock
70 Die Kommandos m\"{u}ssen in etwa eine Zeile wie diese zur\"{u}ckgeben:
78 wenn das der Fall ist, ist alles in Ordnung. Wenn keine Zeilen zur\"{u}ckgegeben
79 werden, wird Bacula beim kompilieren die "`Batch-Insert"`-Funktion deaktivieren.
80 Wenn Sie sie trotzdem benutzen wollen, m\"{u}ssen Sie PostgreSQL mit der Option
81 \verb:--:enable-thread-safety neu kompilieren.
83 Nach der PostgreSQL-Installation fahren Sie bitte mit der Installation von Bacula
84 fort. Sp\"{a}ter wenn Sie diese abgeschlossen haben, lesen Sie hier weiter, um
85 die Konfiguration von PostgreSQL zu beenden. Bitte beachten Sie, dass einige
86 Schritte im weiteren Verlauf der PostgreSQL-Konfiguration Scripte ben\"{o}tigen,
87 die erst bei der Installation von Bacula erstellt werden. Auch wenn Sie f\"{u}r
88 die Installation von PostgreSQL vorkompilierte Pakete verwendet haben (zum
89 Beispiel rpm oder deb) m\"{u}ssen Sie sp\"{a}ter hier weitermachen, um die
90 Konfiguration von PostgreSQL zu vervollst\"{a}ndigen.
92 Bitte beachten Sie, dass Sie das Installationsverzeichnis von PostgreSQL,
93 das Sie mit der Option {\bf \verb:--:with-postgresql=PostgreSQL-Verzeichnis}
94 dem configure-Script \"{u}bergeben haben, auch bei der Konfiguration des
95 Bacula-Quelltextes mit {\bf \verb:--:with-postgresql=PostgreSQL-Verzeichnis}
96 angeben m\"{u}ssen. Die einzige Ausnahme ist, dass Sie kein spezielles
97 Verzeichnis angegeben haben und PostgreSQL somit in den Standard-Verzeichnissen
98 installiert ist. In diesem Fall findet das configure-Script von Bacula
99 die PostgreSQL Header und Bibliotheken auch ohne explizite Angabe des Verzeichnisses.
101 \label{PostgreSQL Konfiguration}
102 \section{Konfiguration PostgreSQL}
103 \index[general]{PostgreSQL!Konfiguration PostgreSQL}
105 An diesem Punkt sollten Sie PostgreSQL und Bacula
106 kompiliert und installiert haben. Falls nicht,
107 schlie{\ss}en Sie bitte diese beiden Schritte erst ab,
108 bevor Sie hier weitermachen.
110 Bei der Installation von Bacula werden mehrere Scripte in das
111 Installations-Verzeichnis kopiert, mit denen Sie verschiedene
112 \"{A}nderungen an der Datenbank durchf\"{u}hren k\"{o}nnen.
113 Diese Scripte haben Namen im Format *\_bacula\_*
114 (z.B. create\_bacula\_database)und dienen dazu die Datenbank
115 zu initialisieren, zu aktualisieren oder zu l\"{o}schen.
116 Diese Scripte sind auch im Bacula-Quelltext-Verzeichnis, nach
117 der Ausf\"{u}hrung des "`./configure"'-Scripts, unter
118 \lt{}bacula-src\gt{}/src/cats zu finden. Wenn Sie sich, zum
119 Beispiel, das Script create\_bacula\_database n\"{a}her ansehen
120 werden Sie merken, dass dieses Script einfach nur
121 create\_postgresql\_database ausf\"{u}hrt. Alle Scripte die *\_bacula\_*
122 heissen, dienen nur der Bequemlichkeit. Es spielt keine Rolle
123 mit welcher Datenbank Sie den Bacula-Quelltext \"{u}bersetzt haben,
124 das Script create\_bacula\_database wird immer die f\"{u}r Sie
125 richtige Datenbank erstellen.
127 Die folgenden Schritte sind n\"{o}tig um die PostgreSQL-Datenbank und Tabellen
128 zu erstellen, die Bacula benutzt:
131 \item cd \lt{}Bacula-Installations-Verzeichnis\gt{}
133 In diesem Verzeichnis finden Sie die Bacula-Datenbank-Scripte.
135 \item ./create\_bacula\_database
137 Dieses Script erzeugt die Bacula-Katalog-Datenbank.
138 Bevor Sie dieses Script ausf\"{u}hren, sollten Sie sich \"{u}ber
139 die verwendete Kodierung der Text-Felder (Pfade, Dateien, ...)
140 innerhalb der Datenbank Gedanken machen. Idealerweise wird UTF8 verwendet.
141 Allerdings sind bei vielen Unix-Systeme die Dateinamen nicht in UTF8 kodiert,
142 weil eventuell UTF8 auf diesen Systemen nicht als Standard-Kodierung gesetzt ist,
143 oder weil Dateien von anderen Systemen (z.B. MacOS X) kopiert worden sind.
144 Aus diesem Grund verwendet Bacula SQL\_ASCII als Datenbank-Kodierung.
145 Wenn Sie das \"{a}ndern wollen, m\"{u}ssen Sie das Script vor der
146 Ausf\"{u}hrung entsprechend anpassen. Bedenken Sie dabei aber, dass
147 sp\"{a}tere Backups eventuell fehlschlagen, falls Bacula Dateien und
148 Verzeichnisse sichern soll, deren Namen nicht UTF8-kodiert sind.
150 Wenn die Ausf\"{u}hrung dieses Scripts fehlschl\"{a}gt kann es sein,
151 dass die Datenbank einem anderen Benutzer geh\"{o}rt als der, mit dem
152 Sie gerade angemeldet sind. Auf vielen Systemen ist der Datenbank-
153 Besitzer {\bf pgsql} oder, auf Fedora und RedHat {\bf postgres}.
154 Am leichtesten finden Sie den Namen des Besitzers in der /etc/passwd.
155 Um einen neuen Datenbank-Benutzer anzulegen, k\"{o}nnen Sie folgende
156 Kommandos ausf\"{u}hren:
160 (Eingabe des root-Passworts)
161 su pgsql (oder postgres)
162 createuser IhrLogin (oder beispielsweise bacula)
163 Shall the new user be allowed to create databases? (y/n) y
164 Shall the new user be allowed to create more new users? (y/n) n
168 Jetzt sollten Sie in der Lage sein das Script ./create\_bacula\_database
171 \item ./make\_bacula\_tables
173 Diese Script erstellt die von Bacula ben\"{o}tigten Tabellen.
175 \item ./grant\_bacula\_privileges
177 Dieses Script erstellt den Datenbank-Benutzer "`bacula"', der nur begrenzte
178 Datenbank-Berechtigungen erh\"{a}lt. Eventuell wollen Sie das Ihrer Situation entsprechend
179 anpassen. Bitte beachten Sie auch, dass dem Datenbank-Benutzer bacula nicht
180 automatisch ein Passwort zugewiesen wird.
184 Jedes dieser drei Scripte (create\_bacula\_database, make\_bacula\_tables und
185 grant\_bacula\_privileges) erlaubt die Verwendung von Kommandozeilen-Parametern.
186 Damit k\"{o}nnen Sie den Datenbank-Benutzernamen oder auch mit "`-h Rechnername"'
187 einen Server angeben, auf dem die PostgreSQL-Instanz l\"{a}uft.
189 Um sich anzusehen, was f\"{u}r Zugriffsrechte die Scripte vergeben haben,
190 k\"{o}nnen Sie diese Kommando ausf\"{u}hren:
194 PostgreSQL-Verzeichnis/bin/psql --command \\dp bacula
198 Falls Autorisationsprobleme beim Zugriff auf die Datenbank auftreten,
199 kann es helfen die Datei pg\_hba.conf (normalerweise in /etc/postgresql/)
200 wie folgt anzupassen:
204 local all all ident sameuser
206 local all all trust sameuser
210 Dadurch k\"{o}nnen einige Probleme behoben werden. Allerdings ist das
211 aus Sicherheitsbedenken kein sehr guter Ansatz, auch wenns es hilft
212 ohne Passwort auf die Datenbank zuzugreifen.
214 Ein besserer Weg ist es auf Passworter-Autorisierung umzustellen
215 und dann bei jeden Datenbank-Login das vergebene Passwort zu benutzen.
216 Dazu f\"{u}gen Sie vor den existierenden "`local"' und "`host"' Eintr\"{a}gen
217 einfach die folgende Zeile ein:
221 local bacula bacula md5
225 Danach ist es notwendig die PostgreSQL-Instanz neu zu starten oder
226 "`pg\_ctl reload"' auszuf\"{u}hren, damit die neue Regel aktiviert wird.
227 Als n\"{a}chstes muss noch ein Passwort f\"{u}r den Datenbank-Benutzer
228 bacula vergeben werden. Wechseln Sie dazu den Benutzer (z.B. mit su - postgres)
229 und f\"{u}hren Sie folgende Kommandos aus:
234 bacula=# alter user bacula with password 'secret';
240 Das vergebene Passwort m\"{u}ssen Sie an den folgenden Stellen in
241 der Bacula-Konfiguration verwenden: einmal im Katalog-Eintrag
242 der Bacula-Director-Konfiguration und im Job-Eintrag des BackupCatalog-Jobs
243 bei dem RunBeforeJob-Kommando. Mit dem Passwort m\"{u}ssen diese
244 beiden Zeilen dann in etwa so aussehen:
248 dbname = bacula; user = bacula; password = "secret"
250 # WARNING!!! Passing the password via the command line is insecure.
251 # see comments in make_catalog_backup for details.
252 RunBeforeJob = "/etc/make_catalog_backup bacula bacula secret"
256 Nat\"{u}rlich sollte ein mehr zuf\"{a}lliges Passwort gew\"{a}hlt werden
257 als in diesem Beispiel. Zudem sollte die Director-Konfiguratios-Datei bacula-dir.conf
258 entsprechend gesichert werden, dass nicht alle Benutzer Zugriff darauf haben,
259 sondern nur der Benutzer als der der Bacula-Director l\"{a}uft.
261 Der Datenbank-Zugriff kann auch \"{u}ber die Datei .pgpass,
262 im Home-Verzeichnis des entsprechenden Benutzer der Zugriff auf
263 die Datenbank ben\"{o}tigt, gel\"{o}st werden.
264 Dazu muss diese Datei folgendes enthalten:
268 localhost:5432:bacula:bacula:secret
272 Danach kann diese Datei in die Home-Verzeichnisse aller Benutzer kopiert werden
273 die Datenbank-Zugriff erhalten sollen (z.B. bacula, root und den Benutzern die
274 \"{u}ber die Bacula-Console Zugriff haben sollen). Die Datei muss dem Benutzer
275 und seiner Gruppe geh\"{o}ren, f\"{u}r root also "`root:root"' und die
276 Zugriffsrechte m\"{u}ssen auf 600 (nur der Benutzer darf sie lesen) gesetzt sein.
278 \section{Re-Initialisierung der Katalog-Datenbank}
279 \index[general]{Datenbank!Re-Initialisierung der Katalog- }
280 \index[general]{Re-Initialisierung der Katalog-Datenbank }
282 Nachdem Sie einige anf\"{a}ngliche Tests mit Bacula gemacht haben, wollen
283 Sie eventuell Ihre Katalog-Datenbank komplett leeren, um alle gelaufenen
284 Test-Backups aus der Datenbank zu entfernen. Um das zu erreichen,
289 cd <install-directory>
295 Bitte bedenken Sie, dass dabei alle Informationen unwiderruflich
296 aus der Datenbank gel\"{o}scht werden. Falls Sie auch beschriebene
297 Volumes wiederverwenden wollen, m\"{u}ssen Sie das Volume-Label
298 \"{u}berschreiben damit Bacula sie erneut benutzen kann.
299 Das erreichen Sie durch:
303 (stop Bacula or unmount the drive)
304 mt -f /dev/nst0 rewind
309 hierbei m\"{u}ssen Sie {\bf /dev/nst0} durch das Device ersetzen,
310 dem Ihr Tapelaufwerk entspricht.
312 \section{PostgreSQL RPM-Installation}
313 \index[general]{PostgreSQL!RPM-Installation}
314 \index[general]{PostgreSQL RPM-Installation}
315 Wenn Sie lieber die PostgreSQL-RPMs Ihrer Distribution verwenden wollen,
316 m\"{u}ssen Sie sowohl das PostgreSQL-RPM, als auch das PostgreSQL-Client-RPM
317 installieren. Die ben\"{o}tigten Client-Bibliotheken finden Sie normalerweise im
318 PostgreSQL-devel-RPM. Folgende Pakete m\"{u}ssen installiert werden:
329 Bei dem meisten anderen Paket-Managern werden die Pakete \"{a}hnlich
330 Namen haben. Nach der Installation der Pakete m\"{u}ssen Sie die oben genannten
331 Bacula-Scripte zur Datenbank-Einrichtung ausf\"{u}hren.
334 \section{Migration von MySQL zu PostgreSQL}
335 \index[general]{PostgreSQL!Migration von MySQL zu }
336 \index[general]{Migration von MySQL zu PostgreSQL }
338 Die hier beschriebenen Schritte wurden mit folgenden Software-Versionen getestet:
341 \item Linux Mandrake 10/Kernel 2.4.22-10 SMP
342 \item Mysql Ver 12.21 Distrib 4.0.15, for mandrake-linux-gnu (i586)
343 \item PostgreSQL 7.3.4
347 Warnung: Sichern Sie Ihre komplette MySQL-Datenbank bevor Sie diese Schritte
351 \item Stoppen Sie Bacula (cd /etc/bacula;./bacula stop oder /etc/init.d/bacula stop)
352 \item F\"{u}hren Sie das folgende Kommando aus, um die Daten Ihrer MySQL-Datenbank
357 mysqldump -f -t -n >bacula-backup.dmp
362 \item Sichern Sie Ihr /etc/Bacula-Verzeichnis, \"{a}ndern Sie aber nicht das bestehende Verzeichnis
363 \item F\"{u}hren Sie erneut die Konfiguration des Bacula-Quelltextes durch und w\"{a}hlen Sie dabei
364 PostgreSQL anstelle von MySQL als Datenbank aus (Option --with-postgresql=PostgreSQL-Verzeichnis).
365 \item Kompilieren und Installieren Sie Bacula.
366 \item Stoppen Sie MySQL.
367 \item Starten Sie PostgreSQL.
368 \item Erstellen Sie den Datenbankbenutzer bacula mit dem weiter oben beschriebenen Kommandos.
369 \item \"{U}berpr\"{u}fen Sie die Datei pg\_hba.conf daraufhin das der Benutzer bacula die entsprechenden
370 Berechtigungen f\"{u}r den Datenbankzugriff besitzt. Wenn Ihr System entsprechend gesichert ist,
371 k\"{o}nnte der Eintrag so aussehen:
377 host all all 127.0.0.1 255.255.255.255 trust
379 Hinweis: PostgreSQL muss nach Anpassungen dieser Datei neu gestartet werden.
384 \item Wechseln Sie in das Verzeichnis /etc/bacula und Initialisieren Sie die Katalogdatenbank
385 mit diesen Kommandos:
389 ./create_postgresql_database
391 ./make_postgresql_tables
393 ./grant_postgresql_privileges
398 \item \"{U}berpr\"{u}fen Sie, ob Sie die Berechtigung zum Datanbankzugriff haben:
406 Das sollte zu keinen Fehlern f\"{u}hren.
408 \item Importieren Sie die Daten aus Ihrer MySQL-Datenbank mit:
412 psql -Ubacula bacula <bacula-backup.dmp>
416 \item Aktualisieren Sie die Datenbank-Tabellen mit folgenden Kommandos:
422 SELECT SETVAL('basefiles_baseid_seq', (SELECT
423 MAX(baseid) FROM basefiles));
424 SELECT SETVAL('client_clientid_seq', (SELECT
425 MAX(clientid) FROM client));
426 SELECT SETVAL('file_fileid_seq', (SELECT MAX(fileid)
428 SELECT SETVAL('filename_filenameid_seq', (SELECT
429 MAX(filenameid) FROM filename));
431 SELECT SETVAL('fileset_filesetid_seq', (SELECT
432 MAX(filesetid) FROM fileset));
434 SELECT SETVAL('job_jobid_seq', (SELECT MAX(jobid) FROM job));
435 SELECT SETVAL('jobmedia_jobmediaid_seq', (SELECT
436 MAX(jobmediaid) FROM jobmedia));
437 SELECT SETVAL('media_mediaid_seq', (SELECT MAX(mediaid) FROM media));
438 SELECT SETVAL('path_pathid_seq', (SELECT MAX(pathid) FROM path));
440 SELECT SETVAL('pool_poolid_seq', (SELECT MAX(poolid) FROM pool));
445 \item Starten Sie Bacula und \"{u}berpr\"{u}fen Sie den Datenbestand.
446 F\"{u}hren Sie einen Backup-Job aus um zu sehen, ob alles erwartungsgem\"{a}{\ss} funktioniert.
449 \section{PostgreSQL updaten}
450 \index[general]{PostgreSQL updaten }
451 \index[general]{updaten!PostgreSQL }
452 \index[general]{Updaten}
453 Wenn Sie PostgreSQL aktualisieren, m\"{u}ssen Sie Bacula
454 neu kompilieren und installieren, andernfalls kann es zu
455 Fehlern kommen. Auch nach der Aktualisierung der PostgreSQL-RPMs
456 ist es notwendig Bacula neu zu bauen. Das k\"{o}nnen Sie einfach,
457 mit den entsprechenden RPM-Kommandos, \"{u}ber das Bacula-Source-RPM
458 ereichen. Eventuell m\"{u}ssen Sie aber vorher die bacula.spec
459 anpassen, damit es mit der neuen PostgreSQL-Version funktioniert.