记一次linux系统 postgresql 数据库备份和恢复
需求: 将数据从服务器A(151) -> 转移到服务器B (152)
其中包括地理数据,时序数据库等
1. 首先是备份151上的数据:
①普通地理数据
-- 如果是全部的数据:
pg_dump -U user -d abc > /home/dump/150.bak
user : 数据库登录用户名
abc : 数据库名
/home/dump/150.bak : 备份的路径
-- 如果是部分表要加上 -t ,每张表前都要加:
pg_dump -U user -d abc -t table1 -t table2 > /home/dump/151.bak
table1, table2 : 表名
②时序数据
通常时序数据文件较大,这里可以指定备份格式为blob
pg_dump -U user -d abc -t table1 -t table2 --format=c --blobs > /home/dump/tsdb.bak
注:有时在备份时,会出现找不到表的情况,但明明数据中存在该表,这是可以把schema前缀加上就可以了,
我这里是tsdb 例: -t tsdb.table1 等 , 或者也可以在pgadmin中配置该数据库的searchPath路径,
将tsdb加进去,数据就会自动查找该schema下的表了
如果只想拷贝数据: 加上-a参数即可
2. 将备份数据转移到152上:
利用scp(secure copy)命令, 远程拷贝用的:
在151上执行:
scp /home/dump/150.bak > root@ip:/home/dump
root: 是152服务器用户名
ip: 152服务器ip
/home/dump: 文件存在152服务器上的位置
执行之后需要输入用户 root 的密码
3. 恢复数据
登录到152服务器:
执行:
ll /home/dump
这时会发现151.bak和tsdb.bak文件已经存在了
接下执行恢复语句:
恢复普通表:psql -U user -d abc < /home/dump/151.bak
恢复时序表:pg_restore -Fc --disable-triggers -U sde -d zjpdm < /home/dump/tsdb.bak
执行之后需要输入密码,这里的密码是数据库用户 user 的密码
注: 这里需要注意的是 psql和pg_restore区别:
备份时如果没有指定备份文件的格式,默认是sql,直接可以用psql恢复没有问题
如果备份时指定了备份文件的格式,则恢复时使用pg_restore, 还需要指定格式
更多推荐
记一次linux系统 postgresql 数据库备份和恢复
发布评论