CONTENT
- CHANGES
Szukaj
#top Instalacja¶
- Instalacja
- Poinstalacyjna konfiguracja
- keep oryginal start script
- update start script
- create config directory
- create /etc/sysconfig/pgsql/postgresql
- create data directory
- create log directory
- initialize database
- post config data directory environment
- create/update config /etc/postgresql/ files
- create logrotate postgresql logs
- allow login any user to postgresql server
- start server
- post config/cleaning environment
- set-all-grant-to-postgres
- revoke-all-grant-public
- create nagios3 database (for monitoring) + grant access to database
- test connection
- psql - PostgreSQL interactive terminal
- multiple instances
Instalację serwera PostgreSQL można wykonać na różne sposoby: od kompilacji ze źródeł poprzez instalację pojedynczych paczek rpm za pomocą polecenia rpm skończywszy na instalacja z użyciem menedżera pakietów, który zainstaluje wszystkie niezbędne paczki wraz zależnościami.
Celem niniejszego dokumentu nie jest rozważanie różnych metod instalacji tylko nieco usprawnienie użyteczności konfiguracji serwera PostgreSQL po zainstalowaniu oraz wprowadzenie porządku / hierarchi położenia plików z których korzysta usługa w strukturze katalogowej..
Dobrą konwencją jest przechowywanie plików konfiguracyjnych każdego demona we własnym osobnym podkatalogu w katalogu etc, w przypadku instalacji PostgreSQLa z paczki w systemach Linux z rodziny RedHat taki katalog należy utworzyć i przenieć do niego pliki konfiguracyjne
postgresql.conf
, pg_hba.conf
, pg_ident.conf
po zainicjalizowaniu bazy danych (pliki tworzone są podczas inicjalizacji bazy danych). Podkatalog w katalogu etc jest sensowniejszą lokalizacją na pliki konfiguracyjne niż katalog w którym zapisane są dane.Zgodnie definicja FHS: katalog
/srv
zawiera: Data for services provided by this system
toteż jako katalog w którym PostgreSQL będzie przechowywał dane został wybrany: /srv/pgsql
i zostanie on utworzony z odpowiednimi atrybutami.Wszystko to zostało opisane poniżej.
#top Poinstalacyjna konfiguracja¶
#top keep oryginal start script¶
mv /etc/init.d/postgresql /etc/init.d/postgresql-rpm cp -av /etc/init.d/postgresql-rpm /etc/init.d/postgresql
#top update start script¶
sed 's,\($SU -l postgres -c "$PGENGINE/pg_ctl reload.*\)$,echo -n "Reloading ${NAME} service:"\n \1;res=$?\n if [ "$res" = "0" ];then echo_success; else echo_failure; fi\n echo,g' -i /etc/init.d/postgresql
Run below command only on
CentOS 5.*
systemsed 's,\[ $pid -a -e "/proc/$pid" \],[ "$pid" -a -e "/proc/$pid" ],g' -i /etc/init.d/postgresql sed 's,\[ $pid \],[ "$pid" -a -e "/proc/$pid" ],g' -i /etc/init.d/postgresql
Run below command only on
CentOS 6.*
systemsed 's,\[ "x$pid" != x \],[ "x$pid" != x -a -e "/proc/$pid" ],g' -i /etc/init.d/postgresql
#top create config directory¶
mkdir -p /etc/postgresql
#top create /etc/sysconfig/pgsql/postgresql¶
###PGOPTS='-h 0.0.0.0 -c config_file="/etc/postgresql/postgresql.conf" -c hba_file="/etc/postgresql/pg_hba.conf" -c ident_file="/etc/postgresql/pg_ident.conf"'
touch /etc/sysconfig/pgsql/postgresql echo "PGDATA=/srv/pgsql/data" >> /etc/sysconfig/pgsql/postgresql echo "PGPORT=5432" >> /etc/sysconfig/pgsql/postgresql echo "PGOPTS='-c config_file=\"/etc/postgresql/postgresql.conf\"'" >> /etc/sysconfig/pgsql/postgresql echo "LANG=en_US.UTF-8" >> /etc/sysconfig/pgsql/postgresql echo "LANGUAGE=en_US.UTF-8" >> /etc/sysconfig/pgsql/postgresql
#top create data directory¶
mkdir -p /srv/pgsql chmod 700 /srv/pgsql chown postgres:postgres /srv/pgsql
#top create log directory¶
mkdir /var/log/postgresql chown postgres /var/log/postgresql echo "PGLOG=/var/log/postgresql/pgstartup.log" >> /etc/sysconfig/pgsql/postgresql
#top initialize database¶
Run below command only on
CentOS 5.*
system (psql <=8.1.11):
su -l postgres -c "/usr/bin/initdb -D /srv/pgsql/data"
Run below command only on
CentOS 6.*
system (pgsql >=8.4.4):/etc/init.d/postgresql initdb
#top post config data directory environment¶
cat > /srv/pgsql/.bash_profile << EOF [ -f /etc/profile ] && source /etc/profile PGDATA=/var/lib/pgsql/data export PGDATA EOF
chown postgres:postgres /srv/pgsql/.bash_profile sed 's,PGDATA=/.*$,PGDATA=/srv/pgsql/data,g' -i /srv/pgsql/.bash_profile sed 's,/var/lib/pgsql,/srv/pgsql,g' -i /etc/passwd
#top create/update config /etc/postgresql/ files¶
cp -av /srv/pgsql/data/postgresql.conf /etc/postgresql/postgresql.conf cp -av /srv/pgsql/data/pg_ident.conf /etc/postgresql/pg_ident.conf cp -av /srv/pgsql/data/pg_hba.conf /etc/postgresql/pg_hba.conf echo >> /etc/postgresql/pg_hba.conf
sed "s,^\(.*hba_file .*\)$,hba_file = '/etc/postgresql/pg_hba.conf'\n\1,g" -i /etc/postgresql/postgresql.conf sed "s,^\(.*ident_file .*\)$,ident_file = '/etc/postgresql/pg_ident.conf'\n\1,g" -i /etc/postgresql/postgresql.conf sed "s,^\(.*listen_addresses .*\)$,listen_addresses = '0.0.0.0'\n\1,g" -i /etc/postgresql/postgresql.conf sed "s,\(^log_directory.*$\),\nlog_directory = '/var/log/postgresql'\n#\1,g" -i /etc/postgresql/postgresql.conf sed "s,\(^log_filename.*$\),\nlog_filename = 'postgresql-main%.log'\n#\1,g" -i /etc/postgresql/postgresql.conf sed "s,\(^.*log_line_prefix.*$\),\nlog_line_prefix = '%t '\n\1,g" -i /etc/postgresql/postgresql.conf
przydatne, ale nie niezbędne:
#sed "s,^\(.*lc_messages .*\)$,lc_messages = 'en_US.UTF-8'\n\1,g" -i /etc/postgresql/postgresql.conf #sed "s,^\(.*lc_monetary .*\)$,lc_monetary = 'en_US.UTF-8'\n\1,g" -i /etc/postgresql/postgresql.conf #sed "s,^\(.*lc_numeric .*\)$,lc_numeric = 'en_US.UTF-8'\n\1,g" -i /etc/postgresql/postgresql.conf #sed "s,^\(.*lc_time .*\)$,lc_time = 'en_US.UTF-8'\n\1,g" -i /etc/postgresql/postgresql.conf #sed "s,^\(.*default_text_search_config .*\)$,default_text_search_config = 'pg_catalog.simple'\n\1,g" -i /etc/postgresql/postgresql.conf
#top create logrotate postgresql logs¶
cat > /etc/logrotate.d/postgresql << EOF
# logrotate postgresql-common
/var/log/postgresql/*.log {
weekly
rotate 10
copytruncate
nodelaycompress
compress
notifempty
missingok
}
EOF
#top allow login any user to postgresql server¶
- METHOD=trust - without password
- METHOD=md5 - need password
(CentOS 5.3)
normaly connection to database need to be postgres user: sudo -u postgres psql -U postgres template1
- allow login any user to postgresql server (CentOS 5.3)
sed 's,^\(local.*\)ident sameuser,\1trust,g' -i /etc/postgresql/pg_hba.conf psql -U postgres template1
(CentOS 6.0)
- allow login any user as postgres user to postgresql server (CentOS 6.0)
- allowing any user login to postgresql server (CentOS 5.3)
sed -e 's,\(local.*all.*all.*\)ident,\1trust,g' -e 's,\(host.*all.*all.*127.0.0.1/32.*\)ident,\1trust,g' -e 's,\(host.*all.*all.*::1/128.*\)ident,\1trust,g' -i /etc/postgresql/pg_hba.conf
/etc/postgresql/pg_hba.conf
# TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust
#top start server¶
/etc/init.d/postgresql start
tail -f /var/log/postgresql/pgstartup.log tail -f /var/log/postgresql/postgresql-main.log
test connection
psql -U postgres template1
#top post config/cleaning environment¶
remove not needed privileges
#top set-all-grant-to-postgres¶
psql -U postgres template1 -f - << EOF REVOKE ALL ON DATABASE template1 FROM public; REVOKE ALL ON SCHEMA public FROM public; GRANT ALL ON SCHEMA public TO postgres; CREATE LANGUAGE plpgsql; EOF
#top revoke-all-grant-public¶
psql -U postgres template1 -f - << EOF REVOKE ALL ON pg_user FROM public; REVOKE ALL ON pg_roles FROM public; REVOKE ALL ON pg_group FROM public; REVOKE ALL ON pg_authid FROM public; REVOKE ALL ON pg_auth_members FROM public; REVOKE ALL ON pg_database FROM public; REVOKE ALL ON pg_tablespace FROM public; REVOKE ALL ON pg_settings FROM public; GRANT SELECT ON pg_database TO public; GRANT SELECT ON pg_tablespace TO public; EOF
#top create nagios3 database (for monitoring) + grant access to database¶
echo "host nagios3 nagios3 10.5.5.5/32 md5" >> /etc/postgresql/pg_hba.conf echo "host nagios3 nagios3 10.41.0.250/32 md5" >> /etc/postgresql/pg_hba.conf
/etc/init.d/postgresql reload
psql -U postgres template1 -f - << EOF CREATE ROLE "nagios3" NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT LOGIN ENCRYPTED PASSWORD 'nagios3'; CREATE DATABASE "nagios3" WITH OWNER="nagios3"; REVOKE ALL ON DATABASE "nagios3" FROM public; EOF
psql -U postgres nagios3 -f - << EOF GRANT ALL ON SCHEMA public TO "nagios3" WITH GRANT OPTION; EOF
Run below command only on
CentOS 5.*
system (pgsql <= 8.1.11):psql -U nagios3 nagios3 -f - << EOF CREATE SEQUENCE nagios3_idkey_seq; CREATE TABLE nagios3_table ( idkey integer not null DEFAULT NEXTVAL('nagios3_idkey_seq'), name varchar(255) ); INSERT INTO nagios3_table (name) VALUES ('column: name, row: 1'); EOF
Run below command only on
CentOS 6.*
system (pgsql >= 8.4.4):psql "host=localhost user=nagios3 password=nagios3 dbname=nagios3" -f - << EOF CREATE SEQUENCE nagios3_idkey_seq; CREATE TABLE nagios3_table ( idkey integer not null DEFAULT NEXTVAL('nagios3_idkey_seq'), name varchar(255) ); EOF
#top test connection¶
Run below command only on
CentOS 5.*
system (pgsql <= 8.1.11):echo '10.5.5.5:5432:nagios3:nagios3:nagios3' > $HOME/.pgpass; chmod go-rwx $HOME/.pgpass psql -h 10.5.5.5 -U nagios3 nagios3 rm -f $HOME/.pgpass echo '10.41.0.50:5432:nagios3:nagios3:nagios3' > $HOME/.pgpass; chmod go-rwx $HOME/.pgpass psql -h 10.41.0.50 -U nagios3 nagios3 rm -f $HOME/.pgpass echo '10.41.0.51:5432:nagios3:nagios3:nagios3' > $HOME/.pgpass; chmod go-rwx $HOME/.pgpass psql -h 10.41.0.51 -U nagios3 nagios3 rm -f $HOME/.pgpass echo '10.41.0.52:5432:nagios3:nagios3:nagios3' > $HOME/.pgpass; chmod go-rwx $HOME/.pgpass psql -h 10.41.0.52 -U nagios3 nagios3 rm -f $HOME/.pgpass
Run below command only on
CentOS 6.*
system (pgsql >= 8.4.4):psql "host=10.5.5.5 user=nagios3 password=nagios3 dbname=nagios3" psql "host=10.41.0.50 user=nagios3 password=nagios3 dbname=nagios3" psql "host=10.41.0.51 user=nagios3 password=nagios3 dbname=nagios3" psql "host=10.41.0.52 user=nagios3 password=nagios3 dbname=nagios3"
#top psql - PostgreSQL interactive terminal¶
psql -U postgres postgres psql -U postgres template1 psql -h 10.41.0.50 -U postgres template1 psql -h 10.41.0.50 -p 5432 -U postgres template1
#top multiple instances¶
cp -av /etc/init.d/postgresql /etc/init.d/postgresql2
cp -av /etc/sysconfig/pgsql/postgresql /etc/sysconfig/pgsql/postgresql2 sed -e 's,^PGDATA.*$,PGDATA=/srv/pgsql2/data,g' -e 's,^PGPORT.*$,PGPORT=5433,g' -e "s,^PGOPTS.*$,PGOPTS='-c config_file=\"/etc/postgresql/postgresql2.conf\"',g" -e 's,^PGLOG.*$,PGLOG=/var/log/postgresql/pgstartup2.log,g' -i /etc/sysconfig/pgsql/postgresql2
cp -av /etc/postgresql/postgresql.conf /etc/postgresql/postgresql2.conf cp -av /etc/postgresql/pg_ident.conf /etc/postgresql/pg_ident2.conf cp -av /etc/postgresql/pg_hba.conf /etc/postgresql/pg_hba2.conf
sed -e 's,/etc/postgresql/pg_hba.conf,/etc/postgresql/pg_hba2.conf,g' -e 's,/etc/postgresql/pg_ident.conf,/etc/postgresql/pg_ident2.conf,g' -e "s,^log_filename.*$,log_filename = 'postgresql2-main%.log',g" -i /etc/postgresql/postgresql2.conf
mkdir -p /srv/pgsql2 chmod 700 /srv/pgsql2 chown postgres:postgres /srv/pgsql2
Run below command only on
CentOS 5.*
system (pgsql <= 8.1.11):
su -l postgres -c "/usr/bin/initdb -D /srv/pgsql2/data"
Run below command only on
CentOS 6.*
system (pgsql >= 8.4.4):/etc/init.d/postgresql2 initdb
/etc/init.d/postgresql2 start
tail -f /var/log/postgresql/pgstartup2.log tail -f /var/log/postgresql/postgresql2-main.log
psql -U postgres template1
connect(3, {sa_family=AF_FILE, path="/tmp/.s.PGSQL.5432"...}, 110) = -1 ENOENT (No such file or directory) connect(3, {sa_family=AF_FILE, path="/tmp/.s.PGSQL.5432"...}, 110) = 0
psql -p 5433 -U postgres template1
connect(3, {sa_family=AF_FILE, path="/tmp/.s.PGSQL.5433"...}, 110) = 0
Zmodyfikowany ostatnio: 2014/02/02 12:45:28 (11 lat temu),
textsize: 12,6 kB,
htmlsize: 26,6 kB
Zapraszam do komentowania, zgłaszania sugestii, propozycji, własnych przykładów, ...
Dodaj komentarzKomentarze użytkowników