Podstawy administracji Bazami danych – PostgresSQL

Założenia

System operacyjy Centos, RHEL 5 lub 6

Baza PostgreSQL 8 lub 9

Instalacja

Najprostszym (i IMO najlepszym) rozwiązaniem jest skorzystanie z gotowych pakietów rpm zawierających repozytoria YUMa dla kilku popularnych dystrybucji (Centos, RHEL, Fedora, Scientific Linux).

Wchodzimy na strone: http://yum.postgresql.org/repopackages.php, wybieramy pakiet dla naszej dystrybucji,w moim przypadku bÄ™dzie to:http://yum.postgresql.org/9.1/redhat/rhel-5-i386/pgdg-centos91-9.1-4.noarch.rpm, pakiet instalujemy poleceniem rpm -Uvh nazwa_pakietu

rpm -Uvh pgdg-centos91-9.1-4.noarch.rpm
Przygotowywanie…          ########################################### [100%]

1:pgdg-centos91
########################################### [100%]

Mamy juz zainstalowane repozytoria z pakietami dla postgresa. teraz instalujemy sam serwer postgersa.

yum install postgresql91-server
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: sunsite.icm.edu.pl
* epel: ftp.icm.edu.pl
* extras: sunsite.icm.edu.pl
* updates: sunsite.icm.edu.pl
Setting up Install Process
Resolving Dependencies
There are unfinished transactions remaining. You might consider running yum-complete-transaction first to finish them.
The program yum-complete-transaction is found in the yum-utils package.
–> Running transaction check
—> Package postgresql91-server.i386 0:9.1.3-1PGDG.rhel5 set to be updated
–> Processing Dependency: postgresql91 = 9.1.3-1PGDG.rhel5 for package: postgresql91-server
–> Running transaction check
—> Package postgresql91.i386 0:9.1.3-1PGDG.rhel5 set to be updated
–> Processing Dependency: postgresql91-libs = 9.1.3-1PGDG.rhel5 for package: postgresql91
–> Running transaction check
—> Package postgresql91-libs.i386 0:9.1.3-1PGDG.rhel5 set to be updated
–> Finished Dependency Resolution

Dependencies Resolved

=====================================================================================================================================================================================================================
Package                                                    Arch                                        Version                                                  Repository                                     Size
=====================================================================================================================================================================================================================
Installing:
postgresql91-server                                        i386                                        9.1.3-1PGDG.rhel5                                        pgdg91                                        5.2 M
Installing for dependencies:
postgresql91                                               i386                                        9.1.3-1PGDG.rhel5                                        pgdg91                                        1.6 M
postgresql91-libs                                          i386                                        9.1.3-1PGDG.rhel5                                        pgdg91                                        218 k

Transaction Summary
=====================================================================================================================================================================================================================
Install       3 Package(s)
Upgrade       0 Package(s)

Total download size: 7.0 M
Is this ok [y/N]: y
Downloading Packages:
(1/3): postgresql91-libs-9.1.3-1PGDG.rhel5.i386.rpm                                                                                                                                           | 218 kB     00:00
(2/3): postgresql91-9.1.3-1PGDG.rhel5.i386.rpm                                                                                                                                                | 1.6 MB     00:02
(3/3): postgresql91-server-9.1.3-1PGDG.rhel5.i386.rpm                                                                                                                                         | 5.2 MB     00:07
———————————————————————————————————————————————————————————————————————
Total                                                                                                                                                                                636 kB/s | 7.0 MB     00:11
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing     : postgresql91-libs                                                                                                                                                                             1/3
Installing     : postgresql91                                                                                                                                                                                  2/3
Installing     : postgresql91-server                                                                                                                                                                           3/3

Installed:
postgresql91-server.i386 0:9.1.3-1PGDG.rhel5

Dependency Installed:
postgresql91.i386 0:9.1.3-1PGDG.rhel5                                                                  postgresql91-libs.i386 0:9.1.3-1PGDG.rhel5

Complete!

Konfiguracja

Na początku trzeba zainicjować  bazę danych

/etc/init.d/postgresql-9.1 initdb

Inicjowanie bazy danych:                                   [  OK  ]

Edytujemy plik /var/lib/pgsql/9.1/data/pg_hba.conf i zmieniamy linie

host    all             all             127.0.0.1/32            ident

na

host    all             all             127.0.0.1/32            md5

I tak samo będziemy musieli zrobić z każdym ip, który będziemy się logować‚ do tego serwera.

Start bazy:

/etc/init.d/postgresql-9.1 start

Uruchamianie usługi postgresql-9.1:                        [  OK  ]

Zakłaadanie użytkownika

W shellu przechodzimy na użytkownika postgres

su - postgres

i wydajemy polecenie

createuser -P nazwa_uzytkownika

Zakładanie bazy

W shellu przechodzimy na użytkownika postgres

su - postgres

i wydajemy polecenie

createdb -O nazwa_uzytkownika nazwa_bazy

Logowanie

W shellu przechodzimy na użytkownika postgres

su - postgres

i wydajemy polecenie

psql -U nazwa_uzytkownika -h 127.0.0.1 nazwa_bazy

Obsługa certyfikatów w OpenSSL

Zamiana pfx -> certyfikat końcowy i klucz

a) certyfikat końcowy

openssl pkcs12 -in certyfikat.p12 -out certyfikat.cert.pem -nokeys -clcerts

b) klucz

openssl pkcs12 -in certyfikat.p12 -out certyfikat.key.pem -nodes -nocerts

Zamiana cert końcowy + klucz -> pfx

openssl pkcs12 -export -in certyfikat.cert.pem -inkey certyfikat.key.pem
-out certyfikat.p12

Odczyt w konsoli zawartości certyfikatu

openssl x509 -in certyfikat.crt -inform pem -text

PS. Podziękowania za pomoc w ujarzmieniu OpenSSL Łukaszowi W.

Własne repozytoria pakietów w Centos/RHEL

Aby stworzy repozytorium z pakietów rpm które mamy na dysku wystarczy w katalogi z pakietami wydać polecenie:

createrepo -v .
Na konsoli powinny pojawić się mniej więcej takie komunikaty:

1/9 – ImageMagick-c++-devel-6.2.8.0-4.el5_1.1.x86_64.rpm
2/9 – ImageMagick-perl-6.2.8.0-4.el5_1.1.x86_64.rpm
3/9 – ImageMagick-devel-6.2.8.0-4.el5_1.1.i386.rpm
4/9 – ImageMagick-6.2.8.0-4.el5_1.1.i386.rpm
5/9 – ImageMagick-6.2.8.0-4.el5_1.1.x86_64.rpm
6/9 – ImageMagick-c++-6.2.8.0-4.el5_1.1.x86_64.rpm
7/9 – ImageMagick-c++-6.2.8.0-4.el5_1.1.i386.rpm
8/9 – ImageMagick-devel-6.2.8.0-4.el5_1.1.x86_64.rpm
9/9 – ImageMagick-c++-devel-6.2.8.0-4.el5_1.1.i386.rpm

Saving Primary metadata
Saving file lists metadata

Saving other metadata
Jeśli katalogu pojawi się katalog repodata to znaczy że wszystko jest ok.

Później wystarczy dodac plik NAZWA.repo do repozytorium yuma (/etc/yum.repos.d) o mniej więcej takiej zawartości:

[repo]
name=cd
baseurl=file:///katalog/pakiety_rpm
enable=1
gpgcheck=0

Szybki sposób na ładne strony błędów

Do szybkiej zmiany wyglądu stron popularnych stron błędów (404 itp) można wykorzystać .htaccess.

Np:

ErrorDocument 400 /art.php?art=400
ErrorDocument 401 /art.php?art=401
ErrorDocument 403 /art.php?art=403
ErrorDocument 404 /art.php?art=404
ErrorDocument 500 /art.php?art=500
ErrorDocument 503 /art.php?art=503

Co w moim przypadku po wystąpieniu jednego z ww. błędów wyświetli się strona http://domena/art.php?art=404, u mnie spowoduje to pobranie artykułu  o identyfikatorze 404, ale może to być dowolny link.

Backup z automatycznym usuwaniem plików po kilu dniach

Załóżmy że chcemy mieć backup wykonywany codziennie.
Dodajemy wiec plik do katalogu /etc/cron.daily i nazwie backup

o zawartości:

#przykladowy backup bazy MySQL
mysqldump -uUSER -h 127.0.0.1 -pHASLO BAZA > /home/backup/backup-`date +%d.%m.%Y`.sql
#usuwanie starych plikow starszych niz 7 dni (liczymy od 0)
find /home/backup/ -mtime +6 -delete

Krótkie wyjaśnienie:

Zmieniemy USER, HASLO i BAZA na własne dane, plik backupu będzie przechowywany w katalogu /home/backup i plikach o nazwie “backup-DATA.sql”, gdzie data ma format ROK-MIESIĄC-DZIEŃ