Instalacja postgresa 9.6.5 wersja step by step 1. Dla nowego systemu, na którym nie było wcześniej instalowanych postgresów nano /etc/apt/sources.list apt-get install gcc zlib1g-dev libreadline-dev libcurl4-openssl-dev libssl-dev libgmp-dev mc postgresql zatrzymujemy standardowego postgresa /etc/init.d/postgresql stop od tego momentu instalujemy postgresa z plików binarnych. Wszystkie poniższe komendy muszą zakończyć się sukcesem, w razie błędu nie przechodzić do następnej komendy! wget http://ftp.postgresql.org/pub/source/v9.6.5/postgresql-9.6.5.tar.gz tar zxvf postgresql-9.6.5.tar.gz nano postgresql-9.6.5/src/include/utils/selfuncs.h zmieniamy parametr #define DEFAULT_NUM_DISTINCT 200 na #define DEFAULT_NUM_DISTINCT 2 cd postgresql-9.6.5/./configure --with-openssl --prefix=/usr/local/pg965 install cd contrib tu kopiujemy przez WinSCP na serwer (w załączniku maila) do96.sql, pgmp.tar.gz, vendo.tar.gz (np. Kopiujemy do lokalizacji /root/pliki/) cp /root/pliki/vendo.tar.gz vendo.tar.gz tar zxvf vendo.tar.gz cd vendo/ install cp /root/pliki/pgmp.tar.gz pgmp.tar.gz tar -xzvf /root/pliki/pgmp.tar.gz cd pgmp/ PG_CONFIG=/usr/local/pg965/bin/pg_config install PG_CONFIG=/usr/local/pg965/bin/pg_config cd.. cd pg_trgm/ install cd.. cd hstore/ install
ścieżka do katalogu, w którym ma być stworzona baza danych mkdir /database/pg965 chown postgres:postgres /database/pg965 su -l postgres -s /bin/sh -c "/usr/local/pg965/bin/initdb --encoding=utf8 --locale=pl_pl.utf8 -D /database/pg965/data" W tym momencie postgresql jest zainstalowany, a baza danych utworzona. usuwam katalog 9.6 mc /var/lib/postgresql /usr/lib/postgresql tworzymy katalogi i pliki do uruchamiania postgresa mkdir /var/lib/postgresql/9.6 ln -s /database/pg965/data/ /var/lib/postgresql/9.6/main ln -s /usr/local/pg965/ /usr/lib/postgresql/9.6 2. Jeśli w lokalizacji /etc/postgresql/ znajduje się katalog 9.1 lub 9.2 lub 9.4 zmieniamy nazwę na 9.6 rm /etc/postgresql/9.6/main/postgresql.conf rm /etc/postgresql/9.6/main/pg_hba.conf rm /etc/postgresql/9.6/main/pg_ident.conf *WAŻNE* Jeśli jest to instalacja drugiego postgresa to zamiast main użyć innego katalogu np. mirror tworzymy katalogi ln -s /database/pg965/data/ /var/lib/postgresql/9.6/main ln -s /usr/local/pg965/ /usr/lib/postgresql/9.6.5 mkdir /etc/postgresql/9.6/main/ ln -s /database/pg965/data/postgresql.conf /etc/postgresql/9.6/main/postgresql.conf ln -s /database/pg965/data/pg_hba.conf /etc/postgresql/9.6/main/pg_hba.conf ln -s /database/pg965/data/pg_ident.conf /etc/postgresql/9.6/main/pg_ident.conf chown postgres:postgres /var/lib/postgresql/9.6 modyfikacja pliku pg_hba.conf nano /database/pg965/data/pg_hba.conf # TYPE DATABASE USER ADDRESS METHOD # IPv4 local connections: host all all 127.0.0.1/32 trust host all all 127.0.0.1/0 password # IPv6 local connections: host all all ::1/128 trust # Allow replication connections from localhost, by a user with the # replication privilege. #host replication postgres 127.0.0.1/32 md5
#host replication postgres ::1/128 md5 modyfikacja pliku postgresql.conf nano /database/pg/965/data/postgresql.conf # FILE LOCATIONS data_directory = '/var/lib/postgresql/9.6/main' hba_file = '/etc/postgresql/9.6/main/pg_hba.conf' ident_file = '/etc/postgresql/9.6/main/pg_ident.conf' # CONNECTIONS AND AUTHENTICATION listen_addresses = '*' port = 5432 max_connections = 300 # RESOURCE USAGE (except WAL) shared_buffers = 7GB # QUERY TUNING seq_page_cost = 100.0 default_statistics_target = 1000 # ERROR REPORTING AND LOGGING log_destination = 'stderr' logging_collector = on log_filename = 'postgresql-%y-%m-%d.log' # - What to Log - log_duration = on log_line_prefix = '[%d %h %p %m %x]' log_lock_waits = on log_statement = 'all' # VERSION/PLATFORM COMPATIBILITY default_with_oids = on escape_string_warning = off standard_conforming_strings = off transform_null_equals = on
zmieniamy skrypt startujący: nano /etc/systemd/system/multi-user.target.wants/postgresql.service #ExecStart=/bin/true #ExecReload=/bin/true ExecStart=/bin/su - postgres -m -c "/usr/local/pg965/bin/pg_ctl -s -D /database/pg965/data start" ExecStop=/bin/su - postgres -m -c "/usr/local/pg965/bin/pg_ctl -s -D /database/pg965/data stop" uruchamiamy postgresa systemctl daemon-reload systemctl enable postgresql.service systemctl start postgresql.service logujemy się do postgresa /usr/local/pg965/bin/psql -U postgres -h 127.0.0.1 łączymy się do bazy template1 i tworzymy extensions \c template1 CREATE SCHEMA vendo; CREATE EXTENSION vendo; CREATE EXTENSION pgmp; CREATE EXTENSION hstore; CREATE EXTENSION pg_trgm; Po utworzeniu lista powinna wyglądać następująco: template1=# select * from pg_extension; extname extowner extnamespace extrelocatable extversion extconfig extcondition ---------+----------+--------------+----------------+------------+-----------+-------------- plpgsql 10 11 f 1.0 vendo 10 2200 t 1.0 pgmp 10 2200 t 1.0 hstore 10 2200 t 1.4 pg_trgm 10 2200 t 1.3 (5 rows) tworzymy użytkowników bazy danych create role user with login createdb superuser; \password user
3. Kopia ze starego postgresa (przykład z 9.2.4) Przed wykonaniem kopi ze starego postgresa należy na bazie danych wykonać zapytanie ALTER EXTENSION vendo DROP SCHEMA vendo; A następnie wykonać poniższe kroki: cały klaster /usr/local/pg965/bin/pg_dumpall -U postgres -h 127.0.0.1 > /sciezka_do_pliku/nazwa.sql pojedyncza baza /usr/local/pg965/bin/pg_dump -U postgres -h 127.0.0.1 nazwa_bazy > /sciezka_do_pliku/nazwa.sql 4. Odtwarzamy bazy do nowego postgresa z kopii w nowym postgresie tworzymy nagłówki baz danych /usr/local/pg965/bin/psql -U postgres -h 127.0.0.1 create database nazwa_bazy; całego klastra /usr/local/pg965/bin/psql -U postgres -h 127.0.0.1 f /sciezka_do_pliku/nazwa.sql jednej bazy /usr/local/pg965/bin/psql -U postgres -h 127.0.0.1 d nazwa_bazy f /sciezka_do_pliku/nazwa.sql po odtworzeniu bazy danych należy się do niej zalogować pod konsolą i wykonać plik nazwabazy=# \i /home/pg96.sql ustawienie kopi nano /opt/kopia i wklejamy poniższe linijki: #!/bin/bash DATA=`date +%Y-%m-%d` DBNAME="nazwa_bazy" filename="/kopia/$dbname.$data.sql" /usr/local/pg965/bin/pg_dump -O -U postgres -h 127.0.0.1 $DBNAME bzip2-9c > $filename.bz2 /usr/local/pg965/bin/vacuumdb -z -v -U postgres -h 127.0.0.1 $DBNAME - DBNAME="nazwa_bazy" zmieniamy na naszą nazwę bazy - filename="/kopia/$dbname.$data.sql" - ustawiamy ścieżkę, gdzie mają być trzymane kopie ustawienie zadanie w cronie crontab -e 20 23 * * * /opt/kopia > /dev/null 2>&1
ustawienie firewall nano /opt/firewoll iptables -t nat -F iptables -F iptables -X iptables -t mangle -F /sbin/iptables -N block /sbin/iptables -A block -m state --state ESTABLISHED,RELATED -j ACCEPT #oblokowujemy ruch lokalny /sbin/iptables -A block -p tcp -s 192.168.0.100/24 -j ACCEPT /sbin/iptables -A block -p udp -s 192.168.0.100/24 -j ACCEPT /sbin/iptables -A block -p icmp -s 192.168.0.100/24 -j ACCEPT /sbin/iptables -A block -p tcp -s 127.0.0.1 -j ACCEPT /sbin/iptables -A block -p udp -s 127.0.0.1 -j ACCEPT /sbin/iptables -A block -p icmp -s 127.0.0.1 -j ACCEPT /sbin/iptables -A block -j DROP /sbin/iptables -A INPUT -j block /sbin/iptables -A FORWARD -j block #CFI /sbin/iptables -I block -p tcp --dport 22 -s 5.226.122.185/32 -j ACCEPT /sbin/iptables -I block -p tcp --dport 5432 -s 5.226.122.185/32 -j ACCEPT