本文为利用 SQL 进行恢复而非利用系统文件进行恢复
下面的 1.1.1.1 代表原数据库服务器,2.2.2.2 代表新数据库服务器
流程
首先备份并恢复所有角色信息
然后依次备份一个数据库、恢复一个数据库
注:
尽管有 pg_dumpall 可以备份+恢复所有信息,但是不推荐使用(如果遇到错误很难去解决)
所有的备份和恢复进程建议在 tmux 中完成,防止中途网络断开导致异常
角色信息
备份所有角色信息
PGPASSWORD=数据库密码 pg_dumpall -h 1.1.1.1 -U postgres -g > roles.sql用户名请始终使用 postgres
利用环境变量 PGPASSWORD 传递 postgres 用户的密码
修改 1.1.1.1 为你的数据库服务器 IP
-g 用于只备份角色信息
修改备份的角色信息
这一步几乎是必要的,因为上一步备份产生的 roles.sql 包括了所有的原数据库的角色信息
这个「所有」意味着有一些是不应该被恢复的 —— 例如 PG 自己的 postgres 用户(包括权限与密码等),或是如果用了云服务厂商的 Managed Database 产品的一些系统用户等
roles.sql 文件内就是标准的 SQL 语句,可以根据自己的需要删除一定的内容
恢复所有角色信息
psql -f roles.sql 'postgres://postgres:数据库密码@2.2.2.2:5432/postgres?sslmode=disable'利用 -f 指定刚才备份好的 SQL 文件
后面传递 PG 连接串,注意使用 postgres 用户
数据库信息
查看拥有的数据库
连上服务器
psql 'postgres://postgres:数据库密码@1.1.1.1:5432/postgres?sslmode=disable'然后输入 \l 即可列出所有的数据库
备份指定数据库
PGPASSWORD=数据库密码 pg_dump -h 1.1.1.1 -U postgres -Fc 数据库名称 > 数据库名称.dump用户名建议使用 postgres(也可以使用有权限访问这个数据库的用户)
利用环境变量 PGPASSWORD 传递数据库用户的密码
修改 1.1.1.1 为你的数据库服务器 IP
-Fc 用于生成供 pg_restore 使用的恢复文件
如果不指定,默认是 SQL,可能会出现一些外键的问题
将 数据库名称 修改为你的数据库名称
恢复指定数据库
先在新的数据库服务器上创建指定数据库(注意设置正确的数据库权限 —— 这个不在备份文件备份的范畴内)
CREATE DATABASE 数据库名称 WITH OWNER 数据库所有者用户;然后利用 pg_restore 进行恢复
PGPASSWORD=数据库密码 pg_restore -h 2.2.2.2 -U postgres -d 数据库名称 < 数据库名称.dump