Показаны сообщения с ярлыком запуск postgresql. Показать все сообщения
Показаны сообщения с ярлыком запуск postgresql. Показать все сообщения

воскресенье, 20 октября 2019 г.

Настройка systemd для запуска PostgreSQL 10 от 1С

Настройка systemd для запуска PostgreSQL от 1С

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory              Log file
10  main    5432 online postgres /var/lib/postgresql/10/main pg_log/postgresql-%a.log

#$ sudo pg_dropcluster --stop 10 main
$ sudo pg_ctlcluster 10 main stop
$ sudo su - postgres
$ /usr/lib/postgresql/10/bin/initdb --locale=ru_RU.utf8 /var/lib/postgresql/10/data
$ exit

$ sudo nano /etc/systemd/system/postgres.service

[Unit]
Description=PostgreSQL database server
After=network.target

[Service]
Type=forking
TimeoutSec=120
User=postgres
Group=postgres

Environment=PGROOT=/var/lib/postgresql/10

SyslogIdentifier=postgres
PIDFile=${PGROOT}/data/postmaster.pid
RuntimeDirectory=postgresql
RuntimeDirectoryMode=755

ExecStartPre= /usr/lib/postgresql/10/bin/pg_controldata ${PGROOT}/data
ExecStart= /usr/lib/postgresql/10/bin/pg_ctl -s -D ${PGROOT}/data start -w -t 120
ExecReload=/usr/lib/postgresql/10/bin/pg_ctl -s -D ${PGROOT}/data reload
ExecStop=  /usr/lib/postgresql/10/bin/pg_ctl -s -D ${PGROOT}/data stop -m fast

# Due to PostgreSQL's use of shared memory, OOM killer is often overzealous in
# killing Postgres, so adjust it downward
OOMScoreAdjust=-200

# Additional security-related features
PrivateTmp=true
ProtectHome=true
ProtectSystem=full
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

Сохранить.

$ sudo systemctl start postgres.service

После проверики

Удалить кластер main (займет порт 5432)  Удалит с Вашими данными!!!

$ sudo pg_dropcluster --stop 10 main   
$ sudo systemctl enable postgres.service

Команды:

$ sudo systemctl daemon-reload  # запускать после изменений файла
$ sudo systemctl start postgres.service
$ sudo systemctl stop postgres.service
$ sudo systemctl restart postgres.service
$ sudo systemctl status postgres.service

понедельник, 11 февраля 2019 г.

pg_basebackup


Backup Using pg_basebackup
Backup and Restore a PostgreSQL Cluster With Multiple Tablespaces Using pg_basebackup
Как не потерять данные в PostgreSQL
10 способов сделать резервную копию в PostgreSQL
#RuPostgres Live 9: Бэкапы — Андрей Бородин, Андрей Сальников, Григорий Смолкин


Использование:
  pg_basebackup [ПАРАМЕТР]...

Параметры, управляющие выводом:
  -D, --pgdata=КАТАЛОГ   сохранить базовую копию в указанный каталог
  -F, --format=p|t       формат вывода (p (по умолчанию) - простой, t - tar)
  -r, --max-rate=СКОРОСТЬ макс. скорость передачи данных в целевой каталог
                         (в КБ/с, либо добавьте суффикс "k" или "M")
  -R, --write-recovery-conf
                         записать recovery.conf для репликации
  -S, --slot=ИМЯ_СЛОТА   использовать заданный слот репликации
  -T, --tablespace-mapping=СТАРЫЙ_КАТАЛОГ=НОВЫЙ_КАТАЛОГ
                         перенести табличное пространство из старого каталога
                         в новый
  -x, --xlog             включить в копию требуемые файлы WAL (режим fetch)
  -X, --xlog-method=fetch|stream
                         включить в копию требуемые файлы WAL, используя
                         заданный метод
      --xlogdir=КАТАЛОГ_XLOG
                         расположение каталога с журналом транзакций
  -z, --gzip             сжать выходной tar
  -Z, --compress=0-9     установить уровень сжатия выходного архива

Общие параметры:
  -c, --checkpoint=fast|spread
                         режим быстрых или распределённых контрольных точек
  -l, --label=МЕТКА      установить метку резервной копии
  -P, --progress         показывать прогресс операции
  -v, --verbose          выводить подробные сообщения
  -V, --version          показать версию и выйти
  -?, --help             показать эту справку и выйти

Параметры подключения:
  -d, --dbname=СТРОКА    строка подключения
  -h, --host=ИМЯ         имя сервера баз данных или каталог сокетов
  -p, --port=ПОРТ        номер порта сервера БД
  -s, --status-interval=ИНТЕРВАЛ
                         интервал между передаваемыми серверу
                         пакетами состояния (в секундах)
  -U, --username=NAME    connect as specified database user
  -U, --username=ИМЯ     имя пользователя баз данных
  -w, --no-password      не запрашивать пароль
  -W, --password         запрашивать пароль всегда (обычно не требуется)

Базовая резервная копия PostgreSQL 10

Настройка:
sudo nano /etc/postgresql/9.6/main/pg_hba.conf
Раскомментировать:
local   replication     postgres                                peer
host    replication     postgres        127.0.0.1/32            md5


$ sudo nano  /etc/postgresql/9.6/main/postgresql.conf
Добавить:


max_replication_slots = 10
max_wal_senders = 10
wal_level = replica 

Сохранить.

$ sudo 

$ sudo su - postgres
$ psql
=# 
SELECT name, setting
FROM pg_settings
WHERE name IN ('wal_level','max_wal_senders','max_replication_slots');


postgres=# SELECT name, setting
postgres-# FROM pg_settings
postgres-# WHERE name IN ('wal_level','max_wal_senders','max_replication_slots');
         name          | setting
-----------------------+---------
 max_replication_slots | 10
 max_wal_senders       | 10
 wal_level             | replica
(3 строки)



$ sudo systemctl restart postgresql

разовый backup:
$ sudo mkdir /backup
$ sudo chown -R postgres:postgres /backup
$ sudo -u postgres /usr/bin/pg_basebackup -D /backup -Ft -z -Xf -P
ниже тоже самое несколько другая запись
#$ sudo -u postgres /usr/bin/pg_basebackup -x --format=tar -z -D /backup -P
 2667320/2667320 КБ (100%), табличное пространство 1/1


На другом компьютере restore:
$ sudo systemctl stop postgresql 
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/9.6/main/*"
$ sudo -u postgres tar -xvC /var/lib/postgresql/9.6/main -f /home/user/base.tar.gz
$ sudo systemctl start postgresql



Для скрипта:

$ sudo /bin/su postgres -c "rm -rf /backup/*" && sudo /bin/su postgres -c "/usr/bin/pg_basebackup -x --format=tar -z -D /backup -P" && sudo mv /backup/base.tar.gz /home/user/backup/base-$(date +%Y-%m-%d_%H-%M-%S).tar.gz

или

$ sudo /bin/su postgres -c "rm -rf /backup/*" && sudo /bin/su postgres -c "/usr/bin/pg_basebackup -D /backup -Ft -z -Xf -P" && sudo mv /backup/base.tar.gz /home/user/backup/base-$(date +%Y-%m-%d_%H-%M-%S).tar.gz


$ nano backup.sh

Вставить текст ниже:

#!/bin/sh
set -e
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
#echo "--------------------------------------------------------------------" >> /home/user/backup/backup.log
# Записываем информацию в лог с секундами
echo "$DATA Start backup"
echo "$DATA Start backup" >> /home/user/backup/backup.log

sudo /bin/su postgres -c "rm -rf /backup/*" && sudo /bin/su postgres -c "/usr/bin/pg_basebackup -D /backup -Ft -z -Xf -P" && sudo mv /backup/base.tar.gz /home/user/backup/base-$DATA.tar.gz && sudo /bin/su postgres -c "/usr/bin/vacuumdb -zfa" >> /home/user/backup/backup.log

#echo $?
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
if [ $? -ne 0 ]
then
     echo "$DATA Ошибка завершения для backup"
     echo "$DATA Ошибка завершения для backup" >> /home/user/backup/backup.log
else
     echo "$DATA Успешное завершение backup"
     echo "$DATA Успешное завершение backup" >> /home/user/backup/backup.log
fi
echo "--------------------------------------------------------------------" >> /home/user/backup/backup.log


Сохранить.

Однократный запуск:$ sudo sh backup.sh

Запуск по расписанию:

$ sudo -i
# crontab -e
Добавить в конец (сработает в 17:00):
# каждые день в 17.00

0 17 * * * sh /home/user/backup.sh
Сохранить.

Смотреть задания:
# crontab -l


На другом компьютере restore:
$ sudo systemctl stop postgresql 
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/9.6/main/*"
$ sudo -u postgres tar -xvC /var/lib/postgresql/9.6/main -f /home/user/base-2019-02-12_17-09-35.tar.gz
$ sudo systemctl start postgresql

Если понадобится на одном компьютере развернуть 2 экземпляр postgresql:

$ sudo pg_createcluster --locale ru_RU.UTF-8 9.6 beta
Creating new cluster 9.6/beta ...
  config /etc/postgresql/9.6/beta
  data   /var/lib/postgresql/9.6/beta
  locale ru_RU.UTF-8
  socket /var/run/postgresql
  port   5433
Warning: systemd does not know about the new cluster yet. Operations like "service postgresql start" will not handle it. To fix, run:
  sudo systemctl daemon-reload


$ sudo systemctl daemon-reload
Для запуска нужен restart:
$ sudo systemctl restart postgresql
$ pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
9.6 beta 5433 down postgres /var/lib/postgresql/9.6/beta pg_log/postgresql-%a.log
9.6 main 5432 online postgres /var/lib/postgresql/9.6/main pg_log/postgresql-%a.log

$  ss -tunpl | grep 5432
tcp    LISTEN     0      128       *:5432                  *:*
tcp    LISTEN     0      128      :::5432                 :::*

$  ss -tunpl | grep 5433
tcp    LISTEN     0      128       *:5433                  *:*
tcp    LISTEN     0      128      :::5433                 :::*

$ ps aux | grep postgres
postgres  4252  0.0  0.0 315616 27704 ?        S    18:18   0:00 /usr/lib/postgresql/9.6/bin/postgres -D /var/lib postgresql/9.6/beta -c config_file=/etc/postgresql/9.6/beta/postgresql.conf
postgres  4253  0.0  0.5 4597816 182016 ?      S    18:18   0:00 /usr/lib/postgresql/9.6/bin/postgres -D /var/lib postgresql/9.6/main -c config_file=/etc/postgresql/9.6/main/postgresql.conf
........


В созданный кластер сделаем restore:
$ sudo systemctl stop postgresql
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/9.6/beta/*"
$ sudo -u postgres tar -xvC /var/lib/postgresql/9.6/beta -f /home/user/base-2019-02-12_17-09-35.tar.gz
$ sudo systemctl start postgresql

Имя базы рекомендую указать с указанием кластера:






Удаление кластера.
После работы с дополнительным кластером можно его удалить:

$ sudo pg_dropcluster --stop 9.6 beta
$ sudo systemctl daemon-reload


Короткий вариант:

$ sudo mkdir /backup
$ sudo chown -R postgres:postgres /backup

sudo nano /etc/postgresql/9.6/main/pg_hba.conf
Раскомментировать:
local   replication     postgres                                peer
host    replication     postgres        127.0.0.1/32            md5

Сохранить

$ sudo nano  /etc/postgresql/9.6/main/postgresql.conf
Добавить:


max_replication_slots = 10
max_wal_senders = 10
wal_level = replica 

Сохранить.

$ sudo systemctl restart postgresql 

$ nano pg_basebackup.sh

#!/bin/sh
set -e
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
DATA_FTP=`date +"%Y-%m-%d_%H-%M-%S"` # без роатации
# Если на ftp мало места включить ротацию:
#DATA_FTP=`date +"%d"` # для ротации по номеру дня месяца
#DATA_FTP=`date +"%u"` # для ротации по номеру дня недели
DIR_TMP='/backup'
DIR_BACKUP='/home/user/backup'
DIR_YANDEX='/home/user/backup/yandex'
echo "--------------------------------------------------------------------" > /home/user/backup/backup.log
# Записываем информацию в лог с секундами
echo "$DATA Начало backup"
echo "$DATA Начало backup" >> /home/user/backup/backup.log

sudo /bin/su postgres -c "rm -rf $DIR_TMP/*" \
     && sudo /bin/su postgres -c "/usr/bin/pg_basebackup -D $DIR_TMP -Ft -z -Xf -P" \
     && sudo mv $DIR_TMP/base.tar.gz $DIR_BACKUP/base-$DATA.tar.gz

#echo $?

DATA=`date +"%Y-%m-%d_%H-%M-%S"`
if [ $? -ne 0 ]
then
     echo "$DATA Ошибка завершения для backup"
     echo "$DATA Ошибка завершения для backup" >> /home/user/backup/backup.log
     exit
else
     echo "$DATA Успешное завершение backup"
     echo "$DATA Успешное завершение backup" >> /home/user/backup/backup.log
fi
echo "--------------------------------------------------------------------" >> /home/user/backup/backup.log


$ time sudo sh pg_basebackup.sh
 



вторник, 20 ноября 2018 г.

Запуск Ubuntu server 16.04.5 PostgreSQL, версия 10.3-3.1C без systemctl start postgresql.service

Postgresql server doesn't start
Ситуация:
Перестал загружать PostgreSQL systemctl
# sudo systemctl start postgresql.service
Кластер по умолчанию /var/lib/postgresql/10/main
Запускаем сервер вручную

Тестовая виртуальная машина

1. Устанавливаем ubuntu 16.04.5 HWE server  без swap файла,
т.е. размечаем вручную весь диск ext4 root.

ubuntu имя компьютера u1604
ubuntu пользователь user пароль 12345
ubuntu пользователь postgres password pass
ubuntu пользователь usr1cv8 password pass

Настройки виртуальной машины - RAM (32GB)
Сеть - сетевой мост.
Проще всего пробросить в виртуальную машину лицензии 1С:Предприятия 8 посредством локального hasp.
Настройки ubuntu пользователь (привязка в скриптах) user пароль 12345, имя компьютера
u1604 сеть DHCP

После установки, Ctrl +Alt + T (окно терминала)
$ sudo apt update -y
$ sudo apt upgrade -y
$ sudo apt install mc ssh samba htop -y

Возможно sudo apt upgrade -y не пройдет из за блокировки, тогда sudo reboot и повторите с начала.

$ lsusb
Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Пробросить hasp средствами VirtualBox

$ lsusb
Bus 001 Device 004: ID 0529:0001 Aladdin Knowledge Systems HASP copy protection dongle
Bus 001 Device 003: ID 0529:0001 Aladdin Knowledge Systems HASP copy protection dongle
Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

$ sudo cat /proc/cpuinfo | grep MHz
$ sudo systemctl status ondemand
$ sudo systemctl stop ondemand
$ sudo systemctl disable ondemand
$ sudo poweroff

Образ u16045.ova

2. После перезагрузки по сети можно подключиться MobaXterm
к нашей виртуальной машине (по ip или или имени )  загрузить файлы установки:
$ mkdir /home/user/test

В папку ~/test положить файлы:

postgresql_10.3_2.1C_amd64_deb.tar.bz2
postgresql_10.3_2.1C_amd64_addon_deb.tar.bz2

Исправим bug
Several regex warnings when installing latest postgres update

sudo nano /usr/sbin/pam_getenv
строка 78 заменить
$val =~ s/(?<!\\)\${([^}]+)}/$ENV{$1}||""/eg;
на
$val =~ s/(?<!\\)\$\{([^}]+)\}/$ENV{$1}||""/eg;

#sudo apt-get install libicu55  -y
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" >> /etc/apt/sources.list.d/postgresql.list'
sudo apt update -y
sudo apt install libtcl8.6 -y
$ sudo apt-get install postgresql-common postgresql-client-common ssl-cert  pgdg-keyring  -y
mkdir -p /tmp/post
cp /home/user/test/postgresql_10.3_3.1C_amd64_deb.tar.bz2 /tmp/post/
cp /home/user/test/postgresql_10.3_3.1C_amd64_addon_deb.tar.bz2 /tmp/post/
cd /tmp/post
tar -xvf postgresql_10.3_3.1C_amd64_deb.tar.bz2
cd  postgresql-10.3-3.1C_amd64_deb
sudo dpkg -i *.deb


cd /tmp/post/
tar -xvf postgresql_10.3_3.1C_amd64_addon_deb.tar.bz2
cd postgresql-10.3-3.1C_amd64_addon_deb
sudo dpkg -i *.deb

dpkg -l | grep 10.3-3.1C | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
sudo -u postgres psql -U postgres -c "alter user postgres with password 'pass';"
sudo cp /etc/postgresql/10/main/postgresql.conf /etc/postgresql/10/main/postgresql.conf.bak
#sudo rm /etc/apt/sources.list.d/postgresql.list
#sudo apt update  -y
#Делаем проверки
#sudo systemctl status postgresql.service
#ss -tunpl | grep 5432
$ ss -tunpl | grep 5432
tcp    LISTEN     0      128       *:5432                  *:*
tcp    LISTEN     0      128      :::5432                 :::*

# $ ps aux | grep postgres | grep -- -D
postgres  4914  0.0  0.1 320972 28864 ?        S    08:37   0:00 /usr/lib/postgresql/10/bin/postgres -D /var/lib/postgresql/10/main -c config_file=/etc/postgresql/10/main/postgresql.conf

Итак:

Creating new PostgreSQL cluster 10/main ...
/usr/lib/postgresql/10/bin/initdb -D /var/lib/postgresql/10/main --auth-local peer --auth-host md5
Файлы, относящиеся к этой СУБД, будут принадлежать пользователю "postgres".
От его имени также будет запускаться процесс сервера.

Готово. Теперь вы можете запустить сервер баз данных:

    /usr/lib/postgresql/10/bin/pg_ctl -D /var/lib/postgresql/10/main -l файл_журнала start

Ver Cluster Port Status Owner    Data directory              Log file
10  main    5432 down   postgres /var/lib/postgresql/10/main pg_log/postgresql-%a.log

$ sudo su - postgres


$ /usr/lib/postgresql/10/bin/pg_ctl stop -D /var/lib/postgresql/10/main
ожидание завершения работы сервера.... готово
сервер остановлен



$  /usr/lib/postgresql/10/bin/pg_ctl start -D /var/lib/postgresql/10/main
ожидание запуска сервера....postgres не может открыть файл конфигурации сервера "/var/lib/postgresql/10/main/postgresql.conf": Нет такого файла или каталога
 прекращение ожидания
pg_ctl: не удалось запустить сервер
Изучите протокол выполнения.

Посмотрим почему (ниже будет правильный способ):

Создадим кластер:

$ sudo mkdir /usr/local/pgsql
$ sudo chown postgres /usr/local/pgsql
$ sudo su - postgres
$ /usr/lib/postgresql/10/bin/initdb -D /usr/local/pgsql/data


#------------------------------------------------------------------------------------------------
# Можно но нам не нужно
$ exit 
$ sudo -u postgres psql -U postgres -c "alter user postgres with password 'pass';"
$ ps aux | grep postgres | grep -- -D
postgres 16622  0.0  0.0 320612 27328 pts/0    S    19:52   0:00 
 #------------------------------------------------------------------------------------------------

Сравним каких файлов не хватает:

$ ls /etc/postgresql/10/main
conf.d  environment  pg_ctl.conf  pg_hba.conf  pg_ident.conf  postgresql.conf  postgresql.conf.bak  start.conf
 
$ ls /usr/local/pgsql/data
base          pg_hba.conf    pg_notify     pg_stat      pg_twophase  postgresql.auto.conf
global        pg_ident.conf  pg_replslot   pg_stat_tmp  PG_VERSION   postgresql.conf
pg_commit_ts  pg_logical     pg_serial     pg_subtrans  pg_wal
pg_dynshmem   pg_multixact   pg_snapshots  pg_tblspc    pg_xact


$ ls /var/lib/postgresql/10/main
base              pg_dynshmem   pg_notify     pg_stat      pg_twophase  postgresql.auto.conf
current_logfiles  pg_log        pg_replslot   pg_stat_tmp  PG_VERSION   postmaster.opts
global            pg_logical    pg_serial     pg_subtrans  pg_wal
pg_commit_ts      pg_multixact  pg_snapshots  pg_tblspc    pg_xact

Скопируем недостающие файлы:

$ cp /usr/local/pgsql/data/postgresql.conf /var/lib/postgresql/10/main/
$ cp /usr/local/pgsql/data/pg_hba.conf /var/lib/postgresql/10/main/
$ cp /usr/local/pgsql/data/pg_ident.conf /var/lib/postgresql/10/main/


$ /usr/lib/postgresql/10/bin/pg_ctl start -D /var/lib/postgresql/10/main
ожидание запуска сервера....< 2018-11-20 15:45:08.534 MSK >СООБЩЕНИЕ:  для приёма подключений по адресу IPv4 "0.0.0.0" открыт порт 5432
< 2018-11-20 15:45:08.534 MSK >СООБЩЕНИЕ:  для приёма подключений по адресу IPv6 "::" открыт порт 5432
< 2018-11-20 15:45:08.535 MSK >СООБЩЕНИЕ:  для приёма подключений открыт сокет Unix "/var/run/postgresql/.s.PGSQL.5432"
< 2018-11-20 15:45:08.545 MSK >СООБЩЕНИЕ:  передача вывода в протокол процессу сбора протоколов
< 2018-11-20 15:45:08.545 MSK >ПОДСКАЗКА:  В дальнейшем протоколы будут выводиться в каталог "pg_log".
 готово
сервер запущен

Теперь правильный способ запуска (создавать кластер не нужно):


$ sudo su postgres
$ ps aux | grep postgres | grep -- -D
postgres  1966  0.0  0.1 320972 28588 pts/0    S    07:54   0:00 /usr/lib/postgresql/10/bin/postgres -D /var/lib/postgresql/10/main -c config_file=/etc/postgresql/10/main/postgresql.conf
postgres  1983  0.0  0.0  15468   968 pts/0    S+   07:55   0:00 grep -- -D

$ /usr/lib/postgresql/10/bin/pg_ctl stop -D /var/lib/postgresql/10/main
ожидание завершения работы сервера.... готово
сервер остановлен

Собственно сам запуск:

$ /usr/lib/postgresql/10/bin/pg_ctl start  -w -D /var/lib/postgresql/10/main  -o '-c config_file=/etc/postgresql/10/main/postgresql.conf'
ожидание запуска сервера....2018-11-23 07:56:09.602 MSK [1988] СООБЩЕНИЕ:  для приёма подключений по адресу IPv4 "0.0.0.0" открыт порт 5432
2018-11-23 07:56:09.602 MSK [1988] СООБЩЕНИЕ:  для приёма подключений по адресу IPv6 "::" открыт порт 5432
2018-11-23 07:56:09.603 MSK [1988] СООБЩЕНИЕ:  для приёма подключений открыт сокет Unix "/var/run/postgresql/.s.PGSQL.5432"
2018-11-23 07:56:09.627 MSK [1988] СООБЩЕНИЕ:  передача вывода в протокол процессу сбора протоколов
2018-11-23 07:56:09.627 MSK [1988] ПОДСКАЗКА:  В дальнейшем протоколы будут выводиться в каталог "pg_log".
 готово
сервер запущен


Другой способ запуска:

$ sudo su postgres

$ /usr/lib/postgresql/10/bin/pg_ctl stop -D /var/lib/postgresql/10/main
ожидание завершения работы сервера.... готово
сервер остановлен



$ /usr/lib/postgresql/10/bin/postgres  -D /var/lib/postgresql/10/main   -c 'config_file=/etc/postgresql/10/main/postgresql.conf'