如何在不丢失openproject数据的情况下将postgresql数据库从10升级到12

How to upgrade postgresql database from 10 to 12 without losing data for openproject

我的OpenProject管理软件默认安装了postgresql 10。 目前postgresql DB是12,它有很多新特性。

我想升级我的 Postgres 数据库而不丢失数据库中的数据。 我的系统是 ubuntu 18.04 并托管了 openproject。

我在网上搜索了一下,没有找到升级postgresql的步骤。

能否指导我安装新数据库,所有数据都应该在新数据库中。 感谢您的帮助。

  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
    
  2. 重启postgresql服务:

    sudo systemctl restart postgresql
    
  3. 登录到 postgres:

    su - postgres
    
  4. 查看版本:

    psql --version
    

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

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

  1. 以 postgres 用户身份登录
sudo su postgres
  1. 为所有数据库中的所有数据创建备份 .sql 文件
pg_dumpall > backup.sql

B) 升级到 PostgreSQL12

  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. Return 作为普通(默认用户)用户并清理旧版本的混乱
#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: 欢迎评论您的问题、建议或任何其他您想建议的修改

使用 pg_upgrade

升级 Postgresql

步骤 - 1(找到源 Postgresql 服务器的区域设置语言和编码)

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

步骤 - 2(停止 existing/source Postgresql 服务器)

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

步骤 - 3(安装目标 Postgresql 服务器)

  • 配置存储库并安装(google 中提供了很多教程)

步骤 - 4(更新区域设置语言和编码)

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

步骤 - 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

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

步骤 - 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

预期输出:升级完成

谢谢。 享受吧!!!