系统:Ubuntu 18.04

数据库: PostgreSQL

现状:

  1. 生产服务数据大小为:1.9T
  2. 本地数据库磁盘大小为:2T

目标:可以将最新的备份数据导入本地数据库。然而我们有一个1T的NVMe的硬盘,所以,我们决定将两个硬盘然后合成一个盘。

具体操作如下:

  • Add Drive
  • LVM
  • reboot
  • upgrade
  • restore

1. 关机插入硬盘, 开机后使用fdisk,可以查看硬盘分区,得到新插入硬盘的名称

$ sudo fdisk -l
/dev/nvme1n1

2. 卸载旧的数据盘

sudo umonut /data

3. 删除以前挂载的数据盘, 编辑: /etc/fstab

- UUID=054333e6-c323-4faf-a54c-933d0cf83614 /data ext4 defaults  0 2

4. 删除分区 /dev/nvme0n1

sudo fdisk /dev/nvme1n1

5. 重启

reboot

6. 创建 PVs

sudo pvcreate /dev/nvme0n1
sudo pvcreate /dev/nvme1n1

7. 创建 VG 并 扩展VG

sudo vgcreate LVM /dev/nvme1n1
sudo vgextend LVM /dev/nvme0n1

8. 创建 LV

sudo lvcreate -L2.8T -n database LVM

9. 格式化新创建的PV

sudo mkfs -t ext4 /dev/LVM/database

10. 创建数据挂载的目录,并挂载到此目录

sudo mkdir /mnt/data
sudo mount /dev/mapper/LVM-database /mnt/data

11. 开机自动挂载,首先找到新硬盘的UUID

sudo blkid

12. 添加新的UUID到 /etc/fstab 中,开机自动挂载

UUID=a1120d8d-8a9d-4c3c-93fe-4c2d53e9b829 /mnt/data  ext4  errors=remount-ro 0  1

13. 重启

reboot

14. 需要重新授权 Postgres 到新的数据盘

> chown -R postgres:postgres /mnt/data/postgresql/
> sudo su postgres
> PGDATA=/mnt/data/postgresql
> systemctl status postgresql
> systemctl start postgresql
> exit

15. 创建新的数据库,并还原数据到此数据库

> sudo -u postgres -s
> psql
> postgres=# create database blog;
> postgres=# create user blog;
> postgres=# alter user blog with encrypted password 'password';
> postgres=# grant all privileges on database blog to blog;
> postgres=# ALTER DATABASE blog OWNER TO blog;
> postgres=# exit
> exit
> pg_restore -U blog -j 8 -v -d blog PostgreSQL-backup.sql

16. 修改 PostgreSQL 配置,确保可以远程访问

  1. 添加 listen_addresses = '*' 到 postgresql.conf
  2. 添加 host all all 0.0.0.0/0 md5 到 pg_hba.conf
  3. 重启PostgreSQL “sudo systemctl restart postgresql”