postgresql+slony-i安装配置主从
slon软件下载地址:
slony1-1.2.6
http://slony.info/downloads/1.2/source/
postgresql下载地址:
http://www.postgresql.org/download/
http://www.postgresql.org/ftp/source/v8.1.23/
一、postgresql安装
方法1.rpm包安装postfresql:
所需软件包:
postgresql92-9.2.10-1PGDG.rhel5.i386.rpm
postgresql92-server-9.2.10-1PGDG.rhel5.i386.rpm
postgresql92-contrib-9.2.10-1PGDG.rhel5.i386.rpm
postgresql92-devel-9.2.10-1PGDG.rhel5.i386.rpm
postgresql92-libs-9.2.10-1PGDG.rhel5.i386.rpm
uuid-1.5.1-3.el5.i386.rpm
硬件IP:192.168.30.121(主)
192.168.20.122(从)
主、从服务器安装方法相同:
1,linux创建postgres用户及用户组
groupadd postgres
useradd -g postgres postgres
2.安装包安装顺序:
rpm -ivh postgresql92-libs-9.2.10-1PGDG.rhel5.i386.rpm
rpm -ivh postgresql92-9.2.10-1PGDG.rhel5.i386.rpm
rpm -ivh uuid-1.5.1-3.el5.i386.rpm #安装contrib所依赖包
rpm -ivh postgresql92-devel-9.2.10-1PGDG.rhel5.i386.rpm #主从同步所依赖包
rpm -ivh postgresql92-server-9.2.10-1PGDG.rhel5.i386.rpm
rpm -ivh postgresql92-contrib-9.2.10-1PGDG.rhel5.i386.rpm
3.初始化PostgreSQL 数据库:
service postgresql-9.2 initdb
4.启动
service postgresql-9.2 start
5.把PostgreSQL 服务加入到启动列表
chkconfig postgresql-9.2 on
chkconfig --list|grep postgres
方法2.源码安装:
1,linux创建postgres用户及用户组
groupadd postgres
useradd -g postgres postgres
2,解压压缩包
[root@postgres]# tar -xzvf /var/local/pgsql/postgresql-9.2.10.tar.gz
进入解压目录: cd /var/local/pgsql/postgresql-9.2.10
3,编译安装:
创建安装目录和数据目录
mkdir /usr/local/pgsql
mkdir /home/postgres/data
[root@postgres postgresql-9.2.10]# ./configure --prefix=/usr/local/pgsql -localstatedir=/home/postgres/data
处理报错信息:
checking for readline... no
configure: error: readline library not found
If you have readline already installed, see config.log for details on the
failure. It is possible the compiler isn't looking in the proper directory.
Use --without-readline to disable readline support.
解决:
缺少readline-devel依赖包
安装 readline-devel包
我这里选择的是yum安装,大家可以去网上下载一个适合自己的版本去安装
yum install readline-devel-5.1-3.el5
安装完毕后重新编译即可
重新编译:
[root@postgres postgresql-9.2.10]# ./configure --prefix=/usr/local/pgsql -localstatedir=/home/postgres/data
没有error即编译正常可以安装
[root@postgres postgresql-9.2.10]# make
All of PostgreSQL successfully made. Ready to install.
[root@postgres postgresql-9.2.10]# make install
PostgreSQL installation complete.
4.安装完毕修改数据目录权限
chown -R postgres:postgres /usr/local/pgsql/
chown -R postgres:postgres /home/postgres/data/
修改postgres用户的.bash_profile文件:
[postgres@postgres ~]$ vi .bash_profile
添加:
PGLIB=/usr/local/pgsql/lib
PGDATA=/home/postgres/data
PATH=$PATH:/usr/local/pgsql/bin
MANPATH=$MANPATH:/usr/local/pgsql/man
export PGLIB PGDATA PATH MANPATH
[postgres@postgres ~]$ source .bash_profile
5.初始postgresql并启动postgresql
初始化:
[postgres@postgres ~]$ /usr/local/pgsql/bin/initdb /home/postgres/data
Success. You can now start the database server using:
/usr/local/pgsql/bin/postmaster -D /home/postgres/data
or
/usr/local/pgsql/bin/pg_ctl -D /home/postgres/data -l logfile start
启动:
[postgres@postgres ~]$ /usr/local/pgsql/bin/pg_ctl -D /home/postgres/data start
============================================================================================
从库安装方式和主库postgresql安装一样
============================================================================================
二,编译安装slony-i
1、解压软件包:
[root@postgres local]# tar -xjvf /var/local/slony1-1.2.6.tar.bz2
2、编译安装软件包
[root@postgres ~]# cd /var/local/slony1-1.2.6
[root@postgres slony1-1.2.6]# ./configure --with-pgsourcetree=/usr/local/pgsql/bin
[root@postgres slony1-1.2.6]# make
All of Slony-I is successfully made. Ready to install
[root@postgres slony1-1.2.6]# make install
All of Slony-I is successfully installed
============================================================================================
在主库从库均要安装slony,安装方式同上
====================================================================================
三,主从配置
1.postgresql添加复制用户
su - postgres 用户下
[postgres@mysql ~]$ psql
psql (9.2.10)
Type "help" for help.
postgres=#create role repl password '123456' login superuser replication;
主从都执行此语句
2.postgresql配置文件
postgresql.conf
主从都改:
vi /home/postgres/data/postgresql.conf
添加: listen_addresses = '*'
主库pg_hba.conf
vi /home/postgres/data/pg_hba.conf
添加:
host all repl 192.168.30.122/32 md5
从库pg_hba.conf
vi /home/postgres/data/pg_hba.conf
添加:
host all repl 192.168.30.121/32 md5
修改配置后重启主从服务器都重启postgresql服务:
[postgres@localhost ~]$/usr/local/pgsql/bin/pg_ctl -D /home/postgres/data restart
3.建立测试数据库和测试表
主从库均需要创建数据库和表,slony不能同步DDL语句。
以下以在主数据库服务器上建立主数据库和数据表 test 为例见解,其他数据库和数据表请参考建立.
/usr/local/pgsql/bin/createdb test
cat sql.txt |psql -Urepl test -W123456
sql.txt 文件最好是 UTF-8 格式,特别是存在中文字符时) 例:sql.txt
CREATE TABLE tb_depart(Id int primary key,Name char(8));
在从数据库服务器上建立与主数据库服务器上相同的数据库test
创建后查看:
[postgres@postgres ~]$ psql -Urepl test
test=# \d
List of relations
Schema | Name | Type | Owner
--------+-----------+-------+--------
public | tb_depart | table | repl
(1 row)
test=# \d tb_depart;
Table "public.tb_depart"
Column | Type | Modifiers
--------+--------------+-----------
id | integer | not null
name | character(8) |
Indexes:
"tb_depart_pkey" PRIMARY KEY, btree (id)
test=#\q
在从数据库服务器上建立与主数据库服务器上相同的数据库test,同样的表
4.slony-i配置主从同步
只需要在从库配置只需即可:
在/home/postgres/目录下创建脚本文件:
slony_0.sh文件内容如下:
#!/bin/sh
/usr/local/pgsql/bin/slonik << _END_
#
# Define cluster namespace and node connection information #
#集群名称
cluster name = testdb;
# 定义复制节点
node 1 admin conninfo = 'dbname=test host=192.168.30.121 port=5432 user=repl';
node 2 admin conninfo = 'dbname=test host=localhost port=5432 user=repl';
DROP SET (id=1, origin=1);
uninstall node (id=1);
uninstall node (id=2);
echo 'Drop testdb set';
_END_
slony_1.sh文件内容如下:
#!/bin/sh
/usr/local/pgsql/bin/slonik << _END_
cluster name = testdb;
# 定义复制节点
node 1 admin conninfo = 'dbname=test host=192.168.30.121 port=5432 user=repl';
node 2 admin conninfo = 'dbname=test host=localhost port=5432 user=repl';
echo 'Cluster defined, nodes identified';
# 初始化集群,id从1开始
init cluster (id=1, comment='Master Node');
# 设置存储节点
store node (id=2, comment='Slave Node');
echo 'Nodes defined';
# 设置存储路径
store path (server=1, client=2, conninfo='dbname=test host=192.168.30.121 port=5432 user=repl');
store path (server=2, client=1, conninfo='dbname=test host=localhost port=5432 user=repl');
#设置侦听事件和订阅方向,复制中角色,主节点是原始提供者,从节点是接受者
store listen (origin=1, provider = 1, receiver =2);
store listen (origin=2, provider = 2, receiver =1);
_END_
slony_2.sh文件内容如下:
#!/bin/sh
/usr/local/pgsql/bin/slonik << _END_ #
# Define cluster namespace and node connection information #
cluster name = testdb;
node 1 admin conninfo = 'dbname=test host=192.168.30.121 port=5432 user=repl';
node 2 admin conninfo = 'dbname=test host=localhost port=5432 user=repl';
# 设置参与同步的数据表
#先创建一个复制集,id也是从1开始
#向自己的复制集种添加表,每个需要复制的表一条set命令
#id从1开始,逐次递加,步进为1;
#fully qualified name是表的全称:模式名.表名
#这里的复制集id需要和前面创建的复制集id一致
#假如某个表没有主键,但是有唯一键字,那么可以用key关键字
#指定其为复制键字,如下面的key参数
#set add table ( set id = 1, origin = 1,id = 4, fully qualified name = 'public.history',key = "column",comment = 'Table history' );
#对于没有唯一列的表,需要这样处理,这一句放在 create set 的前面
#table add key (node id = 1, fully qualified name = 'public.history');
# 这样设置结果集
#set add table (set id=1, origin=1, id=4, fully qualified name = 'public.history', #comment='history table', key = serial);
create set (id=1, origin=1, comment='testdb tables');
set add table ( set id=1, origin=1,id=1, fully qualified name='public.tb_depart',comment='Table tb_depart' );
set add table ( set id=1, origin=1,id=2, fully qualified name='public.tb_user',comment='Table tb_user' );
set add table ( set id=1, origin=1,id=3, fully qualified name='public.tb_manager',comment='Table tb_manager' );
set add table ( set id=1, origin=1,id=4, fully qualified name='public.tb_test',comment='Table tb_test' );
echo 'set 1 of testdb tables created';
_END_
slony_3.sh文件内容如下:
#/bin/sh
/usr/local/pgsql/bin/slon testdb "dbname=test host=192.168.30.121 port=5432 user=repl" > ~/slon_gb_1.out 2>&1 &
/usr/local/pgsql/bin/slon testdb "dbname=test host=localhost port=5432 user=repl" > ~/slon_gb_2.out 2>&1 &
/usr/local/pgsql/bin/slonik << _END_
# Define cluster namespace and node connection information #
cluster name = testdb; #提供连接参数
node 1 admin conninfo = 'dbname=test host=192.168.30.121 port=5432 user=repl';
node 2 admin conninfo = 'dbname=test host=localhost port=5432 user=repl';
# 提交订阅复制集
subscribe set (id=1, provider=1, receiver=2, forward=no);
echo 'set 1 of gb tables subscribed by node 2';
_END_
[postgres@mysql2 cluster_shells]$ chmod u+x slony_*.sh
slony_main.sh文件内容如下:
#!/bin/sh
case $1 in
start)
cd /home/postgres/
sh slony_3.sh
;;
stop)
killall -KILL slon
;;
rebuild)
cd /home/postgres
killall -KILL slon
sh slony_0.sh >> /dev/null 2>&1
sh slony_1.sh
sh slony_2.sh
sh slony_3.sh
;;
*)
echo "Please input start or stop or rebuild!!"
;;
esac
[postgres@mysql2 cluster_shells]$ chmod u+x slony_main.sh
测试同步:
在从库端执行:
按照下面执行顺序
./slony_0.sh
./slony_1.sh
<stdin>:5: Cluster defined, nodes identified
<stdin>:10: Nodes defined
./slony_2.sh
<stdin>:8: set 1 of testdb tables created
./slony_3.sh
<stdin>:7: set 1 of gb tables subscribed by node 2
修改数据前:
主库端:
[postgres@postgres ~]$ psql test
test=# \d
List of relations
Schema | Name | Type | Owner
--------+-----------+-------+--------
public | tb_depart | table | repl
(1 row)
test=# \d tb_depart
Table "public.tb_depart"
Column | Type | Modifiers
--------+--------------+-----------
id | integer | not null
name | character(8) |
Indexes:
"tb_depart_pkey" PRIMARY KEY, btree (id)
Triggers:
_testdb_logtrigger_1 AFTER INSERT OR DELETE OR UPDATE ON tb_depart FOR EACH ROW EXECUTE PROCEDURE _testdb.logtrigger('_testdb', '1', 'kv')
已创建触发器,用于同步。
暂时无数据;
test=# select * from tb_depart;
id | name
----+------
(0 rows)
备库端:
[postgres@mysql2 ~]$ psql test
Welcome to psql 8.1.23, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
test=# \d
List of relations
Schema | Name | Type | Owner
--------+-----------+-------+--------
public | tb_depart | table | repl
(1 row)
test=# \d tb_depart
Table "public.tb_depart"
Column | Type | Modifiers
--------+--------------+-----------
id | integer | not null
name | character(8) |
Indexes:
"tb_depart_pkey" PRIMARY KEY, btree (id)
Triggers:
_testdb_denyaccess_1 BEFORE INSERT OR DELETE OR UPDATE ON tb_depart FOR EACH ROW EXECUTE PROCEDURE _testdb.denyaccess('_testdb')
slony创建了触发器---双向同步;
暂时无数据
test=# select * from tb_depart;
id | name
----+------
(0 rows)
test=#
主库端添加数据:
test=# insert into tb_depart values(1,'aaa');
INSERT 0 1
test=# select * from tb_depart;
id | name
----+----------
1 | aaa
(1 row)
test=#
备库端查看:
test=# select * from tb_depart;
id | name
----+----------
1 | aaa
(1 row)
同步成功。
postgresql+slony-i安装配置主从的更多相关文章
- PostgreSQL CentOS 7 安装配置
https://www.postgresql.org/download/ 选择相应的版本 安装完成后,稍微配置下,否则无法远程访问: cd /var/lib/pgsql/11/data vi post ...
- [原创]mysql 5.6安装配置,主从分离,读写分离简单教程
文章中参考使用了多个博客的资料,汇总而成!其流程准确性被人亦本人实践! https://blog.csdn.net/qq_35206261/article/details/81321201 https ...
- redis:安装配置主从
1.安装依赖包 yum install gcc gcc-c++ -y 2.下载安装包,解压 cd /usr/local/src/wget http://download.redis.io/releas ...
- DNS安装配置主从
准备环境 关闭防火墙 挂载一下 更改配置文件 安装dns服务 更改配置文件 先复制保存一份
- Linux下apache+phppgadmin+postgresql安装配置
Linux下apache+phppgadmin+postgresql安装配置 操作系统:CentOS 安装包:httpd(首选yum), php(包括php以及php-pgsql,php-mbstri ...
- postgresql安装配置
一,什么是postgresql PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES 版本 4.2 为基础的对象关系型数据库管理系统(ORDBMS),简称pgsql,它支持大部分 ...
- DNS服务器:主要介绍DNS的服务原理以及安装及其主从配置
DNS服务器:主要介绍DNS的服务原理以及安装及其主从配置 一.DNS简介 1.DNS DNS是域名系统(Domain Name System)的简称,它是一个将域名和IP相互映射的分布式数据库 ...
- Centos 7.3 安装配置 PostgreSQL 9.x
一.安装 PostgresSQL Centos 7 自带的 PostgresSQL 是 9.2 版的.因为,yum 已经做了国内源,速度飞快,所以直接就用 yum 安装了.依次执行以下命令即可,非常简 ...
- centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更新 第三十节课
centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更 ...
随机推荐
- 8、SQL Server 表分区
什么是表分区?表分区其实就是将一个大表分成若干个小表.表分区可以从物理上将一个大表分成几个小表,但是逻辑上还是一个表.所以当执行插入.更新等操作的时候,不需要我们去判断应该插入或更新到哪个表中.只需要 ...
- vs2008注册组件
开始—运行 输入 regsvr32+路径
- mysql自动添加最后修改时间
字段不为空 NOT NULL 类型 :timestamp 默认值 :CURRENT_TIMESTAMP
- VUE 入门笔记
前端的MVVM概念今年来也算是如火如荼,了解完 MVVM的概念,也该找个去尝试下 首先我先试了下 国内小而美的 VUE 试着照着文档敲出入门文件,内容都在注释里 <!doctype html&g ...
- css之z-index
要想z-index可以使用,就要配合定位元素使用即position 如果定位元素z-index没有发生嵌套: 1.后来居上的准则 2.哪个大,哪个上 例如 如果定位元素z-index发生嵌套: 1.祖 ...
- Node入门(转)
原文链接:http://www.nodebeginner.org/index-zh-cn.html Node入门 作者: Manuel Kiessling翻译: goddyzhao & Gra ...
- javascript之数组操作
1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...
- Unity 几种优化建议
转: http://user.qzone.qq.com/289422269/blog/1453815561?ptlang=2052 Unity 几种优化建议 最简单的优化建议: 1.PC平台的话保持场 ...
- IOS--UIAlertView造成屏幕闪烁
在异步操作中,如果直接Show一个UIAlertView可能会造成屏幕闪烁(目前在iPhone5上发现),解决办法如下: UIAlertView *alert = [[UIAlertView allo ...
- 邮箱验证 各种邮箱的smtp
常见邮箱的SMTP设置 QQ 邮箱举例:(地址test@qq.com)(账号test)(密码***)(SMTP服务smtp.qq.com)(端口25)(注意:请手动开通SMTP功能,通过网页登录qq邮 ...