设为首页 收藏本站
查看: 1056|回复: 0

[经验分享] PostgreSQL备份与恢复示例

[复制链接]

尚未签到

发表于 2016-11-20 06:31:40 | 显示全部楼层 |阅读模式
  一、 简介
Postgresql的备份分为三种:
l SQL转储
l 文件系统级别备份(冷备份)
l 在线热备份(归档)
以下通过实例来讲解PostgreSQL的三种备份。
二、 SQL转储
(一)pg_dump
1,创建数据库
createdb pg
2,连入数据库pg
psql pg
3,创建测试表,插入数据
pg=# create table pg_test(a int);
pg=# insert into pg_test(a) values(1);
pg=# insert into pg_test(a) values(2);
4,查看数据
pg=# select * from tb;
a
---
1
2
(2 rows)
5,备份
pg_dump pg > /usr/local/pgsql/backup/pg.dmp
6,删除数据库pg
dropdb pg
7,创建新数据库(恢复之前需创建数据库)
createdb pg
8,恢复数据
psql pb < /usr/local/pgsql/backup/pg.dmp
9,查看数据是否回复
pg=# select * from tb;
a
---
1
2
(2 rows)
至此,数据已成功恢复!
注:pg_dump可以对针对单表或者多表进行备份
如:pg_dump databasename –t tablename1 –t tablename2 >filename
(二)pg_dumpall
pg_dump只能备份单个数据库,而且恢复的时候需要创建空数据库。pg_dumpall可以备份所有数据库,并且备份角色、表空间。
1,创建数据库
createdb pg1
createdb pg2
2pg1中创建表并插入数据
psql pg1
pg=# create table tb1(a int)
pg=# insert into tb1(a) values(1);
3pg2中创建表并插入数据
psql pg2
pg=# create table tb2(a int)
pg=# insert into tb2(a) values(2);
4,备份数据库
pg_dumpall > /usr/local/pgsql/backup/pg_all.dmp
5,删除数据库
dropdb pg1
dropdb pg2
6,恢复数据库
psql –f /usr/local/pgsql/backup/pg_all.dmp postgres
可以指定任何数据库名,如果恢复到一个空的集群中,通常使用postgres数据库
7,查看数据库pg1是否恢复
psql pg1
pg=# select * from tb1;
a
---
1
(1 rows)
8,查看数据库pg2是否恢复
psql pg2
pg=# select * from tb2;
a
---
2
(1 rows)
至此,数据已成功恢复!
备份压缩与分割
压缩与分割的原理都是利用Linux的管线(PIPE)命令,不再进行试验。
1)压缩
l 备份:
pg_dump dbname | gzip > filename.gz
l 恢复
gunzip -c filename.gz | psql dbname
2)分割
l 备份:
pg_dump dbname | split -b1m- filename
l 恢复
cat filename* | psql dbname
(三)文件系统级别备份(冷备份)
文件系统级别的备份是冷备份,需要停止数据库。
1,停止数据库
pg_ctl –D /usr/local/pgsql/data stop
2,备份数据库
tar –jcv –f /usr/local/pgsql/backup/filesystem.tar.bz2 /usr/local/pgsql/data/
3,删除/usr/local/pgsql/data/目录

rm –r /usr/local/pgsql/data/
4,解压备份文件到原目录
tar –jxv –f /usr/local/pgsql/backup/filesystem.tar.bz2 –C /
5,启动数据库
pg_ctl –D /usr/local/pgsql/data start
6,查看数据库pg1是否恢复
psql pg1
pg=# select * from tb1;
a
---
1
(1 rows)
7,查看数据库pg2是否恢复
psql pg2
pg=# select * from tb2;
a
---
2
(1 rows)
至此,数据已成功恢复!
四、 在线热备份(归档)
(一)备份
1,配置归档模式
配置归档需要编辑postgresql.conf文件,默认为与/usr/local/pgsql/data/目录下
vim /usr/local/pgsql/data/postgesql.conf
archive_mode = on
archive_command = ‘cp %p /usr/local/pgsql/backup/archived_log/%f’
注:%p要被归档的日志文件的路径,%f是要被归档的日志文件的文件名
2,启动数据库
pg_ctl –D /usr/local/pgsql/data start
3,创建数据库arch
createdb arch
4,创建表并插入记录
psql arch
arch=# create table tb(a int);
arch=# insert into tb(a) values(1);
5,创建备份
arch=# select pg_start_backup(‘baseline’);
6,备份整个data目录
tar –jcv –f /usr/local/pgsql/backup/baseline.tar.bz2 /usr/local/pgsql/data/
7,停止备份
psql arch
arch=# select pg_stop_backup();
8,插入新记录,然后切换日志,重复3
arch=# insert into tb(a) values(2);
arch=# select pg_switch_xlog();
arch=# insert into tb(a) values(3);
arch=# select pg_switch_xlog();
arch=# insert into tb(a) values(4);
arch=# select pg_switch_xlog();
9,把/data/pg_xlog/下的WAL日志文件复制到预设的归档目录下,保证产生的WAL日志都已归档。
(二)恢复
1,停止数据库
pg_ctl –D /usr/local/pgsql/data/ stop
2,删除/data/
rm –r /usr/local/pgsql/data/
3,恢复备份
tar –jxv –f /usr/local/pgsql/backup/baseline.tar.bz2 –C /
4,清空/data/pg_xlog/目录下所有文件
rm –r /usr/local/pgsql/data/pg_xlog/
5,创建/pg_xlog/及其下面的archive_status目录
mkdir /usr/local/pgsql/data/pg_xlog/
mkdir /usr/local/pgsql/data/pg_xlog/archive_status
6,在/data/目录下创建recovery.conf
vim /usr/local/pgsql/data/recovery.conf
restore_command = ‘cp /usr/local/pgsql/backup/archived_log/%f “%p”’
7,启动数据库
pg_ctl –D /usr/local/pgsql/data/ start
一切正常的话数据库就会自动应用WAL日志进行恢复
8,查看数据库arch是否恢复
psql arch
arch=# select * from tb;
a
---
1
2
3
4
(4 rows)
至此,数据已经成功恢复!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-302582-1-1.html 上篇帖子: PostgreSql简单数据类型(PostgreSql学习笔记4) 下篇帖子: db PostgreSQL error_list
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表