postgresql数据库跨机冷迁移及问题处理
环境: 数据库版本:postgresql 9.5 操作系统A:linux 4 操作系统B:linux 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.4至OS层的/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 注意相关文件用户权限与源端保持一致 4、PG启动服务 [postgres@lsrac97 ~]$#pg_ctl start [postgres@lsrac97 ~]$ psql psql (9.5.1) Type "help" for help. postgres=# 成功启动服务,至此常规PG9.5迁移完成。 附录: 一、报错处理 1、PG启动服务报错 [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扩展的处理(可选) 1、PYTHON语言扩展 迁过来之后编译数据库中的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> 并且提示找不到相关python模块 此时服务器A上面的python是2.3.4的服务器B的版本是2.7.10的 编译plpython插件的时候使用的是2.3.4移到2.7.10可能因为版本不同出现问题 解决方法: 重装目标B服务器 python和pl/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的动态库 ,而在服务器A中ORACLE的版本是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 这个时候到服务器B的ORACLE_HOME/lib目录下把libclntsh.so.11.1拷贝到PGHOME/lib目录下面并将libclntsh.so.11.1属主chown为postgres 修复后查询外部表 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) 登录查询外部表即可 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |