Запуск Ubuntu server 16.04.5 PostgreSQL, версия 10.3-3.1C без systemctl start postgresql.service
Документация pg_probackup
Стенд pg 9.6.15 pg_probackup
Начиная с pg_probackup 2.2.3
$ sudo -u postgres pg_probackup-9.6 version
pg_probackup-9.6 2.2.3 (PostgreSQL 9.6.15)
$ sudo su postgres -c "psql -c \"select pg_size_pretty( pg_database_size('demo'))\""
pg_size_pretty
----------------
3461 MB
(1 строка)
$ time sudo su postgres -c "pg_dump -Fc demo" > ~/demo.dump
Создадим несколько баз:
$ sudo su postgres -c "createdb --username postgres -T template0 demo1"
$ sudo su postgres -c "createdb --username postgres -T template0 demo2"
$ sudo su postgres -c "createdb --username postgres -T template0 demo3"
$ sudo su postgres -c "createdb --username postgres -T template0 demo4"
$ sudo su postgres -c "createdb --username postgres -T template0 demo5"
Восстановим указав резервную копию
$ time sudo su postgres -c "pg_restore -d demo1 -j 4 /home/user/demo.dump"
$ time sudo su postgres -c "pg_restore -d demo2 -j 4 /home/user/demo.dump"
$ time sudo su postgres -c "pg_restore -d demo3 -j 4 /home/user/demo.dump"
$ time sudo su postgres -c "pg_restore -d demo4 -j 4 /home/user/demo.dump"
$ time sudo su postgres -c "pg_restore -d demo5 -j 4 /home/user/demo.dump"
$ sudo su postgres -c "psql -c \"SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size FROM pg_database;\""
datname | size
-----------+---------
postgres | 7079 kB
demo | 3461 MB
template1 | 7079 kB
template0 | 6969 kB
demo1 | 3425 MB
demo2 | 3425 MB
demo3 | 3425 MB
demo4 | 3426 MB
demo5 | 3426 MB
(9 строк)
$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4
$ sudo -u postgres pg_probackup-9.6 show -B /backup
ID PZGX6Z
Создание дополнительного кластера
$ pg_lsclusters
#$ sudo pg_dropcluster --stop 9.6 beta
$ sudo pg_createcluster --locale ru_RU.UTF-8 9.6 beta -- --data-checksums
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
Удалим данные кластера beta
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/9.6/beta/*"
Для восстановления базы demo5 добавляем восстановление базы postgres (для простоты подключения)
$ time sudo -u postgres pg_probackup-9.6 restore -B /backup --instance main -D /var/lib/postgresql/9.6/beta -i PZGX6Z -j4 --db-include=demo5 --db-include=postgres
или если восстанавливаем кластер целиком:
$ time sudo -u postgres pg_probackup-9.6 restore -B /backup --instance main -D /var/lib/postgresql/9.6/beta -i PZGX6Z -j4
$ sudo du -h -s /var/lib/postgresql/9.6/main/base
21G /var/lib/postgresql/9.6/main/base
$ sudo du -h -s /var/lib/postgresql/9.6/beta/base
3,4G /var/lib/postgresql/9.6/beta/base
Нужно стартануть кластер, хоть он и не запустится
$ sudo pg_ctlcluster 9.6 beta start
#$ sudo sudo systemctl status postgresql@9.6-beta.service
Для восстановления запустить так:
$ sudo su postgres -c "/usr/lib/postgresql/9.6/bin/pg_ctl start -w -D /var/lib/postgresql/9.6/beta -o '-c config_file=/etc/postgresql/9.6/beta/postgresql.conf'"
Если восстанавливаем кластер целиком ниже красным не делаем.
В другом окне (ssh):
$ sudo su postgres -c 'psql -p 5433 -c "\l+"'
$ sudo su postgres -c 'psql -p 5433 -l'
$ sudo su postgres -c 'psql -p 5433 -c "DROP DATABASE demo;"'
$ sudo su postgres -c 'psql -p 5433 -c "DROP DATABASE demo1;"'
$ sudo su postgres -c 'psql -p 5433 -c "DROP DATABASE demo2;"'
$ sudo su postgres -c 'psql -p 5433 -c "DROP DATABASE demo3;"'
$ sudo su postgres -c 'psql -p 5433 -c "DROP DATABASE demo4;"'
Остановить:
$ sudo su postgres -c "/usr/lib/postgresql/9.6/bin/pg_ctl stop -w -D /var/lib/postgresql/9.6/beta -o '-c config_file=/etc/postgresql/9.6/beta/postgresql.conf'"
После этого будет работать штатный режим:
$ sudo pg_ctlcluster 9.6 beta start
$ sudo sudo systemctl status postgresql@9.6-beta.service
$ time sudo su postgres -c "pg_dump -p 5433 -Fc demo5" > ~/demo5_5433.dump
Мержевание:
$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4
$ time sudo su postgres -c "pg_dump -Fc demo" > ~/demo.dump
$ sudo su postgres -c "createdb --username postgres -T template0 demo6"
$ time sudo su postgres -c "pg_restore -d demo6 -j 4 /home/user/demo.dump"
$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b DELTA --stream --compress --delete-wal --expired -j4
$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b DELTA --stream --compress --delete-wal --expired -j4
$ sudo -u postgres pg_probackup-9.6 show -B /backup
ID PZH4E6
$ time sudo -u postgres pg_probackup-9.6 merge -B /backup --instance main -i PZH4E6 -j 4
$ sudo -u postgres pg_probackup-9.6 show -B /backup
Создание дополнительного кластера
$ pg_lsclusters
$ sudo pg_dropcluster --stop 9.6 beta
$ sudo pg_createcluster --locale ru_RU.UTF-8 9.6 beta -- --data-checksums
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
Удалим данные кластера beta
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/9.6/beta/*"
Для восстановления базы demo5 добавляем восстановление базы postgres (для простоты подключения)
$ time sudo -u postgres pg_probackup-9.6 restore -B /backup --instance main -D /var/lib/postgresql/9.6/beta -i PZH4E6 -j4
Нужно стартануть кластер, хоть он и не запустится
$ sudo pg_ctlcluster 9.6 beta start
#$ sudo sudo systemctl status postgresql@9.6-beta.service
Для восстановления запустить так:
$ sudo su postgres -c "/usr/lib/postgresql/9.6/bin/pg_ctl start -w -D /var/lib/postgresql/9.6/beta -o '-c config_file=/etc/postgresql/9.6/beta/postgresql.conf'"
Остановить:
$ sudo su postgres -c "/usr/lib/postgresql/9.6/bin/pg_ctl stop -w -D /var/lib/postgresql/9.6/beta -o '-c config_file=/etc/postgresql/9.6/beta/postgresql.conf'"
После этого будет работать штатный режим:
$ sudo pg_ctlcluster 9.6 beta start
$ sudo sudo systemctl status postgresql@9.6-beta.service
$ time sudo su postgres -c "pg_dump -p 5433 -Fc demo6" > ~/demo6_5433.dump
$ sudo nano /etc/postgresql/9.6/main/pg_hba.conf
Раскомментировать:
#host replication postgres 127.0.0.1/32 md5
host replication postgres 127.0.0.1/32 md5
Сохранить.
$ sudo pg_ctlcluster 9.6 main restart
$ sudo nano /root/backup.sh
#!/bin/sh -e
# Внимание задать пароль PGPASSWORD !!!
#/backup
inst='/backup'
cd $inst
# /backup/pg_probackup
log=$inst'/log/pg_probackup.log'
log1=$inst'/log/probackup.log'
if [ -f $log ]; then rm $log; fi
cd $inst
sudo su postgres -c "PGPASSWORD=12345 pg_probackup-9.6 backup -B $inst --instance main \
-U postgres -d postgres -h 127.0.0.1 -b FULL --stream --compress --expired --delete-wal \
--log-level-file=info -j 4"
grep completed $log > /dev/null 2>&1
if [ $? -ne 0 ]
then
msg="$inst неудачное завершение."
else
msg="$inst удачное завершение."
fi
DATA=`date +"%Y-%m-%d %H:%M:%S"`
msg1="Размер экземпляра pg_probackup: $(du -h -s $inst/backups)"
sudo su postgres -c "echo '$DATA $msg' >> $log"
sudo su postgres -c "echo '$DATA $msg1' >> $log"
sudo su postgres -c "echo '==================================================================' >> $log"
sudo su postgres -c "cat $log >> $log1"
#cat $log | mutt -s "pg_probackup" root
#echo "$DATA $msg" >> $log1
# Сразу архивируем для rsync
#COPY_DIR=$inst/copy
COPY_DIR=/backup/copy
#COPY_LOG=$inst/copy/copy.log
COPY_LOG=/backup/copy/copy.log
#Берем последнюю копию
COPY_ID=$(ls $inst/backups/main -1 | tail -1)
#Она должна быть completed
grep "$COPY_ID completed" $log > /dev/null 2>&1
if [ $? = 0 ]
then
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
#rm $inst/copy/*
sudo su postgres -c "tar -cvzf $COPY_DIR/pg_pro-$DATA.tar.gz \
$inst/backups/main/$COPY_ID > /dev/null 2>&1"
if [ $? = 0 ]
then
msg="создан $COPY_DIR/pg_pro-$DATA.tar.gz"
else
msg="ошибка создания $COPY_DIR/pg_pro-$DATA.tar.gz"
fi
DATA=`date +"%Y-%m-%d %H:%M:%S"`
sudo su postgres -c "echo '$DATA $msg' >> $COPY_LOG"
#echo "$DATA $msg" | mutt -s "copy pg_probackup" root
fi
$ sudo sh /root/backup.sh
$ sudo crontab -e
# m h dom mon dow command
45 11 * * * sh /root/backup.sh
Сохранить.
Проверка непрерывного архивирования
$ sudo -u postgres psql -c " select * from pg_stat_archiver;"
Документация pg_probackup
Стенд pg 9.6.15 pg_probackup
Начиная с pg_probackup 2.2.3
$ sudo -u postgres pg_probackup-9.6 version
pg_probackup-9.6 2.2.3 (PostgreSQL 9.6.15)
$ sudo su postgres -c "psql -c \"select pg_size_pretty( pg_database_size('demo'))\""
pg_size_pretty
----------------
3461 MB
(1 строка)
$ time sudo su postgres -c "pg_dump -Fc demo" > ~/demo.dump
Создадим несколько баз:
$ sudo su postgres -c "createdb --username postgres -T template0 demo1"
$ sudo su postgres -c "createdb --username postgres -T template0 demo2"
$ sudo su postgres -c "createdb --username postgres -T template0 demo3"
$ sudo su postgres -c "createdb --username postgres -T template0 demo4"
$ sudo su postgres -c "createdb --username postgres -T template0 demo5"
Восстановим указав резервную копию
$ time sudo su postgres -c "pg_restore -d demo1 -j 4 /home/user/demo.dump"
$ time sudo su postgres -c "pg_restore -d demo2 -j 4 /home/user/demo.dump"
$ time sudo su postgres -c "pg_restore -d demo3 -j 4 /home/user/demo.dump"
$ time sudo su postgres -c "pg_restore -d demo4 -j 4 /home/user/demo.dump"
$ time sudo su postgres -c "pg_restore -d demo5 -j 4 /home/user/demo.dump"
$ sudo su postgres -c "psql -c \"SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size FROM pg_database;\""
datname | size
-----------+---------
postgres | 7079 kB
demo | 3461 MB
template1 | 7079 kB
template0 | 6969 kB
demo1 | 3425 MB
demo2 | 3425 MB
demo3 | 3425 MB
demo4 | 3426 MB
demo5 | 3426 MB
(9 строк)
$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4
$ sudo -u postgres pg_probackup-9.6 show -B /backup
ID PZGX6Z
$ pg_lsclusters
#$ sudo pg_dropcluster --stop 9.6 beta
$ sudo pg_createcluster --locale ru_RU.UTF-8 9.6 beta -- --data-checksums
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
Удалим данные кластера beta
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/9.6/beta/*"
Для восстановления базы demo5 добавляем восстановление базы postgres (для простоты подключения)
$ time sudo -u postgres pg_probackup-9.6 restore -B /backup --instance main -D /var/lib/postgresql/9.6/beta -i PZGX6Z -j4 --db-include=demo5 --db-include=postgres
или если восстанавливаем кластер целиком:
$ time sudo -u postgres pg_probackup-9.6 restore -B /backup --instance main -D /var/lib/postgresql/9.6/beta -i PZGX6Z -j4
$ sudo du -h -s /var/lib/postgresql/9.6/main/base
21G /var/lib/postgresql/9.6/main/base
$ sudo du -h -s /var/lib/postgresql/9.6/beta/base
3,4G /var/lib/postgresql/9.6/beta/base
Нужно стартануть кластер, хоть он и не запустится
$ sudo pg_ctlcluster 9.6 beta start
#$ sudo sudo systemctl status postgresql@9.6-beta.service
Для восстановления запустить так:
$ sudo su postgres -c "/usr/lib/postgresql/9.6/bin/pg_ctl start -w -D /var/lib/postgresql/9.6/beta -o '-c config_file=/etc/postgresql/9.6/beta/postgresql.conf'"
Если восстанавливаем кластер целиком ниже красным не делаем.
В другом окне (ssh):
$ sudo su postgres -c 'psql -p 5433 -c "\l+"'
$ sudo su postgres -c 'psql -p 5433 -l'
$ sudo su postgres -c 'psql -p 5433 -c "DROP DATABASE demo;"'
$ sudo su postgres -c 'psql -p 5433 -c "DROP DATABASE demo1;"'
$ sudo su postgres -c 'psql -p 5433 -c "DROP DATABASE demo2;"'
$ sudo su postgres -c 'psql -p 5433 -c "DROP DATABASE demo3;"'
$ sudo su postgres -c 'psql -p 5433 -c "DROP DATABASE demo4;"'
Остановить:
$ sudo su postgres -c "/usr/lib/postgresql/9.6/bin/pg_ctl stop -w -D /var/lib/postgresql/9.6/beta -o '-c config_file=/etc/postgresql/9.6/beta/postgresql.conf'"
После этого будет работать штатный режим:
$ sudo pg_ctlcluster 9.6 beta start
$ sudo sudo systemctl status postgresql@9.6-beta.service
$ time sudo su postgres -c "pg_dump -p 5433 -Fc demo5" > ~/demo5_5433.dump
Мержевание:
$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4
$ time sudo su postgres -c "pg_dump -Fc demo" > ~/demo.dump
$ sudo su postgres -c "createdb --username postgres -T template0 demo6"
$ time sudo su postgres -c "pg_restore -d demo6 -j 4 /home/user/demo.dump"
$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b DELTA --stream --compress --delete-wal --expired -j4
$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b DELTA --stream --compress --delete-wal --expired -j4
$ sudo -u postgres pg_probackup-9.6 show -B /backup
ID PZH4E6
$ time sudo -u postgres pg_probackup-9.6 merge -B /backup --instance main -i PZH4E6 -j 4
$ sudo -u postgres pg_probackup-9.6 show -B /backup
Создание дополнительного кластера
$ pg_lsclusters
$ sudo pg_dropcluster --stop 9.6 beta
$ sudo pg_createcluster --locale ru_RU.UTF-8 9.6 beta -- --data-checksums
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
Удалим данные кластера beta
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/9.6/beta/*"
Для восстановления базы demo5 добавляем восстановление базы postgres (для простоты подключения)
$ time sudo -u postgres pg_probackup-9.6 restore -B /backup --instance main -D /var/lib/postgresql/9.6/beta -i PZH4E6 -j4
Нужно стартануть кластер, хоть он и не запустится
$ sudo pg_ctlcluster 9.6 beta start
#$ sudo sudo systemctl status postgresql@9.6-beta.service
Для восстановления запустить так:
$ sudo su postgres -c "/usr/lib/postgresql/9.6/bin/pg_ctl start -w -D /var/lib/postgresql/9.6/beta -o '-c config_file=/etc/postgresql/9.6/beta/postgresql.conf'"
Остановить:
$ sudo su postgres -c "/usr/lib/postgresql/9.6/bin/pg_ctl stop -w -D /var/lib/postgresql/9.6/beta -o '-c config_file=/etc/postgresql/9.6/beta/postgresql.conf'"
После этого будет работать штатный режим:
$ sudo pg_ctlcluster 9.6 beta start
$ sudo sudo systemctl status postgresql@9.6-beta.service
$ time sudo su postgres -c "pg_dump -p 5433 -Fc demo6" > ~/demo6_5433.dump
$ sudo nano /etc/postgresql/9.6/main/pg_hba.conf
Раскомментировать:
#host replication postgres 127.0.0.1/32 md5
host replication postgres 127.0.0.1/32 md5
Сохранить.
$ sudo pg_ctlcluster 9.6 main restart
$ sudo nano /root/backup.sh
#!/bin/sh -e
# Внимание задать пароль PGPASSWORD !!!
#/backup
inst='/backup'
cd $inst
# /backup/pg_probackup
log=$inst'/log/pg_probackup.log'
log1=$inst'/log/probackup.log'
if [ -f $log ]; then rm $log; fi
cd $inst
sudo su postgres -c "PGPASSWORD=12345 pg_probackup-9.6 backup -B $inst --instance main \
-U postgres -d postgres -h 127.0.0.1 -b FULL --stream --compress --expired --delete-wal \
--log-level-file=info -j 4"
grep completed $log > /dev/null 2>&1
if [ $? -ne 0 ]
then
msg="$inst неудачное завершение."
else
msg="$inst удачное завершение."
fi
DATA=`date +"%Y-%m-%d %H:%M:%S"`
msg1="Размер экземпляра pg_probackup: $(du -h -s $inst/backups)"
sudo su postgres -c "echo '$DATA $msg' >> $log"
sudo su postgres -c "echo '$DATA $msg1' >> $log"
sudo su postgres -c "echo '==================================================================' >> $log"
sudo su postgres -c "cat $log >> $log1"
#cat $log | mutt -s "pg_probackup" root
#echo "$DATA $msg" >> $log1
# Сразу архивируем для rsync
#COPY_DIR=$inst/copy
COPY_DIR=/backup/copy
#COPY_LOG=$inst/copy/copy.log
COPY_LOG=/backup/copy/copy.log
#Берем последнюю копию
COPY_ID=$(ls $inst/backups/main -1 | tail -1)
#Она должна быть completed
grep "$COPY_ID completed" $log > /dev/null 2>&1
if [ $? = 0 ]
then
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
#rm $inst/copy/*
sudo su postgres -c "tar -cvzf $COPY_DIR/pg_pro-$DATA.tar.gz \
$inst/backups/main/$COPY_ID > /dev/null 2>&1"
if [ $? = 0 ]
then
msg="создан $COPY_DIR/pg_pro-$DATA.tar.gz"
else
msg="ошибка создания $COPY_DIR/pg_pro-$DATA.tar.gz"
fi
DATA=`date +"%Y-%m-%d %H:%M:%S"`
sudo su postgres -c "echo '$DATA $msg' >> $COPY_LOG"
#echo "$DATA $msg" | mutt -s "copy pg_probackup" root
fi
$ sudo sh /root/backup.sh
$ sudo crontab -e
# m h dom mon dow command
45 11 * * * sh /root/backup.sh
Сохранить.
Проверка непрерывного архивирования
$ sudo -u postgres psql -c " select * from pg_stat_archiver;"
Комментариев нет:
Отправить комментарий