怎么在码头工人环境中对PostgreSQL进行升级

  介绍

这篇文章将为大家详细讲解有关怎么在码头工人环境中对PostgreSQL进行升级,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

步骤:

<李>

_upgrade需要用到新旧容器的本跟数据,所以首先将旧数据库容器的本还有数据文件复制到服务器;

<李>

开启一个PG13的容器,这个是后面用于服务的正式容器(下文称为正式容器),然后另外开启一个临时容器(下文称为临时容器)用于升级数据文件,将这两个容器的数据库目录映射到同一个目录;

<李>

PG13的容器内部会缺少很多PG10的运行库,所以需要从旧容器中复制到临时容器里;

<李>

临时容器将数据升级后,由于跟正式容器的数据文件目录映射到了同一个目录,所以数据可以正常使用,于跟正式容器的数据文件目录映射到了同一个目录,所以数据可以正常使用;

首先自然是拉取一个PG13的镜像,然后放好别动:

docker  pull  postgres: 13.1

创建升级目录:

#创建备份目录   mkdir /db_update/new_data      cd /db_update      #将旧数据库容器的本跟数据复制出来   docker  cp  pgdb:/usr/local  old_bin   docker  cp  pgdb:/usr/local  old_share   docker  cp  pgdb:/var/lib/postgresql/data  old_data      #授权   chmod  -R  777年,/db_update old_data

此时目录结构应该是这样的:

怎么在码头工人环境中对PostgreSQL进行升级

#新建一个正式容器,并映射数据目录,初始化完成后ctrl + c 退出   ,docker  run  - name=皃g13_new", -v “/db_update/new_data:/var/lib/postgresql/数据/pgdata", -e  POSTGRES_USER=dbuser  -e  POSTGRES_PASSWORD=123456, -e  PGDATA=/var/lib/postgresql/数据/pgdata  postgres: 13.1      ,#新建一个临时容器,用于升级数据,映射PG10的本跟数据目录,容器内的数据跟正式容器映射到同一个目录   ,docker  run  -dti  - name=皌mp", -v  $ (pwd)/old_bin:/usr/lib/postgresql/10, -v  $ (pwd)/old_share:/usr/share/postgresql/10, -v  (pwd)/new_data:美元/数据/new_data  -v  (pwd)/old_data:美元/数据/old_data  -e  PGDATA:/数据/new_data ——特权=true  postgres: 13.1,/bin/bash

容器创建完毕先放着,接下来做别的操作。在PG13内会缺失不少PG10所需运行文件(血泪教训),可以从旧容器将相关文件复制过来。

#将旧容器的文件复制到本机   docker  cp  pgdb:/usr/lib /old_lib   docker  cp  pgdb:/lib /old_lib2

此时的目录结构:

怎么在码头工人环境中对PostgreSQL进行升级

#将文件复制到升级容器   docker  cp /old_lib  tmp:/old_lib   docker  cp /old_lib2  tmp:/old_lib2      #将文件复制到对应目录   docker  exec  -it  tmp /bin/bash   cp /old_lib/*,/usr/lib/x86_64-linux-gnu/cp /old_lib/*,/usr/lib   cp /old_lib2/*,/lib

将文件复制完毕后即可以尝试升级数据库,不过仍有可能出现缺少运行库的问题,同时也会有权限的问题,下面会展示如何解决这两个问题。

#切换数据库用户   su  postgres      #检查是否可以升级,一连串的好即表示可以执行数据库文件的升级/usr/lib/postgresql/13/bin/pg_upgrade  -b /usr/lib/postgresql/10/bin  -b /usr/lib/postgresql/13/bin  -d /数据/old_data  -d /数据/new_data  -U  dbuser  -p  5433年,-p  5434年,- c

如果出现下图的提示,那就是权限问题,授权一下即可解决。

怎么在码头工人环境中对postgresql进行升级

解决方法:

#在根用户下执行   chown  -R  postgres/数据/old_data      如果之后包权限错误,需权限,0700,则再执行   chmod  -R  0700年,/数据/old_data

再次执行检查升级命令,错误也再次出现:

怎么在码头工人环境中对PostgreSQL进行升级

怎么在码头工人环境中对PostgreSQL进行升级