Postgre SQL   发布时间:2022-05-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了postgresql数据库跨机冷迁移及问题处理大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

环境:

数据库版本:@H_197_6@POSTGResql 9.5

操作系统@H_197_6@A:@H_197_6@linux @H_197_6@4@H_197_6@

操作系统@H_197_6@B:@H_197_6@linux @H_197_6@ 5.8

@H_197_6@

操作内容:

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

步骤:

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

1、停源端服务@H_197_6@

首先关闭@H_197_6@A中的@H_197_6@POSTGResql@H_197_6@服务@H_197_6@

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

2、压缩@H_197_6@PGHOME @H_197_6@和@H_197_6@PGDATA@H_197_6@

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

[root@Amdocs1 app]# tar zcvf appBACkup.tar.gz /app/POSTGResql/pg951

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

3、复制至目标端@H_197_6@

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

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

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

4、复制类库@H_197_6@

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

#cd /usr/lib64

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

二、目标端服务器操作

1、@R_246_10589@@H_197_6@

在服务器@H_197_6@B上创建@H_197_6@POSTGRes@H_197_6@用户@H_197_6@

#useradd POSTGRes

2、设置用户环境变量@H_197_6@

登录@H_197_6@POSTGRes用户配置环境变量 @H_197_6@

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

3、压缩包解压@H_197_6@

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

#tar zxvf appBACkup.tar.gz

#tar zxvf dataBACkup.tar.gz

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

4、@H_197_6@PG@H_197_6@启动服务@H_197_6@

[POSTGRes@lsrac97 ~]$#pg_ctl start

[POSTGRes@lsrac97 ~]$ psql

psql (9.5.1)

Type "Help" for Help.

POSTGRes=#

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

附录:

一、报错处理

1、@H_197_6@PG启动服务报错@H_197_6@

[POSTGRes@lsrac97 ~]$#pg_ctl start


pg_ctl:error while loading shared libraIEs:libreadline.so.4:cAnnot open share.....

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

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

#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=#

成功启动服务

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

1、@H_197_6@PYTHON@H_197_6@语言@H_197_6@扩展@H_197_6@

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

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

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

copy过来之后重新编译函数 报错@H_197_6@

Could not find platform independent librarIEs <prefix>
Could not find platform dependent librarIEs <exec_prefix>
ConsIDer setTing $PYTHONHOME to <prefix>[:<exec_prefix>]

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


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

解决方法:@H_197_6@ 重装@H_197_6@目标@H_197_6@B服务器 @H_197_6@python@H_197_6@和@H_197_6@PL/python@H_197_6@插件@H_197_6@

重装@H_197_6@python:

在官网上下载了@H_197_6@python2.7.12

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

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

进入目录编译安装@H_197_6@

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

#make

#make install

---完成。@H_197_6@

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

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


重装@H_197_6@plpythonu

1、删除原有@H_197_6@plpythonu@H_197_6@扩展@H_197_6@

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


然后

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

把@H_197_6@ plpython2.so 文件给删除@H_197_6@

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

2、下载安装@H_197_6@plpythonu@H_197_6@扩展@H_197_6@

下载@H_197_6@POSTGResql源码包 @H_197_6@

地址:@H_197_6@https://www.POSTGResql.org/download/@H_197_6@

解压后进入与源码目录@H_197_6@

[root@lsrac97 app]# cd POSTGResql-9.5.1

编译:@H_197_6@

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

#make

[root@lsrac97 app]# cd POSTGResql-9.5.1/src/PL/plpython/

#make install

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

# create extension plpythonu;

最后成功编译@H_197_6@plpython函数@H_197_6@



Oracle_fDW扩展修复@H_197_6@

由于@H_197_6@Oracle_fDW使用了@H_197_6@Oracle@H_197_6@的动态库 ,而在服务器@H_197_6@A@H_197_6@中@H_197_6@OracLE@H_197_6@的版本是@H_197_6@10G@H_197_6@的服务器@H_197_6@B@H_197_6@中的@H_197_6@OracLE@H_197_6@版本是@H_197_6@11g@H_197_6@的所以在使用的时候后有以下错误@H_197_6@

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

这个时候到服务器@H_197_6@B的@H_197_6@OracLE_HOME/lib@H_197_6@目录下把@H_197_6@libclntsh.so.11.1拷贝到@H_197_6@PGHOME/lib目录下面并将@H_197_6@libclntsh.so.11.1属主@H_197_6@chown为@H_197_6@POSTGRes@H_197_6@

修复后查询外部表@H_197_6@

POSTGRes=# SELEct * from PGTEST;

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

DETAIL:

此时检查@H_197_6@POSTGRes用户环境变量里面有没有配有@H_197_6@Oracle@H_197_6@的环境变量@H_197_6@

检查发现已配置。@H_197_6@

后将@H_197_6@POSTGRes用户所属组改为和@H_197_6@Oracle@H_197_6@同组@H_197_6@oinstall@H_197_6@即可@H_197_6@

[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)

登录查询外部表即可@H_197_6@

大佬总结

以上是大佬教程为你收集整理的postgresql数据库跨机冷迁移及问题处理全部内容,希望文章能够帮你解决postgresql数据库跨机冷迁移及问题处理所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: