пятница, 22 февраля 2019 г.

Создание кластера --data-checksums

Только pg_dump + включенные контрольные суммы данных могут сделать вас «уверенным» в отсутствии коррупция в резервном копировании.
Page Checksum Protection in PostgreSQL
pg_healer: repairing Postgres problems automatically
Виртуальная машина ubuntu 16.04.5 PostgreSQL версия 10.5-24.1C 1С 8.3.13.1690
Давайте обсудим проверку контрольных сум для файлов.
Пример восстановления таблиц PostgreSQL с помощью новой мега фичи pg_filedump
Postgres checksum performance impact

Публикую свои скрипты архивации PostgreSQL баз 1С
Еще один шаг к более легким резервным копиям
Настройка бекапа PostgreSQL в Ubuntu Server при помощи pgBackRest с копированием на Windows Share

$ 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_createcluster --locale ru_RU.UTF-8 10 main --  --data-checksums
Creating new PostgreSQL cluster 10/main ...
/usr/lib/postgresql/10/bin/initdb -D /var/lib/postgresql/10/main --auth-local peer --auth-host md5 --locale ru_RU.UTF-8 --data-checksums
Файлы, относящиеся к этой СУБД, будут принадлежать пользователю "postgres".
От его имени также будет запускаться процесс сервера.

Кластер баз данных будет инициализирован с локалью "ru_RU.UTF-8".
Кодировка БД по умолчанию, выбранная в соответствии с настройками: "UTF8".
Выбрана конфигурация текстового поиска по умолчанию "russian".

Контроль целостности страниц данных включён.

исправление прав для существующего каталога /var/lib/postgresql/10/main... ок
создание подкаталогов... ок
выбирается значение max_connections... 100
выбирается значение shared_buffers... 128MB
выбор реализации динамической разделяемой памяти... posix
создание конфигурационных файлов... ок
выполняется подготовительный скрипт... ок
выполняется заключительная инициализация... ок
сохранение данных на диске... ок

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

    /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 systemctl restart postgresql

postgres=# show data_checksums;
 data_checksums
----------------
 on
(1 строка)

$ 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
 

Из 32 Gb выделяем 16 PostgreSQL

sudo nano /etc/postgresql/10/main/postgresql.conf
Добавить в конец:


# DB Version: 10
# OS Type: linux
# DB Type: oltp
# Total Memory (RAM): 16 GB
# Data Storage: ssd

max_connections = 1000
shared_buffers = 4GB
temp_buffers = 256MB
work_mem = 64MB
effective_cache_size = 12GB
maintenance_work_mem = 1GB
wal_buffers = 16MB
min_wal_size = 2GB
max_wal_size = 4GB

default_statistics_target = 100
effective_io_concurrency = 2
random_page_cost = 1.1
autovacuum = on
autovacuum_max_workers = 4
autovacuum_naptime = 20s
bgwriter_delay = 20ms
bgwriter_lru_multiplier = 4.0
bgwriter_lru_maxpages = 400
synchronous_commit = off
checkpoint_completion_target = 0.9
#min_wal_size = 2GB
#max_wal_size = 4GB
ssl = off
fsync = on
commit_delay = 1000
commit_siblings = 5
row_security = off
max_files_per_process = 1000
standard_conforming_strings = off
escape_string_warning = off
max_locks_per_transaction = 256
log_min_duration_statement = 0
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,client=%h '
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
log_autovacuum_min_duration = 0
lc_messages='C'
log_duration = on
log_statement = all
log_destination = stderr
plantuner.fix_empty_table = 'on'
online_analyze.table_type = 'temporary'
online_analyze.verbose = 'off'

Сохранить.


$ sudo systemctl restart postgresql.service
$ ss -tunpl | grep 5432
tcp    LISTEN     0      128       *:5432                  *:*
tcp    LISTEN     0      128      :::5432                 :::*

$ sudo systemctl restart srv1cv83.service
$ ss -tlnp | grep :15
LISTEN     0      128          *:1560                     *:*
LISTEN     0      128          *:1540                     *:*
LISTEN     0      128          *:1541                     *:*
LISTEN     0      128         :::1560                    :::*
LISTEN     0      128         :::1540                    :::*
LISTEN     0      128         :::1541                    :::*


Загрузить базу 1С.

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

$ mkdir -p /home/user/backup/yandex


$ sudo nano backup_ftp.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
$?
# $DIR_BACKUP/base-$DATA.tar.gzecho $?

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

#делаем vacuumdb
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
# Записываем информацию в лог с секундами
echo "$DATA Начало vacuum full"
echo "$DATA Начало vacuum full" >> /home/user/backup/backup.log
#sudo /bin/su postgres -c "/usr/bin/vacuumdb -zfa" >> /home/user/backup/backup.log

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


# посылаем сообщение
sleep 2
#echo "backup" | mutt -s "backup"  f2@vt.com -a $BACKUP_DIR/backup.log

Сохранить. 
 

Комментариев нет:

Отправить комментарий