PostgreSQL: различия между версиями
Нет описания правки |
|||
Строка 89: | Строка 89: | ||
su - postgres -s /bin/sh -c 'psql -f /tmp/posgresql postgres'</source> | su - postgres -s /bin/sh -c 'psql -f /tmp/posgresql postgres'</source> | ||
== Continuous Archiving and Point-in-Time Recovery == | == Continuous Archiving and Point-in-Time Recovery == | ||
Если в настройках сервера включено ведение журналов упреждающей записи (WAL), то появляется возможность резервного на уровне файловой системы с копированием журналов. В этом случае при сбое мы можем восстановить базу от контрольной точки до произвольного момента времени, после контрольной точки, с помощью файлов журналов. | |||
=== Настройка журналов WAL === | |||
Для того, чтобы PostgreSQL начал писать файлы журналов необходимо изменить конфигурационный файл сервера {{path|/var/lib/pgsql/data/postgresql.conf}} следующим образом: | |||
<pre>wal_level = archive # указывается уровень ведения журналов | |||
archive_mode = on # разрешается ведение журналов | |||
archive_command = '/var/lib/pgsql/bin/copy_wal.sh "%f" "%p"'</pre> | |||
archive_command - это команда выполняемая сервером над журналом который надо архивировать. %p заменяется полным путем к файлу, %f заменяется именем файла. Простейшая команда это {{cmd|'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'}} она проверяет не был ли файл уже архивирован, и если не был то копирует его в каталог /mnt/server/archivedir/<br> | |||
Создадим каталог для архивных журналов и установим нужные права: | |||
<pre># mkdir /var/lib/pgsql/wals | |||
# chown postgres:postgres /var/lib/pgsql/wals | |||
# chmod 700 /var/lib/pgsql/wals</pre> | |||
Также создадим каталог для нашего скрипта архивирования журналов: | |||
<pre># mkdir /var/lib/pgsql/bin | |||
# chown postgres:postgres /var/lib/pgsql/bin | |||
# chmod 700 /var/lib/pgsql/bin</pre> | |||
Рассмотрим файл {{path|/var/lib/pgsql/bin/copy_wal.sh}}:<br> | |||
<source lang="bash">#!/bin/bash | |||
DPATH=/var/lib/pgsql/wals | |||
DATE=`date +"%b %d %T"` | |||
if [ -e /var/lib/pgsql/backup_in_progress ]; then # По наличию файла проверяет не идет ли процесс резервного копирования журналов | |||
echo "${DATE} - идет процесс резервного копирования журналов" >> "${DPATH}/wal-c-log.log" | |||
exit 1 | |||
fi | |||
if [ -e ${DPATH}/$1 ]; then # Проверяет скопирован ли журнал раннее | |||
echo "${DATE} - файл уже архивирован" >> "${PATH}/wal-c-log.log" | |||
exit 1 | |||
fi | |||
echo "${DATE} - /bin/gzip $2 ${DEST}/$1" >> "${DPATH}/wal-c-log.log" | |||
gzip < $2 > "${DPATH}/$1" # Архивирует файл журнала</source> | |||
Скрипт проверяет состояния резервного копирования журналов и архивирует журналы в каталог {{path|/var/lib/pgsql/wals}}, все свои действия он пишет в {{path|/var/lib/pgsql/wals/wal-c-log.log}}<br> | |||
Установим нужные права на скрипт: | |||
<pre># chown postgres:postgres /var/lib/pgsql/bin/copy_wal.sh | |||
# chmod 700 /var/lib/pgsql/bin/copy_wal.sh</pre> | |||
Теперь перезапустим сервер базы данных: | |||
<pre># systemctl restart postgresql</pre> | |||
Со временем в каталоге {{path|/var/lib/pgsql/wals}} будут появляться файлы вида: | |||
<pre>-rw------- 1 postgres postgres 3848185 июл 12 18:40 000000010000001900000048 | |||
-rw------- 1 postgres postgres 3830181 июл 12 18:33 000000010000001900000047 | |||
-rw------- 1 postgres postgres 4131659 июл 12 18:26 000000010000001900000046 | |||
-rw------- 1 postgres postgres 3977349 июл 12 18:26 000000010000001900000045</pre> | |||
Если они появляются значит журналирование настроены правильно. | |||
[[Категория:СУБД]] | [[Категория:СУБД]] | ||
[[Категория:Миграция]] | [[Категория:Миграция]] | ||
{{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}} |
Версия от 18:48, 12 июля 2017
Особенности работы с PostgreSQL в Альт.
Установка и начальный запуск
Вы можете выбрать сервер PostgreSQL определённой версии как обычный, так и предназначенный для работы 1С:Предприятие (содержит в имени 1C):
postgresql9.1-server postgresql9.3-1C-server postgresql9.3-server postgresql9.4-1C-server postgresql9.4-server
apt-get update apt-get install postgresql9.4-server
/etc/init.d/postgresql initdb(через systemctl postgresql initdb не работает)
Запуск службы:
service postgresql start
Включение службы по умолчанию:
chkconfig postgresql on
Место расположения параметров настройки
PostgreSQL запускается в изолированном окружении (chroot, чрут): /var/lib/pgsql
Доступ по сети
По умолчанию доступ по сети выключен. Для того, чтобы включить, выполните:
echo "listen_addresses = 'localhost'" >> /var/lib/pgsql/data/postgresql.conf
Управление доступом
Для управления доступом, правьте файл /var/lib/pgsql/data/pg_hba.conf:
echo "host ПОЛЬЗОВАТЕЛЬ БАЗА 127.0.0.1/32 md5" >> /var/lib/pgsql/data/pg_hba.conf
не забудьте после всего этого перезапустить службу:
service postgresql restart
Работа под администратором
Для заведения пользователей и создания баз данных, переключитесь в учётную запись postgres:
su - postgres -s /bin/sh -c psql
# su - postgres -s /bin/sh -c psql psql (9.4.5) Введите "help", чтобы получить справку. postgres=#
Создание пользователя
su - postgres -s /bin/sh -c 'createuser --no-superuser --no-createdb --no-createrole --encrypted --pwprompt ПОЛЬЗОВАТЕЛЬ'
Создание базы данных
su - postgres -s /bin/sh -c 'createdb -O ПОЛЬЗОВАТЕЛЬ БАЗА'
Просмотр доступных баз данных
# su - postgres -s /bin/sh -c 'psql -c "\l+"' Список баз данных
Имя | Владелец | Кодировка | LC_COLLATE | LC_CTYPE | Права доступа | Размер | Табл. пространство | Описание
------------+------------+-----------+-------------+-------------+-----------------------+---------+--------------------+--------------------------------------------
postfactor | postfactor | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 | | 12 MB | pg_default |
postgres | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 | | 6724 kB | pg_default | default administrative connection database
sogo | sogo | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 | =Tc/sogo +| 7572 kB | pg_default |
| | | | | sogo=CTc/sogo | | |
template0 | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres +| 6601 kB | pg_default | unmodifiable empty database
| | | | | postgres=CTc/postgres | | |
template1 | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres +| 6724 kB | pg_default | default template for new databases
| | | | | postgres=CTc/postgres | | |
(5 строк)
Имена баз в первом столбце.
Резервная копия всех баз данных
su - postgres -s /bin/sh -c 'pg_dumpall -f /tmp/posgresql'
Резервная копия будет в файле /tmp/posgresql.
Восстановление из резервной копии
Документация: https://www.postgresql.org/docs/9.0/static/migration.html
mv /var/lib/pgsql/data{,.old}
/etc/init.d/postgresql initdb
service postgresql start
su - postgres -s /bin/sh -c 'psql -f /tmp/posgresql postgres'
Continuous Archiving and Point-in-Time Recovery
Если в настройках сервера включено ведение журналов упреждающей записи (WAL), то появляется возможность резервного на уровне файловой системы с копированием журналов. В этом случае при сбое мы можем восстановить базу от контрольной точки до произвольного момента времени, после контрольной точки, с помощью файлов журналов.
Настройка журналов WAL
Для того, чтобы PostgreSQL начал писать файлы журналов необходимо изменить конфигурационный файл сервера /var/lib/pgsql/data/postgresql.conf следующим образом:
wal_level = archive # указывается уровень ведения журналов archive_mode = on # разрешается ведение журналов archive_command = '/var/lib/pgsql/bin/copy_wal.sh "%f" "%p"'
archive_command - это команда выполняемая сервером над журналом который надо архивировать. %p заменяется полным путем к файлу, %f заменяется именем файла. Простейшая команда это 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f' она проверяет не был ли файл уже архивирован, и если не был то копирует его в каталог /mnt/server/archivedir/
Создадим каталог для архивных журналов и установим нужные права:
# mkdir /var/lib/pgsql/wals # chown postgres:postgres /var/lib/pgsql/wals # chmod 700 /var/lib/pgsql/wals
Также создадим каталог для нашего скрипта архивирования журналов:
# mkdir /var/lib/pgsql/bin # chown postgres:postgres /var/lib/pgsql/bin # chmod 700 /var/lib/pgsql/bin
Рассмотрим файл /var/lib/pgsql/bin/copy_wal.sh:
#!/bin/bash
DPATH=/var/lib/pgsql/wals
DATE=`date +"%b %d %T"`
if [ -e /var/lib/pgsql/backup_in_progress ]; then # По наличию файла проверяет не идет ли процесс резервного копирования журналов
echo "${DATE} - идет процесс резервного копирования журналов" >> "${DPATH}/wal-c-log.log"
exit 1
fi
if [ -e ${DPATH}/$1 ]; then # Проверяет скопирован ли журнал раннее
echo "${DATE} - файл уже архивирован" >> "${PATH}/wal-c-log.log"
exit 1
fi
echo "${DATE} - /bin/gzip $2 ${DEST}/$1" >> "${DPATH}/wal-c-log.log"
gzip < $2 > "${DPATH}/$1" # Архивирует файл журнала
Скрипт проверяет состояния резервного копирования журналов и архивирует журналы в каталог /var/lib/pgsql/wals, все свои действия он пишет в /var/lib/pgsql/wals/wal-c-log.log
Установим нужные права на скрипт:
# chown postgres:postgres /var/lib/pgsql/bin/copy_wal.sh # chmod 700 /var/lib/pgsql/bin/copy_wal.sh
Теперь перезапустим сервер базы данных:
# systemctl restart postgresql
Со временем в каталоге /var/lib/pgsql/wals будут появляться файлы вида:
-rw------- 1 postgres postgres 3848185 июл 12 18:40 000000010000001900000048 -rw------- 1 postgres postgres 3830181 июл 12 18:33 000000010000001900000047 -rw------- 1 postgres postgres 4131659 июл 12 18:26 000000010000001900000046 -rw------- 1 postgres postgres 3977349 июл 12 18:26 000000010000001900000045
Если они появляются значит журналирование настроены правильно.