docker中postgres之版本升级(9.5->12.5)
升级要点
- 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