如何将PostgreSQL数据库从10升级到12而不丢失OpenProject的数据

d4so4syb  于 2023-04-20  发布在  PostgreSQL
关注(0)|答案(3)|浏览(390)

我的OpenProject管理软件安装了默认的postgresql 10。目前postgresql DB是12,它有很多新功能。
我想升级我的Postgres数据库而不丢失数据库中的数据。我的系统是ubuntu 18.04和托管的openproject。
我在网上搜索了一下,找不到一步一步升级postgresql的方法。
你能指导我安装新的数据库和所有的数据应该在新的数据库。谢谢你的帮助。

qmb5sa22

qmb5sa221#

A)首先创建所有数据库的备份(如果不需要备份,可以从B继续)

1.以postgres用户身份登录

sudo su postgres

1.为所有数据库中的所有数据创建一个备份.sql文件

pg_dumpall > backup.sql

B)升级到PostgreSQL 12

1.更新软件包并安装postgres 12

sudo apt-get update
sudo apt-get install postgresql-12 postgresql-server-dev-12

1.停止postgresql服务

sudo systemctl stop postgresql.service

1.迁移数据

/usr/lib/postgresql/12/bin/pg_upgrade \
--old-datadir=/var/lib/postgresql/10/main \
--new-datadir=/var/lib/postgresql/12/main \
--old-bindir=/usr/lib/postgresql/10/bin \
--new-bindir=/usr/lib/postgresql/12/bin \
--old-options '-c config_file=/etc/postgresql/10/main/postgresql.conf' \
--new-options '-c config_file=/etc/postgresql/12/main/postgresql.conf'

1.切换到普通用户

exit

1.交换新旧postgres版本的端口。

#change port to 5432
sudo vim /etc/postgresql/12/main/postgresql.conf
#change port to 5433
sudo vim /etc/postgresql/10/main/postgresql.conf

1.启动PostgreSQL服务

sudo systemctl start postgresql.service

1.以postgres用户身份登录

sudo su postgres

1.检查您的新postgres版本

psql -c "SELECT version();"

1.运行生成的新集群脚本

./analyze_new_cluster.sh

1.作为普通(默认用户)用户返回并清理旧版本的混乱

#uninstalls postgres packages     
sudo apt-get remove postgresql-10 postgresql-server-dev-10
#removes the old postgresql directory
sudo rm -rf /etc/postgresql/10/
#login as postgres user
sudo su postgres
#delete the old cluster data
./delete_old_cluster.sh

1.恭喜!你的postgresql版本现在升级了,如果在B中一切正常,我们不必应用备份,因为我们已经将数据从旧版本迁移到新版本,备份只是以防万一,如果出了什么问题。

**注意:**根据需要更改postgresql.conf和pg_hba.conf
PS:请随时评论您的问题、建议或任何其他您想建议的修改

drnojrws

drnojrws2#

1.备份数据库

psql --version sudo -u postgres psql pg_dumpall > alldbs.sql

(此命令将备份postgresql数据库中的所有数据库)
然后退出postgres用户,然后:
1.在终端中运行以下命令:

sudo systemctl stop postgres
sudo apt-get install -y postgresql-12 postgresql-server-dev-12 postgresql-contrib-12 libpq-dev postgresql-12-hypopg
sudo pg_dropcluster 12 main --stop
sudo pg_upgradecluster 10 main
sudo pg_dropcluster 10 main --stop

1.重新启动postgresql服务:

sudo systemctl restart postgresql

1.登录到postgres:

su - postgres

1.检查版本:

psql --version

我已经完成了上述步骤,我可以更新数据库和恢复所有数据.

5vf7fwbs

5vf7fwbs3#

使用pg_upgrade升级PostgreSQL

Step - 1(查找源PostgreSQL服务器的locale语言和编码)

  • 以postgres用户身份登录PostgreSQL数据库
  • 执行查询SHOW LC_COLLATE;

Step - 2(停止现有/源PostgreSQL服务器)

  • 使用$ sudo systemctl list-units | grep postgres查找正在运行的PostgreSQL服务
  • 停止服务$ sudo service postgresql-<source-version>.service stop

Step - 3(安装目标PostgreSQL服务器)

  • 配置存储库并安装(在谷歌上有很多教程)

Step - 4(更新语言和编码)

$ /usr/pgsql-<target-version>/bin/initdb -D /var/lib/pgsql/<target-version>/data --locale=<add-your-encoding>

Step - 5(检查源到目标升级是否存在潜在问题)

  • 以postgres用户$sudo su postgres的身份运行命令
$  /usr/pgsql-<target-version>/bin/pg_upgrade --old-bindir /usr/pgsql-<source-version>/bin --new-bindir /usr/pgsql-<target-version>/bin --old-datadir /var/lib/pgsql/<source-version>/data --new-datadir /var/lib/pgsql/12/data --link --jobs=2 --check

如果没有问题,我们可以进入下一步,如果没有解决问题,则继续下一步预期输出:集群兼容

Step - 6(使用link选项将源升级到目标PostgreSQL版本)

  • link选项比迁移快得多
  • 以postgres用户$sudo su postgres的身份运行命令
$ /usr/pgsql-<target-version>/bin/pg_upgrade --old-bindir /usr/pgsql-<source-version>/bin --new-bindir /usr/pgsql-<target-version>/bin --old-datadir /var/lib/pgsql/<source-version>/data --new-datadir /var/lib/pgsql/<target-version>/data --link

预期输出:升级完成
谢谢。享受吧!

相关问题