PostgreSQL附属库complete fresh简单实现

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介:

可能出于某种目的,需要把一个PG数据库整个的复制到另一个数据库。

实现方法非常多,如:(第一个和第三个都需要注意reference关系)

1.使用DB_LINK打通两个数据库,这个的话也是比较通用的,缺点是要编译一下源码并安装DB_LINK套件。

2.使用pg_dump管道连接两个数据库直接导入到附属库

3.使用SHELL脚本实现

今天的话主要介绍一下使用SHELL脚本来实现附属库的数据传入

主库A放在上海IDC,使用postgresql8.3

附属库B放在香港IDC,使用的是POSTGRESQL8.4,假设已经有了与A库相同的DDL在某SCHEMA下面

步骤:

1.首先是在A库上建立一个只读用户,赋予需要被复制的表,数据库,SCHEMA只读权限。配置PG_HBA开放这个只读用户的访问权限

2.在B库服务器上配置一个.pgpass文件,放上连接A库的只读用户密码,这样的话在B库连接A库就不需要输密码了

3.在B库上编写2个SHELL脚本,就开搞了

第一个脚本是执行实体(关键字需要用引号)

#!/bin/bash

. /home/postgres/.bash_profile

if [ $# -ne 2 ]; then

echo -e “parameter error”

exit 1

fi

TABLE_NAME=$1

address_tbl_COL=”\”type\”, xxx, xxx”

message_tbl_COL=”id, xxx, xxx, xxx, \”type\”"

rp_newaccess_20100301_COL=”xxx, xxx, xxx, xxx”

tbl_action_log_COL=”id, xxx, xxx, xxx, xxx, xxx,objid”

eval TABLE_COL=”$”${TABLE_NAME}_COL

if [ $2 == "TRUNCATE" ]; then

psql -h /tmp -p 1921 -U user -d dbname -c “truncate table ${TABLE_NAME} CASCADE”

exit

fi

if [ $2 == "INSERT" ]; then

psql -h ***.***.***.*** -p 1921 -U user -d dbname -c “copy schema.${TABLE_NAME} (${TABLE_COL}) to stdout”|psql -h /tmp -p 1921 -U user -d dbname -c “copy ${TABLE_NAME} (${TABLE_COL}) from stdin”

exit

fi

exit

第二个脚本是执行外壳

#!/bin/bash

. /home/postgres/.bash_profile

# 判断是否已经在运行

test -f /home/postgres/script/run/db_xxx_sync_entry.run

if [ $? -eq 0 ]; then

exit 3

fi

# 生产在运行标记

touch /home/postgres/script/run/db_xxx_sync_entry.run

/home/postgres/script/db_xxx_sync.sh address_tbl TRUNCATE

/home/postgres/script/db_xxx_sync.sh message_tbl TRUNCATE

/home/postgres/script/db_xxx_sync.sh rp_newaccess_20100301 TRUNCATE

/home/postgres/script/db_xxx_sync.sh tbl_action_log TRUNCATE

/home/postgres/script/db_xxx_sync.sh address_tbl INSERT

/home/postgres/script/db_xxx_sync.sh message_tbl INSERT

/home/postgres/script/db_xxx_sync.sh rp_newaccess_20100301 INSERT

/home/postgres/script/db_xxx_sync.sh tbl_action_log INSERT

vacuumdb -ze -d dbname

# 删除运行标记

sleep 10

rm -f /home/postgres/script/run/db_xxx_sync_entry.run

4.创建相关目录,把脚本放进去就OK了

su – postgres

mkdir -p ~/script/run

剩下的事情就是,直接调用外壳就OK了,数据会自动添加进来。下次要添加表或者是更新了字段的话修改一下第一个脚本就可以了。

如果数据量比较大的情况下,可以在SHELL里面加上一些异常处理,邮件通知等等,随时掌握复制进度和健康状况。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
监控 数据可视化 关系型数据库
PostgreSQL主备库搭建
pg主备库的搭建,首先需在2个节点安装pg软件,然后依次在2个节点配置主备。 本文采用os为CentOS7.6,pg版本使用14.2,以下为详细部署步骤。
681 0
|
SQL 关系型数据库 数据库
PostgreSQL 删除数据库
PostgreSQL 删除数据库
254 0
|
弹性计算 网络协议 容灾
PostgreSQL 时间点恢复(PITR)在异步流复制主从模式下,如何避免主备切换后PITR恢复(备库、容灾节点、只读节点)走错时间线(timeline , history , partial , restore_command , recovery.conf)
标签 PostgreSQL , 恢复 , 时间点恢复 , PITR , restore_command , recovery.conf , partial , history , 任意时间点恢复 , timeline , 时间线 背景 政治正确非常重要,对于数据库来说亦如此,一个基于流复制的HA架构的集群,如果还有一堆只读节点,当HA集群发生了主备切换后,这些只读节点能否与新的主节点保持
1659 0
|
4月前
|
关系型数据库 数据库 PostgreSQL
PostgreSQL【应用 01】使用Vector插件实现向量相似度查询(Docker部署的PostgreSQL安装pgvector插件说明)和Milvus向量库对比
PostgreSQL【应用 01】使用Vector插件实现向量相似度查询(Docker部署的PostgreSQL安装pgvector插件说明)和Milvus向量库对比
188 1
|
11月前
|
存储 弹性计算 关系型数据库
实践教程之如何对PolarDB-X的存储节点发起备库重搭
PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。本期实验将指导您如何对PolarDB-X的存储节点发起备库重搭。
|
Cloud Native 关系型数据库 分布式数据库
直播预告 | PolarDB-X 生产级关键能力开源升级解读:备库重搭原理与实践
备库重搭是指在备库发生故障时进行恢复的过程,PolarDB-X 基于自身特点实现一套备库重搭流程,可帮助用户及时恢复故障节点。本次分享主要介绍 PolarDB-X 中备库重搭的背景与原理,以及 PolarDB-X Operator 是如何实现 DN 备库重搭的。
|
存储 运维 Kubernetes
PolarDB-X 数据节点备库重搭
本文主要介绍PolarDB-X中DN(数据节点)备库重搭的背景,以及polardbx-operator上是如何实现DN备库重搭的。
PolarDB-X 数据节点备库重搭
|
SQL 关系型数据库 数据库连接
PG技术大讲堂 - Part 3:PostgreSQL建库与使用
PG技术大讲堂 - Part 3:PostgreSQL建库与使用
158 1
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 删除数据库
PostgreSQL 删除数据库
136 0
|
SQL 关系型数据库 MySQL
如何迁移自建库用户密码和权限到RDS MySQL/PolarDB MySQL
如何迁移自建库用户密码和权限到RDS MySQL/PolarDB MySQL