docker搭建postgresql 14主从库 及使用shell脚本备份数据库

docker搭建postgresql 14主从库 及使用shell脚本备份数据库

1、地址规划

IP地址名称备注
192.168.1.11pg1主库
192.168.1.21pg2从库

2、安装部署主库

[root@cn01 ~]# mkdir -p /data/postgressql/data
[root@cn01 ~]# docker run --name pgtest --restart=always -v /data/postgressql/data/:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 -d postgres:latest
97fb21c9e700842e131269907f88e17ca274794e9410d702ef9da9fbf89c140e
[root@cn01 data]# docker exec -it pgtest /bin/bash   #进入到容器	
root@97fb21c9e700:/# su postgres                     #进入到postgres用户下
postgres@97fb21c9e700:/$ psql
psql (14.2 (Debian 14.2-1.pgdg110+1))
Type "help" for help.postgres=# CREATE ROLE replica login replication encrypted password 'replica'; #创建用户
CREATE ROLE
postgres=# \duList of rolesRole name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}replica   | Replication                                                | {}
postgres=# \
postgres@97fb21c9e700:/$ exit
exit#修改postgresql配置文件
[root@cn01 data]# vim postgresql.conf
listen_addresses = '*'
archive_mode = on
archive_command = '/bin/date'
max_connections = 100 
max_wal_senders = 32
wal_sender_timeout = 60s
wal_keep_size = 16
wal_level = replica

3、安装部署从库

[root@cn21 ~]# docker run --name pgtest --restart=always -v /data/postgressql/data/:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 -d postgres:latest
6cd25ae30181b20bf70d7a2b2a813b724dc972a6bef09c2d7ec5186a6ebf3363
[root@cn21 ~]# docker exec -it pgtest /bin/bash
root@6cd25ae30181:/# rm -rf /var/lib/postgresql/data/* #此时可能会退出容器,只需要重新登入进去即可
[root@cn21 ~]# docker exec -it pgtest /bin/bash
root@6cd25ae30181:/# pg_basebackup -R -D /var/lib/postgresql/data -P -h 192.168.10.11 -p 5432 -U replica
26288/26288 kB (100%), 1/1 tablespace
[root@cn21 ~]# docker restart pgtest
pgtest
[root@cn21 ~]# cat /data/postgressql/data/postgresql.auto.conf 
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
primary_conninfo = 'user=replica passfile=''/root/.pgpass'' channel_binding=prefer host=192.168.10.11 port=5432 sslmode=prefer sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'

4、查看进程

[root@cn01 ~]# ps -ef|grep postgres
polkitd   13707  13678  0 15:11 ?        00:00:00 postgres
polkitd   13767  13707  0 15:11 ?        00:00:00 postgres: checkpointer
polkitd   13768  13707  0 15:11 ?        00:00:00 postgres: background writer
polkitd   13769  13707  0 15:11 ?        00:00:00 postgres: walwriter
polkitd   13770  13707  0 15:11 ?        00:00:00 postgres: autovacuum launcher
polkitd   13772  13707  0 15:11 ?        00:00:00 postgres: stats collector
polkitd   13773  13707  0 15:11 ?        00:00:00 postgres: logical replication launcher
polkitd   18562  13707  0 15:13 ?        00:00:00 postgres: walsender replica 192.168.10.21(57954) streaming 0/4000060                                #
root      22923  13304  0 15:15 pts/0    00:00:00 grep --color=auto postgres[root@cn21 ~]# docker ps |grep postgres  #查看从数据库
6cd25ae30181        postgres:latest     "docker-entrypoint..."   11 minutes ago      Up About a minute   0.0.0.0:5432->5432/tcp   pgtest

5、测试同步

postgres=# create database test12; #主机
CREATE DATABASE
postgres=# \listList of databasesName    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +|          |          |            |            | postgres=CTc/postgrestemplate1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +|          |          |            |            | postgres=CTc/postgrestest      | postgres | UTF8     | en_US.utf8 | en_US.utf8 | test12    | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
(5 rows)postgres=# \list   #从机查看已经同步List of databasesName    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +|          |          |            |            | postgres=CTc/postgrestemplate1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +|          |          |            |            | postgres=CTc/postgrestest      | postgres | UTF8     | en_US.utf8 | en_US.utf8 | test12    | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
(5 rows)

6、shell脚本定期备份postgresql数据库

#!/bin/bash
folder=/backup/pgdatabackup
if [ ! -d folder ];then
mkdir -p "$folder"
fi
cd $folder
day=`date +%Y%m%d%M`
FILENAME=$day.backup
mkdir -p "$day"
#cd $day
host=192.168.10.21
user=postgres
password=123456
db=test
docker exec -i pgtest /bin/bash -c 'PASSWORD='$password' /usr/bin/pg_dump -Fc -p 5432 -U '$user' -d '$db'>/home/'$FILENAME''
docker cp 'pgtest:/home/'$FILENAME'' ''$folder'/'$FILENAME''
docker exec -i pgtest /bin/bash -c 'rm -rf /home/'$FILENAME''

7、shell脚本定时任务

crontab -e
*/1 * * * * /test/pgbackup.sh       #每一分钟执行一次
*/10 * * * * /test/pgbackup.sh      #每十分钟执行一次
0 */1 * * * /test/pgbackup.sh       #每一个小时执行一次
30 1 * * * /test/pgbackup.sh        #每天1:30分执行一次
0 23-7/2,8 * * * /test/pgbackup.sh #晚上11点到早上7点每两个小时执行一次,早上八点执行一次
0 11 4 * 1-3 /test/pgbackup.sh      #每个月的4号和每周的周一、周三的11时
22 4 * * 0 /test/pgbackup.sh        #每周日凌晨4:22执行
42 4 1 * * /test/pgbackup.sh        #每月1日4:42分执行一次

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VC程序中运行其他程序的三种方法

有三个函数可以使用: WinExec, ShellExecute,CreateProcess 1.WinExec(String lpCmdLine,Long nCmdShow); 参数说明: 参数类型及说明lpCmdLineString,包含要执行的命令行nCmdShowLong,为窗口指定可视性方面的一个命令。请用下述任何一个常数SW_HIDE隐藏窗…

linux shell 判断主机三次存活之批量探测

linux shell 判断主机三次存活之批量探测 在生产环境中,需要查看主机在线情况,之前都是采用执行一次ping命令的方式去操作,会丢失某些存活主机,故改进了脚本采用ping三次的方式进行操作。 #for 语句 #!/bin/bash ip_…

linux中单引号、双引号

linux中单引号与双引号的区别和用法 1、单引号 单引号定义为所见即所得,单引号内部的内容原样输出,被单引号引起来的内容不管时变量还是常量都不会发生替换 #在表示连续字符串时,单引号、双引号、无引号都是一样的 [rootcn21 ~]# str1&quo…

多媒体融合通信平台促进公网和专网的互联互通

在发生诸如地震、洪涝灾害以及极端天气的情况下,由于通信设施和电力设施最容易遭到破坏,因此,在进行应急救援时,相关指挥部门最先想到的就是进行相应设施的抢修。 公网抢修成功,所有相关抢险救灾者都可以实现互相通话&…

ECMAScript 的未来:预测 JavaScript 创新的下一个浪潮

以下是简单概括关于JavaScript知识点以及一些目前比较流行的比如:es6 想要系统学习: 大家有关于JavaScript知识点不知道可以去 🎉博客主页:阿猫的故乡 🎉系列专栏:JavaScript专题栏 🎉ajax专栏&…

Linux之shell中的大括号、中括号、小括号的使用详解

Linux之shell中的大括号、中括号、小括号的使用详解及示例 **摘要:**很多人和我一样对于shell的各种括号的各种用法肯定不是很清楚,有时候看见别人脚本都不知道是什么意思,今天就来说说bash中的大中小括号的用法和解释,本人常用b…

利用Visio 2007图形化项目进度和项目跟踪

课程类型 Microsoft Office Visio 2007 视频时长 120分钟 播放 课程资料 课程简介: 在进行项目管理时,项目经理将使用Microsoft Project对项目进行规划、资源分配、成本控制和项目状态跟踪。但是,项目中的数据如何能够通过更图形化的方式呈…

初学者看看PHP explode() 函数 第6篇

PHP explode() 函数 定义和用法 explode() 函数把字符串分割为数组。 语法 explode(separator,string,limit)参数 描述 separator 必需。规定在哪里分割字符串。 string 必需。要分割的字符串。 limit 可选。规定所返回的数组元素的最大数目。 说明 本函数返回由字符串组成的…

linux 备份文件滚动删除

linux 备份文件滚动删除 摘要:在实际的生产环境中,需要我们不断的备份文件,但是受到磁盘空间的影响,只能保留最新的备份文件。 1、只保存最近n天的文件 [rootcn01 test1]# ll 总用量 0 drwxr-xr-x 2 root root 6 2月 14 2020 …

jQuery常用方法总结(转)

jQuery 常见操作实现方式 $("标签名") //取html元素 document.getElementsByTagName("") $("#ID") //取单个控件document.getElementById("") $("div #ID") //取某个控件中 控件 $("#ID #ID") // 通过控件ID取其中…

K8s集群部署(最新版)

K8s集群部署(最新版) 1、部署k8s的两种方式: 本次实验采用kubeadm工具来部署Kubernetes集群。 Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。 2、环境准备 服务器要求&a…

VRP 的发展

随着网络技术和应用的飞速发展,VRP 平台在处理机制、业务能力、产品支持等方面也在持续演进。由于平时也接触到了这几个版本的平台,也常不知道所以然,特找了些资料整理了一下。主要列举了VRP 发展历程中的几个主要版本。 VRP 发展历程 各版本…

Harbor私有仓库部署(最新)

Harbor私有仓库部署(最新) [rootK8s-Master ~]#yum install wget -y [rootK8s-Master ~]#wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo #docker-ce国内yum源 [rootK8s-Master ~]#yum -y…

K8S使用habor作为私有仓库

K8S使用habor作为私有仓库 1、修改每个node上的docker认证仓库 # 将每个node节点上的docker同样需要配置可信任仓库 vi /etc/docker/daemon.json #修改为 { "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"], "insecure-registries&qu…

桌面虚拟化之用户行为审计

桌面虚拟化通过统一的远程访问协议(如PCoIP、RDP)来进行桌面的远程访问。这样的好处是显而易见的。因为只提供一种方式进行接入,所以IT人员只要做好一条防线的保护,用户的操作及行为都可以尽收眼底了。这就好比古城堡一样&#xf…

K8s集群离线部署

K8s集群离线部署(最新版) 1、部署k8s的两种方式: 本次实验采用的部署Kubernetes方式: kubeadm Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。 2、环境准备 …

渲染优化 lock unlock

昨天参加了公司组织的nvdia的培训,讲了一些关于D3D的优化和可能的瓶颈所在,具体的条目就不说了,这里说一些关于资源的Lock和Unlock,以及我在GL下的测试。 老师讲到向Draw*这类函数是将其指令放入指令队列,带填满后或者…

linux 共享盘cifs、nfs

linux 共享盘cifs、nfs 1、安装并启用nfs服务 #安装nfs并启用相关服务 yum install -y rpcbind nfs-utils systemctl start rpcbind systemctl start nfs-server#创建本地nfs文件夹 mkdir -p /data/nfs/d{1..4} [rootlocalhost ~]# vim /etc/exports /data/nfs/d1 *(rw,sync…

选出你最喜欢的Linux操作系统吧

做一份调查,你最喜欢的LINUX版本是什么?有何优点? 为什么使用它?说出一二个优点哈。Redhat/Fedora SUSE Debian Mandriva Ubuntu RedFlag Asianux CentOS Gentoo Others希望大家能发表自己的意见~~说出各自的优点。转载于:https:…