PostgreSQL硬盘满了扩容

PostgreSQL硬盘满了扩容


前言:我们系统原来是乙方做的,后来扔给了我们.
我们没有专业的运维和DBA😢
国庆期间,遇到了一个重大的问题----数据库硬盘满了😱😱😱

1. 扩容

我们先向云服务商给挂载的数据盘申请了500G的空间,然后准备扩容.
发现,分区默认是MBR格式的,最大只支持2T…GG,白申请了
只能先清理下日志,临时文件啥的.最后腾出来了200G.

2. 再遇

过了一个多礼拜,200G硬盘又差不多要用光了,得赶紧找办法了.
经过半天多的摸索,终于找到了一个方法–表空间(TableSpace)
之前也完全没接触过这个东西…

3. 开干

  1. 后台挂载一块新硬盘
  2. 格式化
# 1.查看当前挂载的硬盘
[root@xxx]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  2.5T  0 disk
└─sda1   8:1    0    2T  0 part /data
vda    253:0    0   40G  0 disk
├─vda1 253:1    0   36G  0 part /
└─vda2 253:2    0    4G  0 part [SWAP]
vdb    253:16   0    2T  0 disk
└─vdb1 253:17   0    2T  0 part /data/new_space

# 2.查看硬盘--我这个已经弄过了=v=
[root@xxx]# fdisk -l
Disk /dev/vdb: 2147.5 GB, 2147483648000 bytes, 4194304000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: E1B56E5D-F33B-49C1-A7B7-B38F0FE4FAC5
#         Start          End    Size  Type            Name
 1         2048   4194301951      2T  Microsoft basic primary

# 3.parted选择硬盘(不要选择分区,例如/dev/vdb1之类的)
# 以下命令都是在parted交互模式下
[root@xxx]# parted /dev/vdb
#  3.1设置卷标--gpt
[root@xxx]#parted> mklabel gpt
#  3.2创建逻辑分区
[root@xxx]#parted> mkpart primary 0% 100%
#  3.3print查看有没有成功
[root@xxx]#parted> print

# 4.格式化成xfs
mkfs.xfs /dev/vdb1
  1. 挂载到目录
# 创建目录用来挂载
[root@xxx]# mkdir /data/new_space
# 挂载目录
[root@xxx]# mount /dev/vdb1 /data/new_space/
# 编辑/etc/fstab 设置开机自动挂载
[root@xxx]# vi /etc/fstab
# 添加 /dev/vdb1 /data/new_space xfs defaults 0 0
[root@xxx]#vi> o	# 当前行下新建一行
[root@xxx]#vi> /dev/vdb1 /data/new_space xfs defaults 0 0
# 给postgres分配此目录权限
[root@xxx]# chown postgres /data/new_space
# 读写权限(按需修改)
[root@xxx]# chmod -R 777 /data/new_space
  1. 创建表空间
# 切换postgres用户(注意'-',不加'-'shell环境不切换,报错)
[root@xxx]# su - postgres
# 进入psql交互模式
[root@xxx]# psql
# 创建新表空间 ts_gps_new
[root@xxx]#psql> CREATE TABLESPACE "ts_gps_new" location '/data/new_space';
# 修改默认表空间 (注意:只对此会话有效!!!)
[root@xxx]#psql> set default_tablespace = ts_gps_new;
# 查看表空间
[root@xxx]#psql> \db
           List of tablespaces
    Name    |  Owner   |    Location
------------+----------+-----------------
 pg_default | postgres |
 pg_global  | postgres |
 ts_gps_new | postgres | /data/new_space

  1. 修改新创建的表的表空间
# 新建表
[root@xxx]#psql> CREATE TABLE XXX(int id...) tablespace ts_gps_new;
# 设置了default_tablespace可以省略后面的(再次提醒:default_tablespace只对当前会话有效!!!)
[root@xxx]#psql> CREATE TABLE XXX(int id...)
# 查看表所在的表空间
[root@xxx]#psql> select pg_relation_filepath('XXX')
  1. 修改已有表的表空间
    1. 由于之前的一些旧的表采用了Partitions分区表,所以修改时要修改下面的子表
    2. 附表好像改了没用?
[root@xxx]#psql> alter table mt_xxx_2019 set tablespace ts_gps_new;
[root@xxx]#psql> alter table mt_xxx_2020 set tablespace ts_gps_new;

首发同步:https://www.yuque.com/docs/share/0da26961-ca16-4dd0-9f05-a5449b6baa32?# 《PostgreSQL硬盘满了扩容》

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值