Установим PostgreSQL 12 на сервер с операционной системой Ubuntu 20.04 LTS. БД установим на отдельный диск объёмом 300 ГБ, примонтированный к /opt.
Требования
- ОС Ubuntu 20.04 LTS.
- Работаем из-под root.
Подготовка раздела
Итак, цепляем новый диск к виртуальной машине. Чтобы Ubuntu увидела новый диск, перезагружаемся. После перезагрузки у нас появляется в системе новый диск /dev/sdb объёмом 300 Гб.
fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 5388D5D6-28F3-4F43-BD86-E13190556B92
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 41940991 41936896 20G Linux filesystem
Disk /dev/sdb: 300 GiB, 322122547200 bytes, 629145600 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Создаём основной раздел на диске:
fdisk /dev/sdb
Пример:
Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x8c9be56d.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-629145599, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-629145599, default 629145599):
Created a new partition 1 of type 'Linux' and of size 300 GiB.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
Проверяем:
fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 5388D5D6-28F3-4F43-BD86-E13190556B92
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 41940991 41936896 20G Linux filesystem
Disk /dev/sdb: 300 GiB, 322122547200 bytes, 629145600 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8c9be56d
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 629145599 629143552 300G 83 Linux
На диске появился раздел /dev/sdb1.
В разделе /dev/sdb1 нужно создать файловую систему:
mkfs.ext4 -m 0 /dev/sdb1
mke2fs 1.45.5 (07-Jan-2020)
Creating filesystem with 78642944 4k blocks and 19660800 inodes
Filesystem UUID: 0aa0e6a0-9ff5-4dbe-9a3e-7599b7643b16
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
Примонтируем /dev/sdb1 в /opt. В папке opt будет лежать кластер PostgreSQL. Проверим что /opt существует:
cd /
ll | grep opt/
drwxr-xr-x 3 root root 4096 Jul 2 16:34 opt/
Узнаем UUID раздела /dev/sdb1.
blkid /dev/sdb1
/dev/sdb1: UUID="0aa0e6a0-9ff5-4dbe-9a3e-7599b7643b16" TYPE="ext4" PARTUUID="8c9be56d-01"
Добавим строку в /etc/fstab:
UUID=0aa0e6a0-9ff5-4dbe-9a3e-7599b7643b16 /opt ext4 defaults 0 0
Монтируем раздел:
sudo mount -a
Проверяем:
df -h
Filesystem Size Used Avail Use% Mounted on
udev 7.8G 0 7.8G 0% /dev
tmpfs 1.6G 872K 1.6G 1% /run
/dev/sda2 20G 6.8G 12G 37% /
tmpfs 7.9G 20K 7.9G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
/dev/sdb1 295G 65M 295G 1% /opt
tmpfs 1.6G 0 1.6G 0% /run/user/1000
Видим что /dev/sdb1 примонтирован в /opt и имеет 295G свободного места. Теперь после перезагрузки раздел будет монтироваться автоматически.
Радел для PostgreSQL подготовлен.
Установка PostgreSQL 12
Обновляем репозиторий.
apt-get update
Устанавливаем пакеты postgresql и postgresql-contrib.
apt-get install postgresql postgresql-contrib
Устанавливается PostgreSQL 12.
Проверяем статус сервера:
service postgresql status
Сервис запущен. Сразу же не отходя от кассы перенесём PostgreSQL на выделенный раздел /opt. Проверим где находится текущая БД PostgreSQL.
sudo -u postgres psql
psql (12.7 (Ubuntu 12.7-0ubuntu0.20.04.1))
Type "help" for help.
postgres=# SHOW data_directory;
data_directory
-----------------------------
/var/lib/postgresql/12/main
(1 row)
БД находится в папке /var/lib/postgresql/12/main. Для переноса БД нам понадобится rsync:
apt-get install rsync
Останавливаем сервисы
service zabbix-server stop
systemctl stop postgresql
Проверка статуса Postgresql.
systemctl status postgresql
Ищем строку "Stopped PostgreSQL RDBMS." Сервисы остановлены. Переносим файлы базы данных.
rsync -av /var/lib/postgresql /opt
После переноса переименуем старую папку, на всякий случай:
mv /var/lib/postgresql/12/main /var/lib/postgresql/12/main.bak
Настроим конфигурацию Postgresql. Правим файл postgresql.conf:
vim /etc/postgresql/12/main/postgresql.conf
Изменяем значение data_directory:
data_directory = '/opt/postgresql/12/main'
Запуск сервисов.
systemctl start postgresql
Проверяем где находится текущая БД postgresql.
sudo -u postgres psql
psql (12.7 (Ubuntu 12.7-0ubuntu0.20.04.1))
Type "help" for help.
postgres=# SHOW data_directory;
data_directory
-------------------------
/opt/postgresql/12/main
(1 row)
БД находится в папке /opt/postgresql/12/main.
Удалим ненужные файлы:
rm -Rf /var/lib/postgresql/12/main.bak
Мы установили Postgresql 12 на Ubuntu 20.04 LTS. Файлы данных разместили на отдельном диске.