大佬教程收集整理的这篇文章主要介绍了postgresql数据库跨机冷迁移及问题处理,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
环境:
操作系统@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@
二、目标端服务器操作
在服务器@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)
POSTGRes=#
成功启动服务,至此常规@H_197_6@PG9.5迁移完成。@H_197_6@@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)
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@
由于@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,请注明来意。