В данной статье мы проведем установку СУБД PostgreSQL 11 в Linux CentOS 7, выполним базовую настройку сервера и СУБД, рассмотрим основные параметры конфигурационного файла, а так же способы тюнинга производительности. PostgreSQL – популярная свободная объектно-реляционная система управления базами данных. Не смотря на то, что она не так распространена как MySQL/MariDB, она является самой профессиональной.
Сильные стороны PostgreSQL:
Хотя PostgreSQL можно установить из базового репозитория CentOS , мы выполним установку репозитория от разработчиков, так как в нем всегда присутствует актуальная версия пакета.
Первым шагом устанавливаем репозиторий PosgreSQL (на данный момент он устанавливается следующим образом):
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
В данном репозитории есть как самые новые версии PostgreSQL, так и более старые версии. Информация о репозитории выглядит следующим образом:
Установим последнюю доступную версию версию (PostrgeSQL 11) c помощью yum .
yum install postgresql11-server -y
В процессе установки устаналивается сам сервере PostgreSQL и необходимые библотеки:
Installing : libicu-50.2-3.el7.x86_64 1/4_x000D_Installing : postgresql11-libs-11.5-1PGDG.rhel7.x86_64 2/4_x000D_Installing : postgresql11-11.5-1PGDG.rhel7.x86_64 3/4_x000D_Installing : postgresql11-server-11.5-1PGDG.rhel7.x86_64 4/4
После установки пакетов, нужно произвести инициализацию базы данных:
/usr/pgsql-11/bin/postgresql-11-setup initdb
Так же сразу добавим сервер БД в автозагрузку и запустим его:
systemctl enable postgresql-11
systemctl start postgresql-11
Чтобы убедиться, что сервер запустился и никаких проблем нет, проверим его статус:
[root@server ~]# systemctl status postgresql-11
● postgresql-11.service - PostgreSQL 11 database server_x000D_Loaded: loaded (/usr/lib/systemd/system/postgresql-11.service; enabled; vendor preset: disabled)_x000D_Active: active (running) since Wed 2019-09-18 13:01:56 +06; 26s ago_x000D_Docs: https://www.postgresql.org/docs/11/static/_x000D_ Process: 6614 ExecStartPre=/usr/pgsql-11/bin/postgresql-11-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)_x000D_Main PID: 6619 (postmaster)_x000D_CGroup: /system.slice/postgresql-11.service_x000D_├─6619 /usr/pgsql-11/bin/postmaster -D /var/lib/pgsql/11/data/_x000D_├─6621 postgres: logger_x000D_├─6623 postgres: checkpointer_x000D_├─6624 postgres: background writer_x000D_├─6625 postgres: walwriter_x000D_├─6626 postgres: autovacuum launcher_x000D_├─6627 postgres: stats collector_x000D_└─6628 postgres: logical replication launcher_x000D_Sep 18 13:01:56 server.1.com systemd[1]: Starting PostgreSQL 11 database server..._x000D_Sep 18 13:01:56 server.1.com postmaster[6619]: 2019-09-18 13:01:56.399 +06 [6619] LOG: listening on IPv6 address "::1", port 5432_x000D_Sep 18 13:01:56 server.1.com postmaster[6619]: 2019-09-18 13:01:56.399 +06 [6619] LOG: listening on IPv4 address "127.0.0.1", port 5432_x000D_Sep 18 13:01:56 server.1.com postmaster[6619]: 2019-09-18 13:01:56.401 +06 [6619] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"_x000D_Sep 18 13:01:56 server.1.com postmaster[6619]: 2019-09-18 13:01:56.409 +06 [6619] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"_x000D_Sep 18 13:01:56 server.1.com postmaster[6619]: 2019-09-18 13:01:56.427 +06 [6619] LOG: redirecting log output to logging collector process_x000D_Sep 18 13:01:56 server.1.com postmaster[6619]: 2019-09-18 13:01:56.427 +06 [6619] HINT: Future log output will appear in directory "log"._x000D_Sep 18 13:01:56 server.1.com systemd[1]: Started PostgreSQL 11 database server._x000D_
Если вам нужен доступ к PostgreSQL снаружи, вам нужно открыть порт TCP/5432, в стандартном firewall в Centos 7:
# firewall-cmd --get-active-zones
public_x000D_interfaces: eth0
# firewall-cmd --zone=public --add-port=5432/tcp --permanent
# firewall-cmd --reload
Или через iptables :
#iptables-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT
#service iptables restart
Если включен SELinux, выполните:
setsebool -P httpd_can_network_connect_db 1
По умолчанию при установке PostgreSQL в системе есть один пользователь —postgres.
Я не рекомендую использовать его для работы с базами данных, лучше создавать пользователей для каждой БД отдельно.
Чтобы подключиться к серверу postgres нужно ввести команду:
[root@server /]# sudo -u postgres psql
psql (11.5)_x000D_Type "help" for help.
postgres=#
Открылась консоль PostgreSQL. Покажем несколько простых примеров управления PostgreSQL из консоли psql.
Т.к. любой пользователь системы может авторизоваться в postrgesql, сначала нужно изменить пароль пользователя postgres.
ALTER ROLE postgres WITH PASSWORD 'super_str0ng_pa$$word';
Сразу создадим новую базу данных, пользователя и дадим ему полные права на эту БД:
postgres=# CREATE DATABASE mydbtest;
postgres=# CREATE USER mydbuser WITH password '123456789';
postgres=# GRANT ALL PRIVILEGES ON DATABASE mydbtest TO mydbuser;
Подключиться к БД:
postgres=# c databasename
Вывести список таблиц:
postgres=# dt
Вывести список запросов к базе:
postgres=# select * from pg_stat_activity where datname='dbname'
Сбросить все подключения к базе:
postgres=# select pg_terminate_backend(pid) from pg_stat_activity where datname = 'dbname'
Информацию о текущей сессии можно получить так:
postgres=# conninfo
Для завершения работой с консолью psql, выполните:
postgres=# q
Как вы уже заметили, синтаксис не отличается от той же MariaDB или MySQL и поэтому особо останавливаться на однотипных командах мы не будем.
Отметим, что для более удобного управления базами PostgreSQL из веб-интерфейса рекомендуется использовать pgAdmin4 (написан на Python и Javascript/jQuery). Это аналог привычному многим веб разработчикам PhpMyAdmin.
Файлы конфигурации postgresql находятся в директории /var/lib/pgsql/11/data:
Чтобы запретить локальным пользователям вход в postgres без авторизации, в файле pg_hba.conf укажите:
local all all md5_x000D_host all all 127.0.0.1/32 md5
Рассмотрим наиболее важные параметры в конфигурационном файле postgresql.conf:
Создать резервную копию в PostgreSQL БД можно несколькими способами. Рассмотрим самый простой вариант.
Для начала проверим, какие БД запущены на сервере:
postgres=# list
У нас имеются 4 базы данных, 3 из которых системные (postgres и template).
Ранее мы создавали БД с именем “mydbtest”, на ее примере и выполним резервное копирование.
Один из способов резервного копирования, это выполнение его с помощью утилиты pg_dump:
sudo -u postgres pg_dump mydbtest > /root/dupm.sql
— выполняем запрос от пользователя postgres, указываем нужную БД и путь до файла в который нужно сохранить дамп базы. Дамп базы может забрать ваша система резевного копирования, или в случае использования веб сервера, вы можете отправить его в ваше облачное хранилище .
Чтобы восстановить указанный дамп в нужную БД, можно воспользоваться утилитой psql:
sudo -u postgres psql mydbtest < /root/dupm.sql
Так же можно создать бэкап в специальном формате дампа и сжатом с применением gzip:
sudo -u postgres pg_dump -Fc mydbtest > /root/dumptest.sql
Восстанавливается такой дамп с помощью утилиты pg_restore:
sudo -u postgres pg_restore -d mydbtest /root/dumptest.sql
Более расширенные настройки можно посмотреть в справке по данным утилитам:
man psql
man pg_dump
man pg_restore
В предыдущей статье о MariaDB , мы показывали, как можно привести практически к идеалу параметры конфигурационного файла my.cnf с помощью тюнеров. Для PostgreSQL существует, хотя правильнее сказать существовала такая утилита как PgTun, но к сожалению она уже давно не обновляется. В тоже время есть масса онлайн сервисов, с помощью которых вы можете настроить оптимальную конфигурацию для вашего PostgreSQL. Мне нравится сервис pgtune.leopard.in.ua .
Интерфейс очень прост. Вам нужно указать параметры вашего сервера (профиль, процессоры, память, тип дисков) и нажать кнопку “Generate”. В результате вам будет предложен вариант конфигурационного файла postgresql.conf с рекомендуемыми значениями основных параметров СУБД.
Например, для VPS SSD сервера с 2 Гб оперативной памятью, 2 CPU для запуска нескольких сайтов рекомендуются следующие настройки в postgresql.conf:
# DB Version: 11_x000D_# OS Type: linux_x000D_# DB Type: web_x000D_# Total Memory (RAM): 2 GB_x000D_# CPUs num: 2_x000D_# Connections num: 20_x000D_# Data Storage: ssd_x000D_max_connections = 20_x000D_shared_buffers = 512MB_x000D_effective_cache_size = 1536MB_x000D_maintenance_work_mem = 128MB_x000D_checkpoint_completion_target = 0.7_x000D_wal_buffers = 16MB_x000D_default_statistics_target = 100_x000D_random_page_cost = 1.1_x000D_effective_io_concurrency = 200_x000D_work_mem = 26214kB_x000D_min_wal_size = 1GB_x000D_max_wal_size = 2GB_x000D_max_worker_processes = 2_x000D_max_parallel_workers_per_gather = 1_x000D_max_parallel_workers = 2
И это на самом деле не единственный ресурс, на момент написания статьи, были достпны аналогичные сервисы:
С помощью подобных сервисов, можно быстро настроить начальные параметры СУБД для вашего оборудования и выполняемых задач. В дальнейшем уже нужно опираться не только на ресурсы сервера, но и анализировать в целом работу БД, ее размер, количество коннектов и на основе этого, выполнять дальнейшую тонкую донастройку параметров PostgreSQL.
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…