如何在不丢失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的步骤。
能否指导我安装新数据库,所有数据都应该在新数据库中。
感谢您的帮助。
- 备份数据库
psql --version sudo -u postgres psql pg_dumpall > alldbs.sql
(此命令将从 postgresql 数据库备份所有数据库)
然后退出postgres用户,并且:
在终端内 运行 这些命令:
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
重启postgresql服务:
sudo systemctl restart postgresql
登录到 postgres:
su - postgres
查看版本:
psql --version
我已经完成了上述步骤,我可以更新数据库并恢复所有数据。
A) 首先为此创建所有数据库的备份(如果不需要备份,可以从 B 继续)
- 以 postgres 用户身份登录
sudo su postgres
- 为所有数据库中的所有数据创建备份 .sql 文件
pg_dumpall > backup.sql
B) 升级到 PostgreSQL12
- 更新软件包并安装 postgres 12
sudo apt-get update
sudo apt-get install postgresql-12 postgresql-server-dev-12
- 停止 postgresql 服务
sudo systemctl stop postgresql.service
- 迁移数据
/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'
- 切换到普通用户
exit
- 交换新旧 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
- 启动 postgresql 服务
sudo systemctl start postgresql.service
- 以 postgres 用户身份登录
sudo su postgres
- 检查您的新 postgres 版本
psql -c "SELECT version();"
- 运行生成的新集群脚本
./analyze_new_cluster.sh
- 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
- 恭喜!您的 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
预期输出:升级完成
谢谢。
享受吧!!!
我的OpenProject管理软件默认安装了postgresql 10。 目前postgresql DB是12,它有很多新特性。
我想升级我的 Postgres 数据库而不丢失数据库中的数据。 我的系统是 ubuntu 18.04 并托管了 openproject。
我在网上搜索了一下,没有找到升级postgresql的步骤。
能否指导我安装新数据库,所有数据都应该在新数据库中。 感谢您的帮助。
- 备份数据库
(此命令将从 postgresql 数据库备份所有数据库)psql --version sudo -u postgres psql pg_dumpall > alldbs.sql
然后退出postgres用户,并且:
在终端内 运行 这些命令:
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
重启postgresql服务:
sudo systemctl restart postgresql
登录到 postgres:
su - postgres
查看版本:
psql --version
我已经完成了上述步骤,我可以更新数据库并恢复所有数据。
A) 首先为此创建所有数据库的备份(如果不需要备份,可以从 B 继续)
- 以 postgres 用户身份登录
sudo su postgres
- 为所有数据库中的所有数据创建备份 .sql 文件
pg_dumpall > backup.sql
B) 升级到 PostgreSQL12
- 更新软件包并安装 postgres 12
sudo apt-get update
sudo apt-get install postgresql-12 postgresql-server-dev-12
- 停止 postgresql 服务
sudo systemctl stop postgresql.service
- 迁移数据
/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'
- 切换到普通用户
exit
- 交换新旧 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
- 启动 postgresql 服务
sudo systemctl start postgresql.service
- 以 postgres 用户身份登录
sudo su postgres
- 检查您的新 postgres 版本
psql -c "SELECT version();"
- 运行生成的新集群脚本
./analyze_new_cluster.sh
- 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
- 恭喜!您的 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
预期输出:升级完成
谢谢。 享受吧!!!