PostgreSQL跨版本升级时如何保留数据(Fedora33系统下从9.5升级到12.4)

昨天将Fedora 24升级到了26,然后依次升级到28、30、32,直到最新的Fedora 33。系统升级成功了,但是Postgresql无法启动了:

[octopus@pc3 ~]$ sudo systemctl status postgresql
● postgresql.service
     Loaded: not-found (Reason: Unit postgresql.service not found.)
     Active: failed (Result: exit-code) since Sat 2021-02-13 08:12:44 CST; 2h 23min ago
        CPU: 43ms
 
Feb 13 08:12:43 pc3 systemd[1]: Starting PostgreSQL database server...
Feb 13 08:12:44 pc3 postgresql-check-db-dir[841]: An old version '9.5' of the database format was found.
Feb 13 08:12:44 pc3 postgresql-check-db-dir[841]: You need to dump and reload before using PostgreSQL 12.4.
Feb 13 08:12:44 pc3 postgresql-check-db-dir[841]: See /usr/share/doc/postgresql/README.rpm-dist for more information.
Feb 13 08:12:44 pc3 systemd[1]: postgresql.service: Control process exited, code=exited, status=1/FAILURE
Feb 13 08:12:44 pc3 systemd[1]: postgresql.service: Failed with result 'exit-code'.
Feb 13 08:12:44 pc3 systemd[1]: Failed to start PostgreSQL database server.

说是数据库文件的版本太旧了,从postgresql 9.5到12跨了很多版本,无法直接inplace升级数据库文件。

那就只好先卸载12.4版本,装上旧的9.x版本,用pg_dumpall把数据备份出来。再装上最新的12.4版本,initdb初始化数据库,把数据重新导进去。

卸载12.4版本:sudo dnf erase postgresql

笔者试了一下,导入postgresql官方的repo源(https://yum.postgresql.org/repopackages/),无论是下载fedora33还是32的pgdg-fedora-repo-latest.noarch.rpm文件,Fedora33平台下只能安装9.6版本,无法安装9.5版本。即使安装了支持inplace升级数据库文件的9.6版本,也必须要有9.5版本的bin/*程序文件才行,光有9.6版本还是无法升级。看来只能在虚拟机里面装一个有postgresql 9.5版本的fedora版本了,把data文件夹拷进去,再把数据导出来了。。。。
真的没有其他办法了吗?试试看强制添加fedora32的repo:

[octopus@pc3 Downloads]$ sudo dnf clean all
83 files removed
[octopus@pc3 Downloads]$ sudo dnf config-manager --add-repo https://download.postgresql.org/pub/repos/yum/9.5/fedora/fedora-32-x86_64/
Adding repo from: https://download.postgresql.org/pub/repos/yum/9.5/fedora/fedora-32-x86_64/

[octopus@pc3 Downloads]$ sudo dnf install postgresql95-server
created by dnf config-manager from https://download.postgresql.org/pub/repos/yum/9.5/fedora/fedora-3 1.2 kB/s | 3.8 kB     00:03     
Dependencies resolved.
=====================================================================================================================================
 Package                Arch      Version                Repository                                                             Size
=====================================================================================================================================
Installing:
 postgresql95-server    x86_64    9.5.25-1PGDG.f32       download.postgresql.org_pub_repos_yum_9.5_fedora_fedora-32-x86_64_    4.5 M
Installing dependencies:
 postgresql95           x86_64    9.5.25-1PGDG.f32       download.postgresql.org_pub_repos_yum_9.5_fedora_fedora-32-x86_64_    1.4 M
 postgresql95-libs      x86_64    9.5.25-1PGDG.f32       download.postgresql.org_pub_repos_yum_9.5_fedora_fedora-32-x86_64_    232 k
 
Transaction Summary
=====================================================================================================================================
Install  3 Packages
 
Total size: 6.1 M
Total download size: 4.5 M
Installed size: 26 M
Is this ok [y/N]: y
Downloading Packages:
[SKIPPED] postgresql95-9.5.25-1PGDG.f32.x86_64.rpm: Already downloaded                                                               
[SKIPPED] postgresql95-libs-9.5.25-1PGDG.f32.x86_64.rpm: Already downloaded                                                          
(3/3): postgresql95-server-9.5.25-1PGDG.f32.x86_64.rpm                                               399 kB/s | 4.5 MB     00:11     
-------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                397 kB/s | 4.5 MB     00:11      
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                             1/1  
  Installing       : postgresql95-libs-9.5.25-1PGDG.f32.x86_64                                                                   1/3  
  Running scriptlet: postgresql95-libs-9.5.25-1PGDG.f32.x86_64                                                                   1/3  
  Installing       : postgresql95-9.5.25-1PGDG.f32.x86_64                                                                        2/3  
  Running scriptlet: postgresql95-9.5.25-1PGDG.f32.x86_64                                                                        2/3  
  Running scriptlet: postgresql95-server-9.5.25-1PGDG.f32.x86_64                                                                 3/3  
  Installing       : postgresql95-server-9.5.25-1PGDG.f32.x86_64                                                                 3/3  
  Running scriptlet: postgresql95-server-9.5.25-1PGDG.f32.x86_64                                                                 3/3  
  Verifying        : postgresql95-9.5.25-1PGDG.f32.x86_64                                                                        1/3  
  Verifying        : postgresql95-libs-9.5.25-1PGDG.f32.x86_64                                                                   2/3  
  Verifying        : postgresql95-server-9.5.25-1PGDG.f32.x86_64                                                                 3/3  
 
Installed:
  postgresql95-9.5.25-1PGDG.f32.x86_64    postgresql95-libs-9.5.25-1PGDG.f32.x86_64    postgresql95-server-9.5.25-1PGDG.f32.x86_64    
 
Complete!
[octopus@pc3 Downloads]$  

终于安装成功了!(如果出现Curl error (52): Server returned nothing (no headers, no data)的错误,执行一下sudo dnf clean all,再重新开始安装)

把以前的数据文件拷到9.5的目录下面:

[octopus@pc3 Downloads]$ sudo ls -l /var/lib/pgsql/9.5
total 8
drwx------ 2 postgres postgres 4096 Feb 11 07:57 backups
drwx------ 2 postgres postgres 4096 Feb 11 07:57 data
[octopus@pc3 Downloads]$ sudo cp -r /var/lib/pgsql/data /var/lib/pgsql/9.5
[octopus@pc3 Downloads]$ sudo ls -l /var/lib/pgsql/9.5/data
total 120
drwx------ 6 root root  4096 Feb 13 21:32 base
drwx------ 2 root root  4096 Feb 13 21:32 global
drwx------ 2 root root  4096 Feb 13 21:32 pg_clog
drwx------ 2 root root  4096 Feb 13 21:32 pg_commit_ts
drwx------ 2 root root  4096 Feb 13 21:32 pg_dynshmem
-rw------- 1 root root  4238 Feb 13 21:32 pg_hba.conf
-rw------- 1 root root  1636 Feb 13 21:32 pg_ident.conf
drwx------ 2 root root  4096 Feb 13 21:32 pg_log
drwx------ 4 root root  4096 Feb 13 21:32 pg_logical
drwx------ 4 root root  4096 Feb 13 21:32 pg_multixact
drwx------ 2 root root  4096 Feb 13 21:32 pg_notify
drwx------ 2 root root  4096 Feb 13 21:32 pg_replslot
drwx------ 2 root root  4096 Feb 13 21:32 pg_serial
drwx------ 2 root root  4096 Feb 13 21:32 pg_snapshots
drwx------ 2 root root  4096 Feb 13 21:32 pg_stat
drwx------ 2 root root  4096 Feb 13 21:32 pg_stat_tmp
drwx------ 2 root root  4096 Feb 13 21:32 pg_subtrans
drwx------ 2 root root  4096 Feb 13 21:32 pg_tblspc
drwx------ 2 root root  4096 Feb 13 21:32 pg_twophase
-rw------- 1 root root     4 Feb 13 21:32 PG_VERSION
drwx------ 3 root root  4096 Feb 13 21:32 pg_xlog
-rw------- 1 root root    88 Feb 13 21:32 postgresql.auto.conf
-rw------- 1 root root 21368 Feb 13 21:32 postgresql.conf
-rw------- 1 root root    45 Feb 13 21:32 postmaster.opts

拷贝后的文件属于root用户,postgres进程无法读取。改为postgres用户:

[octopus@pc3 Downloads]$ sudo chown -R postgres /var/lib/pgsql/9.5/data
[octopus@pc3 Downloads]$ sudo chgrp -R postgres /var/lib/pgsql/9.5/data

启动PostgreSQL:

[octopus@pc3 Downloads]$ sudo systemctl start postgresql-9.5
[octopus@pc3 Downloads]$ sudo systemctl status postgresql-9.5
● postgresql-9.5.service - PostgreSQL 9.5 database server
     Loaded: loaded (/usr/lib/systemd/system/postgresql-9.5.service; disabled; vendor preset: disabled)
     Active: active (running) since Sat 2021-02-13 21:34:00 CST; 25s ago
       Docs: https://www.postgresql.org/docs/9.5/static/
    Process: 6698 ExecStartPre=/usr/pgsql-9.5/bin/postgresql95-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
    Process: 6703 ExecStart=/usr/pgsql-9.5/bin/pg_ctl start -D ${PGDATA} -s -w -t 300 (code=exited, status=0/SUCCESS)
   Main PID: 6705 (postgres)
      Tasks: 7 (limit: 2019)
     Memory: 22.6M
        CPU: 239ms
     CGroup: /system.slice/postgresql-9.5.service
             ├─6705 /usr/pgsql-9.5/bin/postgres -D /var/lib/pgsql/9.5/data
             ├─6706 postgres: logger process
             ├─6708 postgres: checkpointer process
             ├─6709 postgres: writer process
             ├─6710 postgres: wal writer process
             ├─6711 postgres: autovacuum launcher process
             └─6712 postgres: stats collector process
 
Feb 13 21:33:59 pc3 systemd[1]: Starting PostgreSQL 9.5 database server...
Feb 13 21:34:00 pc3 pg_ctl[6705]: LOG:  redirecting log output to logging collector process
Feb 13 21:34:00 pc3 pg_ctl[6705]: HINT:  Future log output will appear in directory "pg_log".
Feb 13 21:34:00 pc3 systemd[1]: Started PostgreSQL 9.5 database server.

启动成功了!而且可以用pgAdmin连接上:

 

接下来,用pg_dumpall命令导出所有数据:

[octopus@pc3 Documents]$ sudo su postgres
bash-5.0$ cd ~
bash-5.0$ ls
9.5  data  initdb_postgresql.log  pg_upgrade_internal.log  pg_upgrade_server.log  pg_upgrade_utility.log
bash-5.0$ pwd
/var/lib/pgsql
bash-5.0$ pg_dumpall > psqldb.out
bash-5.0$ ls -l
total 32
drwx------   4 postgres postgres 4096 Feb 11 07:57 9.5
drwx------. 20 postgres postgres 4096 Oct 10 05:30 data
-rw-------.  1 postgres postgres 1301 Aug 25  2016 initdb_postgresql.log
-rw-------   1 postgres postgres  490 Feb 13 20:14 pg_upgrade_internal.log
-rw-------   1 postgres postgres  358 Feb 13 20:14 pg_upgrade_server.log
-rw-------   1 postgres postgres  358 Feb 13 20:14 pg_upgrade_utility.log
-rw-r--r--   1 postgres postgres 5709 Feb 13 22:17 psqldb.out
bash-5.0$ exit
exit
[octopus@pc3 Documents]$  


卸载9.5版本的postgresql,删除之前添加的fedora 32的dnf repo,删除/var/lib/pgsql/data,可以保留/var/lib/pgsql/9.5/data。

[octopus@pc3 Documents]$ sudo systemctl stop postgresql-9.5
[octopus@pc3 Documents]$ sudo dnf remove postgresql95*
Dependencies resolved.
=====================================================================================================================================
 Package                Arch      Version               Repository                                                              Size
=====================================================================================================================================
Removing:
 postgresql95           x86_64    9.5.25-1PGDG.f32      @download.postgresql.org_pub_repos_yum_9.5_fedora_fedora-32-x86_64_    7.2 M
 postgresql95-libs      x86_64    9.5.25-1PGDG.f32      @download.postgresql.org_pub_repos_yum_9.5_fedora_fedora-32-x86_64_    741 k
 postgresql95-server    x86_64    9.5.25-1PGDG.f32      @download.postgresql.org_pub_repos_yum_9.5_fedora_fedora-32-x86_64_     18 M
 
Transaction Summary
=====================================================================================================================================
Remove  3 Packages
 
Freed space: 26 M
Is this ok [y/N]: y
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                             1/1  
  Running scriptlet: postgresql95-server-9.5.25-1PGDG.f32.x86_64                                                                 1/1  
  Running scriptlet: postgresql95-server-9.5.25-1PGDG.f32.x86_64                                                                 1/3  
  Erasing          : postgresql95-server-9.5.25-1PGDG.f32.x86_64                                                                 1/3  
  Running scriptlet: postgresql95-server-9.5.25-1PGDG.f32.x86_64                                                                 1/3  
  Erasing          : postgresql95-9.5.25-1PGDG.f32.x86_64                                                                        2/3  
  Running scriptlet: postgresql95-9.5.25-1PGDG.f32.x86_64                                                                        2/3  
  Erasing          : postgresql95-libs-9.5.25-1PGDG.f32.x86_64                                                                   3/3  
  Running scriptlet: postgresql95-libs-9.5.25-1PGDG.f32.x86_64                                                                   3/3  
  Verifying        : postgresql95-9.5.25-1PGDG.f32.x86_64                                                                        1/3  
  Verifying        : postgresql95-libs-9.5.25-1PGDG.f32.x86_64                                                                   2/3  
  Verifying        : postgresql95-server-9.5.25-1PGDG.f32.x86_64                                                                 3/3  
 
Removed:
  postgresql95-9.5.25-1PGDG.f32.x86_64    postgresql95-libs-9.5.25-1PGDG.f32.x86_64    postgresql95-server-9.5.25-1PGDG.f32.x86_64    
 
Complete!
[octopus@pc3 Documents]$ ls /etc/yum.repos.d/
_copr_phracek-PyCharm.repo                                               fedora-updates.repo
download.postgresql.org_pub_repos_yum_9.5_fedora_fedora-32-x86_64_.repo  fedora-updates-testing-modular.repo
fedora-cisco-openh264.repo                                               fedora-updates-testing.repo
fedora-modular.repo                                                      google-chrome.repo
fedora.repo                                                              rpmfusion-nonfree-nvidia-driver.repo
fedora-updates-modular.repo                                              rpmfusion-nonfree-steam.repo
[octopus@pc3 Documents]$ sudo rm /etc/yum.repos.d/download.postgresql.org_pub_repos_yum_9.5_fedora_fedora-32-x86_64_.repo  
[octopus@pc3 Documents]$ sudo dnf repolist
repo id                                                  repo name
fedora                                                   Fedora 33 - x86_64
fedora-cisco-openh264                                    Fedora 33 openh264 (From Cisco) - x86_64
fedora-modular                                           Fedora Modular 33 - x86_64
updates                                                  Fedora 33 - x86_64 - Updates
updates-modular                                          Fedora Modular 33 - x86_64 - Updates
[octopus@pc3 Documents]$ sudo dnf clean all
48 files removed
[octopus@pc3 Documents]$ sudo rm -rf /var/lib/pgsql/data
[octopus@pc3 Documents]$ sudo ls /var/lib/pgsql
9.5  initdb_postgresql.log  pg_upgrade_internal.log  pg_upgrade_server.log  pg_upgrade_utility.log  psqldb.out

 

安装最新版本的postgresql:

[octopus@pc3 Documents]$ sudo dnf install postgresql-server
Last metadata expiration check: 0:01:50 ago on Sat 13 Feb 2021 22:30:24.
Dependencies resolved.
=====================================================================================================================================
 Package                               Architecture               Version                          Repository                   Size
=====================================================================================================================================
Installing:
 postgresql-server                     x86_64                     12.4-3.fc33                      updates                     5.8 M
Installing dependencies:
 postgresql                            x86_64                     12.4-3.fc33                      updates                     1.4 M
 
Transaction Summary
=====================================================================================================================================
Install  2 Packages
 
Total download size: 7.2 M
Installed size: 28 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): postgresql-12.4-3.fc33.x86_64.rpm                                                             192 kB/s | 1.4 MB     00:07     
(2/2): postgresql-server-12.4-3.fc33.x86_64.rpm                                                      158 kB/s | 5.8 MB     00:37     
-------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                193 kB/s | 7.2 MB     00:38      
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                             1/1  
  Installing       : postgresql-12.4-3.fc33.x86_64                                                                               1/2  
  Running scriptlet: postgresql-server-12.4-3.fc33.x86_64                                                                        2/2  
  Installing       : postgresql-server-12.4-3.fc33.x86_64                                                                        2/2  
warning: /var/lib/pgsql/.bash_profile created as /var/lib/pgsql/.bash_profile.rpmnew
 
  Running scriptlet: postgresql-server-12.4-3.fc33.x86_64                                                                        2/2  
/usr/lib/tmpfiles.d/postgresql.conf:1: Line references path below legacy directory /var/run/, updating /var/run/postgresql → /run/postgresql; please update the tmpfiles.d/ drop-in file accordingly.
 
  Verifying        : postgresql-12.4-3.fc33.x86_64                                                                               1/2  
  Verifying        : postgresql-server-12.4-3.fc33.x86_64                                                                        2/2  
 
Installed:
  postgresql-12.4-3.fc33.x86_64                                 postgresql-server-12.4-3.fc33.x86_64                                 
 
Complete!

 

启动服务器并导入数据:

[octopus@pc3 Documents]$ sudo postgresql-setup initdb
WARNING: using obsoleted argument syntax, try --help
WARNING: arguments transformed to: postgresql-setup --initdb --unit postgresql
 * Initializing database in '/var/lib/pgsql/data'
 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
[octopus@pc3 Documents]$ sudo systemctl start postgresql
[octopus@pc3 Documents]$ sudo systemctl enable postgresql
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/systemd/system/postgresql.service.
[octopus@pc3 Documents]$ sudo su postgres
bash-5.0$ cd ~
bash-5.0$ psql -f psqldb.out postgres
...

bash-5.0$ exit
exit
[octopus@pc3 Documents]$

 

最后,我们改下配置,让pgAdmin能访问新装的postgresql服务器。
先设置数据库用户postgres的密码:

[octopus@pc3 Documents]$ sudo su postgres
[sudo] password for octopus:  
bash-5.0$ psql mydb
could not change directory to "/home/octopus/Documents": Permission denied
psql (12.4)
Type "help" for help.
 
mydb=# \password
Enter new password:  
Enter it again:  
mydb=# exit
bash-5.0$ exit
exit
[octopus@pc3 Documents]$ psql -U postgres -W
Password:  
psql: error: could not connect to server: FATAL:  Peer authentication failed for user "postgres"
这里psql -U postgres -W就相当于mysql的mysql -u root -p。改完密码后发现无法登录,我们需要改pg_hba.conf配置文件里面的权限设置:
[octopus@pc3 Documents]$ sudo locate pg_hba.conf
/usr/share/pgsql/pg_hba.conf.sample
/var/lib/pgsql/data/pg_hba.conf
[octopus@pc3 Documents]$ sudo vim /var/lib/pgsql/data/pg_hba.conf

# "local" is for Unix domain socket connections only
local   all             all                                     peer
把peer改成md5,保存文件,然后重启服务器:
[octopus@pc3 Documents]$ sudo systemctl restart postgresql
[octopus@pc3 Documents]$ psql -U postgres -W
Password:  
psql (12.4)
Type "help" for help.
 
postgres=# quit
[octopus@pc3 Documents]$  

这下命令行和pgAdmin都能登录成功了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巨大八爪鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值