这里指定了密码文件的格式及权限配置背景:有些表中的数据需要进行同步到内网供数据分析人员使用,在备份表的过程中,发现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
网友评论