docker中postgres之版本升级(9.5->12.5)

docker中postgres之版本升级(9.5->12.5)

升级要点

  1. pg_upgrade

数据准备

# pg_old_data: 历史postgres数据库映射的外部路径
# postgres_old_container: 历史postgres数据库的镜像名称
mkdir old_data 
docker cp postgres_old_container:/usr/lib/postgresql/9.5 ./old_data
cp -rf pg_old_data ./old_data
docker cp postgres_old_container:/usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 ./old_data
docker cp postgres_old_container:/usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 ./old_data
docker cp postgres_old_container:/usr/share/postgresql/9.5/timezonesets ./old_data

数据库升级

创建新版本数据库容器(pg-new-db)

使用docker-compose.yml,初始化一个12.5版本的数据库容器,得到初始化目录pg_data_new后关闭容器

version: '2'
services:
  db:
    image: postgres:12.5
    container_name: pg-new-db
    volumes:
     - ./pg_data_new:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: "123456"
      SESSION_SECRET: 'true'
    restart: always
# 启动容器
docker-compose up -d
docker-compose ps
# 确认前两步正常;关闭容器
docker-compose down

构建临时更新容器(tmp-pg),用于临时更新数据库

  • 启动容器,启动容器后自动进入了tmp-pg容器内部
docker run -it --rm --name="tmp_pg" -e "POSTGRES_USER=postgres" -v $(pwd)/old_data:/var/lib/postgresql/old_data -v $(pwd)/pg_data_new:/var/lib/postgresql/data postgres:12.5 bash
  • 补充缺失执行更新命令时pg9.5缺失的库及文件
mkdir -p /usr/share/postgresql/9.5/
cp -rf /var/lib/postgresql/old_data/timezonesets /usr/share/postgresql/9.5
cp -rf /var/lib/postgresql/old_data/libcrypto.so.1.0.0 /usr/lib/x86_64-linux-gnu/
cp -rf /var/lib/postgresql/old_data/libssl.so.1.0.0 /usr/lib/x86_64-linux-gnu/
  • 重新将/var/lib/postgresql目录归于postgres用户,保证postgres

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值