Ubuntu挂载HDD迁移存储PostgreSQL数据

关联博客:windows通用网线连接ubuntu实现ssh登录、桌面控制、文件共享

背景:

在个人ubuntu机器上安装了pgsql,新建了一张表插入了2000w+数据用于模拟大批量数据分页查询用,但是发现查询也不慢(在公司测试环境查询1700w+总数需要16s左右),由于当前pgsql数据默认安装在SSD中,怀疑由于SSD的读取速度较高,体现不出查询慢,于是计划挂载一张机械硬盘,将pg数据迁移至机械盘,验证查询是否会变慢

实践:

1、挂载HDD

1-1、ubuntu界面操作

准备一张空闲的HDD硬盘,连接至ubuntu(本文使用一张1T的希捷HDD)

格式化,卷名设置为HDD

设置完后为未挂载状态

由于在界面上挂载,默认会将HDD挂载到/media目录下,所以下面执行指令

1-2、查看未挂载的磁盘,从大到小排序

可以看第一个为我们需要挂载的磁盘,LABELHDDUUID7639aea6-7668-4bc3-ae22-b48c96377e8f

bash 复制代码
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,LABEL,UUID | grep -v " /" | sort -hrk2
sda         931.5G ext4                                         HDD      7639aea6-7668-4bc3-ae22-b48c96377e8f
nvme0n1     931.5G                                                       
└─nvme0n1p3 609.2G ntfs                                         material 6CB69233B691FDB0
 

1-2、创建挂载点目录

bash 复制代码
sudo mkdir -p /mnt/pgdata

1-3、执行挂载

此文演示基于LABEL进行挂载,-L后面 填写标签

临时挂载测试

bash 复制代码
sudo mount -L HDD /mnt/pgdata

检查挂载状态

bash 复制代码
df -h /mnt/pgdata
文件系统        大小  已用  可用 已用% 挂载点
/dev/sda        916G   28K  870G    1% /mnt/pgdata

设置永久挂载(编辑/etc/fstab)

bash 复制代码
sudo nano /etc/fstab
## 添加配置
LABEL=HDD /mnt/pgdata ext4 defaults,nofail 0 2

验证fstab配置

bash 复制代码
# 没有错误消息,表示配置正确
sudo mount -a

设置权限

bash 复制代码
sudo chown -R postgres:postgres /mnt/pgdata
sudo chmod 700 /mnt/pgdata

2、迁移PG数据

2-1、停止pg服务

bash 复制代码
sudo systemctl stop postgresql

2-2、迁移存量数据

查看当前pgsql的数据目录

bash 复制代码
grep data_directory /etc/postgresql/*/main/postgresql.conf
data_directory = '/var/lib/postgresql/15/main'          # use data in another directory

移动数据至刚才挂载的目录【需要等待一定时间,具体看需要转移多少存量数据】

bash 复制代码
sudo mv /var/lib/postgresql/15/main /mnt/pgdata

2-3、修改配置&确认修改

修改postgresql.conf

bash 复制代码
sudo nano /etc/postgresql/15/main/postgresql.conf
data_directory = '/mnt/pgdata/main'          # use data in another directory

重启pgsql

bash 复制代码
sudo systemctl start postgresql

检查数据目录是否修改

bash 复制代码
sudo systemctl status postgresql
sudo -u postgres psql
postgres=# SHOW data_directory;
  data_directory  
------------------
 /mnt/pgdata/main
(1 row)

3、问题汇总

3-1、执行迁移指令后,HDD磁盘容量没有变化

执行sudo mv /var/lib/postgresql/15/main /mnt/pgdata前,请确认需要HDD挂载的目录是否为/mnt/pgdata,博主先前设置HDD挂载目录为/mnt/pgdata,但是迁移时执行sudo mv /var/lib/postgresql/15/main /mnt/pg_data,多了下划线,导致实际没有迁移成功。

3-2、登录pgsql提示:连接到套接字"/var/run/postgresql/.s.PGSQL.5432"上的服务器失败:没有那个文件或目录

关注postgresql.conf配置中的data_directory与当前pgsql的实际数据目录地址是否一致。博主执行sudo mv /var/lib/postgresql/15/main /mnt/pgdata指令后,pg数据实际上迁移至了/mnt/pgdata/main中,一开始postgresql.conf设置data_directory/mnt/pgdata,出现了这个问题,调整成/mnt/pgdata/main后解决

验证:

在挂载HDD和pg数据迁移过后,再次执行

sql 复制代码
SELECT COUNT(*) FROM t_common_work_order_log;

首次查询很慢,约20分钟,用SSD的话首次查询约为16s

但是后续查询就比较快了,插入了新数据后再次查询也很快,甚至先前比用SSD还快😳

相关推荐
即将头秃的程序媛1 小时前
centos 7.9安装tomcat,并实现开机自启
linux·运维·centos
fangeqin1 小时前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl
爱奥尼欧2 小时前
【Linux 系统】基础IO——Linux中对文件的理解
linux·服务器·microsoft
超喜欢下雨天3 小时前
服务器安装 ros2时遇到底层库依赖冲突的问题
linux·运维·服务器·ros2
tan77º4 小时前
【Linux网络编程】网络基础
linux·服务器·网络
风口上的吱吱鼠4 小时前
Armbian 25.5.1 Noble Gnome 开启远程桌面功能
服务器·ubuntu·armbian
笑衬人心。4 小时前
Ubuntu 22.04 + MySQL 8 无密码登录问题与 root 密码重置指南
linux·mysql·ubuntu
坤坤不爱吃鱼5 小时前
【MySQL\Oracle\PostgreSQL】迁移到openGauss数据出现的问题解决方案
mysql·postgresql·oracle
生如夏花℡5 小时前
HarmonyOS学习记录3
学习·ubuntu·harmonyos
chanalbert6 小时前
CentOS系统新手指导手册
linux·运维·centos