postgresql数据库跨机冷迁移及问题处理

前端之家收集整理的这篇文章主要介绍了postgresql数据库跨机冷迁移及问题处理前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

环境:

数据库版本:postgresql 9.5

操作系统Alinux 4

操作系统Blinux 5.8

操作内容

将部署在服务器A*.*.201.210)上的PG9.5软件及数据库数据,迁移到服务器B*.*.188.197)的相同目录。

步骤:

一、源端PG软件及数据库处理

1、停源端服务

首先关闭A中的postgresql服务

[postgres@Amdocs1 ~]$ pg_ctl stop -m fast

2、压缩PGHOME PGDATA

关闭服务器之后返回root目录直接将PGHOME(软件) 和PGDATA数据库)进行压缩

[root@Amdocs1 app]# tar zcvf appbackup.tar.gz /app/postgresql/pg951

[root@Amdocs1 app]# tar zcvf databackup.tar.gz /app/pgdata/pg951date

3、复制至目标端

将两个压缩包上传到服务器B上即可:

[root@Amdocs1 app]# scp appbackup.tar.gz root@*.*..188.197:/xxxx

[root@Amdocs1 app]# scp databackup.tar.gz root@*.*..188.197:/xxxx

4、复制类库

PG源码安装时会编译类库libreadline.so.4OS层的/usr/lib64(注意区分32位或64),直接复制安装时需要复制此类库,否则数据库无法启动见后报错处理部分

#cd /usr/lib64

#scplibreadline.so.4.3libreadline.so.4root@*.*.188.197:/usr/lib64/

二、目标端服务器操作

1、创建用户

在服务器B上创建postgres用户

#useradd postgres

2、设置用户环境变量

登录postgres用户配置环境变量

#vi .bash_profile 内容配成和服务器A一样,注意路径)

3、压缩包解压

将两个压缩包解压(注意目录结构与源服务器相同)

#tar zxvf appbackup.tar.gz

#tar zxvf databackup.tar.gz

注意相关文件用户权限与源端保持一致

4PG启动服务

[postgres@lsrac97 ~]$#pg_ctl start

[postgres@lsrac97 ~]$ psql

psql (9.5.1)

Type "help" for help.

postgres=#

成功启动服务,至此常规PG9.5迁移完成。

附录:

一、报错处理

1PG启动服务报错

[postgres@lsrac97 ~]$#pg_ctl start


Pg_ctl:error while loading shared libraies:libreadline.so.4:cannot open share.....

缺少PG类库在PG源码安装时,编译至OS层的/usr/lib64,注意区分32位或64位。

解决方法:服务器A中把这个有问题的文件直接复制过来即可

#scplibreadline.so.4.3libreadline.so.4root@172.19.188.197:/usr/lib64/

#pg_ctl start

[postgres@lsrac97 ~]$ psql

psql (9.5.1)

Type "help" for help.

postgres=#

成功启动服务

二、PYTHON扩展的处理(可选)

1PYTHON语言扩展

迁过来之后编译数据库中的plpython函数发现plpython函数无法使用报错

ERROR: could not load library "/app/postgresql/pg951/lib/plpython2.so": libpython2.3.so.1.0: 无法打开共享对象文件: 没有那个文件或目录

解决方法:将服务器A中的libpython2.3.so.1.0 cp到服务器B对应目录当中

Copy过来之后重新编译函数 报错

Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]

并且提示找不到相关python模块


此时服务器A上面的python2.3.4的服务器B的版本是2.7.10的 编译plpython插件的时候使用的是2.3.4移到2.7.10可能因为版本不同出现问题

解决方法 重装目标B服务器 pythonpl/python插件

重装python:

在官网上下载了python2.7.12

地址:https://www.python.org/getit/

将安装包上传到服务器B中并解压 解压后会生成目录Python-2.7.12

进入目录编译安装

#./comfigure --prefix=/opt/python2.7.12 --enable-shared#注意这个参数一定要带

#make

#make install

---完成。

如果在编译postgresql源码包 ./configure --prefix=xxxxx --with-python时候报错如下的时候则必须要重装python,否则不用重装,报错如下:

Error:cannot build pl/python because libpython is not a shared library(原因是python安装编译时候没有带参数--enable-shared这个参数是./configure的一个参数表示启用动态库版)


重装plpythonu

1删除原有plpythonu扩展

接着登录pgadmin直接把这个扩展给删除


然后

[root@lsrac97 plpython]# cd /app/postgresql/pg951/lib

plpython2.so 文件删除

做完这几步操作之后进入plpython源码目录

2、下载安装plpythonu扩展

下载postgresql源码包

地址:https://www.postgresql.org/download/

解压后进入与源码目录

[root@lsrac97 app]# cd postgresql-9.5.1

编译:

#./configure --prefix=/app/postgresql/pg951 --with-python

#make

[root@lsrac97 app]# cd postgresql-9.5.1/src/pl/plpython/

#make install

然后psql登录数据库创建扩展

# create extension plpythonu;

最后成功编译plpython函数



oracle_fdw扩展修复

由于oracle_fdw使用了oracle的动态库 ,而在服务器AORACLE的版本是10G的服务器B中的ORACLE版本是11g的所以在使用的时候后有以下错误

ERROR: could not load library "/app/postgresql/lib/oracle_fdw.so": libclntsh.so.11.1: cannot open shared object file: No such file or directory

这个时候到服务器BORACLE_HOME/lib目录下把libclntsh.so.11.1拷贝到PGHOME/lib目录下面并将libclntsh.so.11.1属主chownpostgres

修复后查询外部表

postgres=# select * from PGTEST;

ERROR: error connecting to Oracle: OCIEnvCreate Failed to create environment handle

DETAIL:

此时检查postgres用户环境变量里面有没有配有oracle的环境变量

检查发现已配置。

后将postgres用户所属组改为和oracle同组oinstall即可

[postgres@lsrac97 ~]$ id

uid=54326(postgres) gid=26(postgres) groups=26(postgres)

[root@lsrac97 ~]# usermod -g oinstall postgres

[root@lsrac97 ~]# su - postgres

[postgres@lsrac97 ~]$ id

uid=54326(postgres) gid=54321(oinstall) groups=54321(oinstall)

登录查询外部表即可

猜你在找的Postgre SQL相关文章