PostgreSQL升级
文档:
升级方式:
pg_dumpall
将数据库转储成一个脚本文件,然后在新版数据库中可以直接导入。这种方式操作简单,跟着官方文档就能轻松操作,但是明显只适用于数据量较少的情况pg_upgrade
这种方式是直接将数据文件升级到高版本
首先拉取一个 PG13 的镜像,然后放好别动:
准备旧数据:
# 拷贝
mkdir /data/ssd/pg13
mv /data/ssd/gitlab-ee/pg-data /data/ssd/pg13/
# 备份
cd /data/ssd/pg13
tar zcvf pg-data.tgz pg-data/
cd /db_update
# 将旧数据库容器的 bin 跟 data 复制出来
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
将旧版本数据库容器的 bin、lib 都拷贝出来
docker create --name old-pg postgres:13.13
# 拷贝数据
docker cp old-pg:/usr/lib ./old_usr_lib
docker cp old-pg:/usr/share ./old_usr_share
新建一个正式容器,并映射 data 目录,初始化完成后 ctrl+c 退出
mkdir -p /data/ssd/gitlab-ee/pg-data
chown 999 /data/ssd/gitlab-ee/pg-data
# 一定要和原来的初始化保持一致
# 注意 -e POSTGRES_DB=gitlab 需要取消,否则无法导入
docker run --name="pg-new" \
--rm \
-v "/data/ssd/gitlab-ee/pg-data:/var/lib/postgresql/data" \
-e POSTGRES_USER=gitlab \
-e POSTGRES_PASSWORD=123456 \
postgres:14.11
# 删除数据库
docker exec -it pg-new dropdb gitlab -U gitlab
# 初始化完成后 ctrl+c 退出
新建一个临时容器,用于升级数据,映射 PG13 的 bin 跟 data 目录,容器内的 data 跟正式容器映射到同一个目录
docker run -it \
--name="tmp" \
--rm \
-v "${PWD}/old_usr_lib/postgresql/13:/usr/lib/postgresql/13" \
-v "${PWD}/old_usr_lib:/old_usr_lib" \
-v "${PWD}/old_usr_share/postgresql/13:/usr/share/postgresql/13" \
-v "${PWD}/old_usr_share:/old_usr_share" \
-v "/data/ssd/pg13/pg-data:/data/old_data" \
-v "/data/ssd/gitlab-ee/pg-data:/var/lib/postgresql/data" \
--privileged=true \
--entrypoint="/bin/bash" \
postgres:14.11
执行升级
chown -Rf postgres /data/old_data
# export LD_LIBRARY_PATH=/old_usr_lib/x86_64-linux-gnu:/old_usr_lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
# 缺库从 /old_usr_lib 找并拷贝到对应的 /usr/lib/... 下
cp /old_usr_lib/x86_64-linux-gnu/libLLVM-15.so.1 /usr/lib/x86_64-linux-gnu/
cp /old_usr_lib/x86_64-linux-gnu/libLLVM-15.so /usr/lib/x86_64-linux-gnu/
# 切换数据库用户
su - postgres
cd /tmp
# 检查是否可以升级
/usr/lib/postgresql/14/bin/pg_upgrade \
-b /usr/lib/postgresql/13/bin \
-B /usr/lib/postgresql/14/bin \
-d /data/old_data/ \
-D /var/lib/postgresql/data \
-U gitlab \
-p 5433 \
-P 5434 \
-c
最后执行升级
/usr/lib/postgresql/14/bin/pg_upgrade \
-b /usr/lib/postgresql/13/bin \
-B /usr/lib/postgresql/14/bin \
-d /data/old_data/ \
-D /var/lib/postgresql/data \
-U gitlab \
-p 5433 \
-P 5434
等待升级完成即可,重新授权