前言

不久前,公司的一台物理机器硬件坏了,导致运行在其上的虚拟机都挂了。很不凑巧的是,我负责的那台虚拟机的系统盘坏了(ps:感觉老天在玩我),导致里面的数据永远的离我而去(ps:当时我的内心是崩溃的)。为了避免再次发生这种事情,就想到了主从备份君。由于之前虚拟机使用的的是postgresql,因此本博是对postgresql主从备份的配置。写本博的主要目的有以下几点:

1.记录下来配置的方法,以便以后使用

2.希望能够帮助那些配置postgresql主从备份的人

3.希望大神可以提供更好的配置方案,指出本博理解不对的地方,以便本人改进

系统环境

  • 操作系统:centos-release-7-2.1511.el7.centos.2.10.x86_64(ps:可以使用 rpm -q centos-release 查看)
  • postgresql版本:postgresql96-server-9.6.3-1PGDG.rhel7.x86_64(ps:可以使用 rpm -aq | grep postgres 查看)

配置步骤(ps:postgresql的安装这里就不在阐述,还请各位大佬自行百度)

注: #{xxx} 为你需要填的参数

主库操作步骤


创建角色replica并且设置密码

操作步骤:

1.进入root用户

sudo -i

2.切换到postgres用户

su - postgres

3.登录postgresql

pslq

4.创建角色replic并且设置密码

create role replic login replication encrypted password '#{password}'

5.查看角色是否创建成功

\du

出现以下记录则创建成功:

6.退出数据库

\q

修改postgresql配置文件

1.打开配置文件 pg_hba.conf (ps:寻找配置文件 find / -name pg_hba.conf )

vim /var/lib/pgsql/9.6/data/pg_hba.conf

2.在文件末尾增加以下代码:(ps:参数3为刚刚创建的role,参数4为从库的IP地址和子网掩码)

host    replication     replic            172.17.10.0/24         md5
host    all            replic            172.17.10.0/24         trust

3.保存设置并且退出

4.打开配置文件 postgresql.conf

vim /var/lib/pgsql/9.6/data/postgresql.conf

5.修改以下几个配置项

listen_addresses = '*' #设置所有主机可以访问
wal_level = hot_standby #热备模式
max_wal_senders= 6 #可以设置最多几个流复制链接,差不多有几个从,就设置多少
wal_keep_segments = 10240 #设置流复制保留的最多的xlog数目
wal_send_timeout = 60s
max_connections = 512 #从库的 max_connections要大于主库
archive_mode = on #允许归档
archive_command = 'cp %p /url/path%f' #根据实际情况设置

6.退出并且保存

重启postgres服务

1.执行命令重启postgres

/usr/pgsql-9.6/bin/pg_ctl restart

2.查看postgres是否重启成功

ps -ef | grep postgres

下面图片上的输出说明已经启动:

从库操作步骤


创建文件夹(ps:在这里我将该文件夹命名为data2,可以自行命名)

1.切换到root用户

sudo -i

2.切换到postgres用户

su - postgres

3.创建文件夹 data2

mkdir /var/lib/pgsql/9.6/data2

备份主库的数据到data2文件夹下

1.输入以下指令执行备份

/usr/pgsql-9.6/bin/pg_basebackup -F p --progress -D /var/lib/pgsql/9.6/data2 -h #{ip} -p 5432 -U #{role} --password

注:ip为主库的ip地址,role为上面主库创建的role

出现下图提示表示备份完毕:

2.按住 ctrl+c 退出

复制 recovery.conf 文件到 data2 文件夹下,并且修改文件夹的权限

1.找到recovery.conf.sample文件

find / -name recovery.conf.sample

2.复制文件到data2文件夹下

cp /usr/pgsql-9.6/share/recovery.conf.sample /var/lib/pgsql/9.6/data2/recovery.conf

3.修改data2文件夹的权限(ps:否则postgres启动不了,报错:Permissions should be u=rwx (0700))

chmod -R 0700 /var/lib/pgsql/9.6/data2

修改配置文件 recovery.conf

1.打开配置文件recovery.conf

vim /var/lib/pgsql/9.6/data2/recovery.conf

2.修改下面的配置项

standby_mode = on  # 这个说明这台机器为从库
primary_conninfo = 'host=#{ip} port=5432 user=#{role} password=#{password}' # 这个说明这台机器对应主库的信息
recovery_target_timeline = 'latest' # 这个说明这个流复制同步到最新的数据

注:ip为主库的ip地址,role为上面主库创建的role,password你懂得

3.保存并且退出编辑

修改配置文件 postgresql.conf

1.打开配置文件postgresql.conf

vim /var/lib/pgsql/9.6/data2/postgresql.conf

2.修改以下配置项

max_connections = 1000 # 一般查多于写的应用从库的最大连接数要比较大
hot_standby = on # 说明这台机器不仅仅是用于数据归档,也用于数据查询
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
wal_receiver_status_interval = 1s # 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈

3.保存并突出

启动postgres

1.输入启动命令

/usr/pgsql-9.6/bin/pg_ctl -D /var/lib/pgsql/9.6/data2 start

注意:现在的数据地址变成了data2,并且如果之前已经启动,请将其关闭

2.查看启动是否完成

ps -ef|grep postgres

出现下图的输出说明启动完成:

遇到的问题:

1.启动报错: It occurs when either the system limit for the maximum number of semaphore sets (SEMMNI)

问题分析: max_connections 是指的值超过了操作系统的最大值,因此报错,经过百度找到了解决方案

解决方案:https://my.oschina.net/Kenyon/blog/120355(这里有大神的解决方案)

验证主从配置是否成功(ps:以下操作针对主库)


1.在主库的数据库中执行以下语句

select client_addr,sync_state from pg_stat_replication;

若输出如下,说明成功:

postgresql主从同步配置的更多相关文章

  1. mysql主从同步配置(windows环境)

    mysql主从同步配置(mysql5.5,windows环境)   A主机(作为主服务器)环境:windows8.mysql5.5 ip:192.168.1.100(自己填) B主机(作为从服务器,由 ...

  2. Docker Mysql主从同步配置搭建

    Docker Mysql主从同步配置搭建 建立目录 在虚拟机中建立目录,例如路径/home/mysql/master/data,目录结构如下: Linux中 新建文件夹命令:mkdir 文件夹名 返回 ...

  3. Docker Mysql数据库主从同步配置方法

    一.背景 最近在做内部平台架构上的部署调整,顺便玩了一下数据库的主从同步,特此记录一下操作- 二.具体操作 1.先建立数据存放目录(-/test/mysql_test/) --mysql --mast ...

  4. Linux下MySQL数据库主从同步配置

    说明: 操作系统:CentOS 5.x 64位 MySQL数据库版本:mysql-5.5.35 MySQL主服务器:192.168.21.128 MySQL从服务器:192.168.21.129 准备 ...

  5. DNS 主从同步配置

    DNS 主从同步配置 主从同步:主每次修改配置文件需要修改一下序列号,主从同步主要 看序列号. 从DNS:从是可以单独修改,主从不会报错.但从修改后,主端同步给从后 从端修改数据会丢失 主从原理:从会 ...

  6. Mysql 5.6主从同步配置

    主从同步,本质是利用数据库日志,将主库数据复制一份到从库,本质上是使用了数据复制技术. 本文概要 主库的基本配置 从库的基本配置 完全同步的步骤 注意事项 工作原理 1. 主库的基本配置 做两件事:启 ...

  7. centos:mysql主从同步配置(2018)

    centos:mysql主从同步配置(2018) https://blog.csdn.net/liubo_2016/article/details/82379115 主服务器:10.1.1.144; ...

  8. MySql数据主从同步配置

    由于需要配置MySQL的主从同步配置,现将配置过程记录下,已被以后不时之需 MySql数据主从同步   1.1. 同步介绍 Mysql的 主从同步 是一个异步的复制过程,从一个 Master复制到另一 ...

  9. centos 6.5 中设置mysql 5.1.73 主从同步配置过程

    本文章给大家介绍centos 6.5设置mysql主从同步过程记录,希望文章对各位会带来帮助.  涉及到的centos系统均为虚拟机,VM下安装的版本. 在centos 6.5上设置了mysql主从功 ...

随机推荐

  1. ETCD分布式锁实现选主机制(Golang实现)

    ETCD分布式锁实现选主机制(Golang) 为什么要写这篇文章 做架构的时候,涉及到系统的一个功能,有一个服务必须在指定的节点执行,并且需要有个节点来做任务分发,想了半天,那就搞个主节点做这事呗,所 ...

  2. C 语言跟 C++ 的差异比较

    C++ 完整的 CHM 版离线手册,可以 从这里下载. C++头文件不必是 .h 结尾 C语言中的标准库头文件,例如 math.h 和 stdio.h,在C++中被命名为 cmath 和 cstdio ...

  3. django配置mysql报错 no model named "MySQLdb"

    官网上面连接mysql数据库的参数很少,入了不少坑,一直排错和检查参数都没有问题,只能manage.py mirgrate 更新数据库的信息创建数据库的表. 很是郁闷.报了一大堆的错误,大概意思就是说 ...

  4. mooc-IDEA 快速通过mapper定位到XML

    intellij 快速通过mapper定位到XML 方法一:在线安装Mybatis插件 安装完毕,重启IDEA生效! =>Mapper文件效果 点击向下键头即可定位到XML文件中的具体SQL = ...

  5. JMeter学习笔记16-如何输出HTML格式的性能测试报告

    文本来学习下,如何输入HTML格式的JMeter测试报告.前面已经介绍, 如果要做性能测试,需要在GUI上设计好你的Test Plan,设置各种场景和负载值,包括多少个线程,多少个用户,循环多少次.设 ...

  6. CentOS7 修复grub.cfg文件

    为了达到实验目的,首先删除grub.cfg文件 重启后发现系统进不去了,这正是我们想要的 进入系统救援模式,通过输入以下命令修复grub.cfg文件 重启后发现能正常引导进入系统了

  7. [BZOJ 2199] [USACO11JAN] 大陆议会The Continental Cowngress(2-SAT)

    [BZOJ 2199] [USACO11JAN] 大陆议会The Continental Cowngress(2-SAT) 题面 题面较长,略 分析 考虑把问题转化成一个依赖性问题 我们把每只奶牛投出 ...

  8. EOJ Monthly 2019.2 A. 回收卫星

    题目传送门 题意: 你可以询问一个三维坐标,机器会告诉你这个坐标在不在目标圆中, 并且(0,0,0)是一定在圆上的,叫你求出圆心坐标 思路: 因为(0,0,0)一定在圆上,所以我们可以把圆心分成3个坐 ...

  9. 修改url,

    第一种场景: 无论url怎么变,表单里面的url始终不变 http://127.0.0.1:8000/CC/indexssssssssssssssssss/ url(r'^indexsssssssss ...

  10. python 安装opencv及问题解决

    正常安装模式 pip install opencv-python==3.4.5.20 pip install opencv-contrib-python==3.4.5.20 -i http://pyp ...