从阿里云上备份pg部分表到内网还原

背景:有些表中的数据需要进行同步到内网供数据分析人员使用,在备份表的过程中,发现pg_dump 没有加入密码的选项,必须要手动加入。查询官方文档后发现可以用加入密码文件的方式进行免密码备份。

这里指定了密码文件的格式及权限配置

备份还原流程

  • 备份所需的表
  • 同步数据到内网
  • 导入数据到内网pg库
  • 敏感数据处理
1. 备份表

①创建所需要的密码文件

[root@8u29-pg ~]# echo "192.168.6.111:5432:fintech_k8s:fintech:xxxx"  > ~/.pgpass ; chmod 0600 ~/.pgpass 

②将需要备份的表放入到/root/shell/bakpg/tables.txt 文件中
③写备份所需的python脚本

 cat pg_bak.py 
#!/usr/bin/env python
# - * - coding: utf-8 - * -
'''
backup pg  tables
'''

import os
import time
BACKUP_DIR = '/data/pg_9u4/sqldir'
HOST = '192.168.6.111'
POST = '5432'
DB = 'fintech_k8s'
USER = 'fintech'
PG_DUMP = '/usr/bin/pg_dump'
TABLE = '/root/shell/bakpg/tables.txt'
LOG = '/root/shell/bakpg/log.txt'
LOGTIME = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
with open(TABLE, 'r') as f:
    for table_t in f:
        table_name = table_t.strip()
        bak_name = "%s/%s.sql" % (BACKUP_DIR, table_name)
        BAK_CMD = '%s -h %s -p %s -d %s -t %s -U %s -f %s ' % (PG_DUMP, HOST, POST, DB, table_name, USER, bak_name)
        result = os.system(BAK_CMD)
        if result == 0:
            with open(LOG, 'a') as f:
                f.write(LOGTIME + " " + table_name + " table backup succeed! \n")
        else:
            with open(LOG, 'a') as f:
                f.write(LOGTIME + " " + table_name + " table backup failed! \n")
2. 利用rsync 同步到内网(该步略)
3.在内网服务器上将备份的数据导入到pg库中,脚本与上方的备份脚本基本相同,主要是导入命令:
/usr/bin/pg_dump -d fintech_k8s -Ufintech  -f  <  /data/pg_9u4/sqldir/文件名.sql
4.敏感数据处理

处理方法:将有敏感数据的字段update 为null

你可能感兴趣的:(从阿里云上备份pg部分表到内网还原)