热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

PostgreSQL备份与恢复方法

一、简介Postgresql的备份分为三种:lSQL转储l文件系统级别备份(冷备份)l在线热备份(归档)以下通过实例来讲解PostgreSQL的三种备份。二、SQL转储(一)pg_dump1,创建数据库createdbpg2,连入数据库pgpsqlpg3,创建测试表,插入数据

   一、 简介

    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

    9,查看数据是否回复

    pg=# select * from tb;

    a

    ---

    1

    2

    (2 rows)

    至此,数据已成功恢复!

    注:pg_dump可以对针对单表或者多表进行备份

    如:pg_dump databasename Ct tablename1 Ct tablename2 >filename

    (二)pg_dumpall

    pg_dump只能备份单个数据库,而且恢复的时候需要创建空数据库。pg_dumpall可以备份所有数据库,并且备份角色、表空间。

    1,创建数据库

    createdb pg1

    createdb pg2

    2, pg1中创建表并插入数据

    psql pg1

    pg=# create table tb1(a int)

    pg=# insert into tb1(a) values(1);

    3, pg2中创建表并插入数据

    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 Cf /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 CD /usr/local/pgsql/data stop

    2,备份数据库

    tar Cjcv Cf /usr/local/pgsql/backup/filesystem.tar.bz2 /usr/local/pgsql/data/

    3,删除/usr/local/pgsql/data/目录

    rm Cr /usr/local/pgsql/data/

    4,解压备份文件到原目录

    tar Cjxv Cf /usr/local/pgsql/backup/filesystem.tar.bz2 CC /

    5,启动数据库

    pg_ctl CD /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 CD /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 Cjcv Cf /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 CD /usr/local/pgsql/data/ stop

    2,删除/data/

    rm Cr /usr/local/pgsql/data/

    3,恢复备份

    tar Cjxv Cf /usr/local/pgsql/backup/baseline.tar.bz2 CC /

    4,清空/data/pg_xlog/目录下所有文件

    rm Cr /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,启动数据库


推荐阅读
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文由瀚高PG实验室撰写,详细介绍了如何在PostgreSQL中创建、管理和删除模式。文章涵盖了创建模式的基本命令、public模式的特性、权限设置以及通过角色对象简化操作的方法。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 在Python开发过程中,随着项目数量的增加,不同项目依赖于不同版本的库,容易引发依赖冲突。为了避免这些问题,并保持开发环境的整洁,可以使用Virtualenv和Virtualenvwrapper来创建和管理多个隔离的Python虚拟环境。 ... [详细]
  • 在成功安装和测试MySQL及Apache之后,接下来的步骤是安装PHP。为了确保安全性和配置的一致性,建议在安装PHP前先停止MySQL和Apache服务,并将MySQL集成到PHP中。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
author-avatar
可爱嘟嘟豬5
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有