超详细的pg12.2数据库五种备份恢复机制总结,值得收藏

备份重于一切,今天主要介绍PG的五种备份方式,仅供参考。

ps:前四种重点掌握

1、语法

可以在本地及远程进行备份,只需要表的读权限即可备份。pg_dump创建的备份是一致的,在pg_dump运行时数据库产生快照,不阻塞数据库的DML操作,但是会阻塞需要排他锁的操作,如alter table等。特别注意的是,pg_dump一次只能备份一个单独的数据库,且不能备份角色和表空间信息(因为这些信息是cluster-wide,而不是在某个数据库中(per-database))。

使用pg_dump的自定义转储格式。. 如果PostgreSQL所在的系统上安装了zlib压缩库,自定义转储格式将在写出数据到输出文件时对其压缩。这将产生和使用gzip时差不多大小的转储文件,但是这种方式的一个优势是其中的表可以被有选择地恢复。

下面的命令使用自定义转储格式来转储一个数据库:pg_dump -Fc dbname > filename自定义格式的转储不是psql的脚本,只能通过pg_restore恢复,例如:pg_restore -d dbname filename

2、常见用法

pg_dump只备份数据库集群中的某个数据库的数据,它不会导出角色和表空间相关的信息。pg_dumpall则可以导出整个数据库集群中所有的数据库中的数据,同时也会导出角色、用户和表空间的定义信息。

执行pg_dumpall需要超级用户权限。

1、语法

2、常用用法

COPY在PostgreSQL表和文件之间交换数据。 COPY TO把一个表的所有内容都拷贝到一个文件,而COPY FROM从一个文件里拷贝数据到一个表里(把数据附加到表中已经存在的内容里)。 COPY TO还能拷贝SELECT查询的结果。

如果声明了一个字段列表,COPY将只在文件和表之间拷贝已声明字段的数据。 如果表中有任何不在字段列表里的字段,那么COPY FROM将为那些字段插入缺省值。

带文件名的COPY指示PostgreSQL服务器直接从文件中读写数据。 如果声明了文件名,那么服务器必须可以访问该文件,而且文件名必须从服务器的角度声明。 如果使用了PROGRAM选项,则服务器会从指定的这个程序进行输入或是写入该程序作为输出。 如果使用了STDIN 或STDOUT选项,那么数据将通过客户端和服务器之间的连接来传输。

注意:copy命令必须在plsql命令行执行,执行用户必须为superuser,普通用户进行执行,需要在copy前面加入 “\\”,即 \\copy。

COPY只能用于表,不能用于视图,不过可以用于COPY (SELECT * FROM viewname) TO …

1、语法

copy to的导出速度非常之快,经测试10W的数据量只需要3秒左右的时间。

COPY FROM能够识别下列特殊反斜杠字符:

2、常见用法

1、基础备份

2、恢复

PostgreSQL有一个导出和导入事务快照的功能,这个功能在9.2版本开始支持,允许事务共享它当时的snapshot给其他的事务使用。SET TRANSACTION SNAPSHOT命令允许新的事务使用与一个现有事务相同的快照运行。已经存 在的事务必须已经把它的快照用pg_export_snapshot函数导出。该函数会返回一个快照标识符,SET TRANSACTION SNAPSHOT需要被给定一个快照标识符来指定要导入的快照。需要注意的是:只有事务是SERIALIZABLE以及 repeatable read时,DEFERRABLE 事务属性才会有效。

PostGreSQL采用“快照”方式来实现MVCC。具体地说,这意味着每一个事务中的查询仅能看到:

1)该事务启动之前已经提交的事务所作出的数据更改。

2)当前事务中该查询之前的查询所作出的更改。

下面基于事务隔离级别repeatable read进行测试

1、建表

2、session1:

3、session2(插入一条新数据并提交):

4、session3(能查看到会话2插入的数据):

5、session4 (导入s1的第一个snapshot, 因此看不到s2提交的数据) :

6、session5 (导入s1的第二个snapshot, 因此看不到s2提交的数据, 同时验证了看不到s1修改过的数据):

7、session1(提交):

8、session4 (s1提交后, 这个snapshot还存在, 只要还有导入了这个snapshot的事务存在着) :

9、session5 (s1提交后, 这个snapshot还存在, 只要还有导入了这个snapshot的事务存在着)

篇幅有限,基于时间点恢复的内容后面单独介绍吧,感兴趣的朋友可以关注下!

数据库备份方案及策略

由于Oracle/Mysql存在多种数据库备份方式,而且各有利弊,对于我们初学者来说,选择合适的备份方式确实有些困难。个人觉得,首先要基于公司的需求,考虑能够容忍丢失多少数据、花多少人力时间成本等,这是我们制定备份方案的依据,同时制定出来的方案要可执行,要执行,不能把方案当作纸上谈兵。下面我把我们实际的备份方案整理出来供大家参考交流。

作为数据安全的一个重要内容——数据备份的重要性却往往被人们所忽视。只要发生数据传输、数据存储和数据交换,就有可能产生数据故障。这时,如果没有采取数据备份和数据恢复手段与措施,就会导致数据的丢失,有时造成的损失是无法弥补与估量的。结合我们公司线上业务的实际情况,来说说我们的备份方案,当前主要采取全备+binlog备份方式。其中全备分为逻辑备份+物理备份,同时主从复制也作为一种备份的方式存在,从而最大程度降低数据故障带来的风险。

一 数据备份部分

1 逻辑备份

应用场景

逻辑备份,我们主要用在当数据量较小时,数据库出现数据故障,对于恢复时间要求不高;搭建主从环境,搭建测试环境及备用库等方面。

备份时间及地点

每日凌晨3:10在从库上备份,备份文件存放在从库上的/data/backup/fullbackup,当然如果有充足的机器,更安全的方式是备份到远程服务器。

备份方式

采用Oracle/Mysqldump进行全库备份,通过定时任务,定时执行shell备份脚本。这里就不提供了。

2 物理备份

应用场景

主要应对要求恢复时间较高;数据量比较大;

备份时间及地点

每周一凌晨3:10在主库上备份。备份文件存放远程服务器目录下

备份方式

采用percona的社区工具innobackupex,该工具可以在线热备,不影响线上的业务。

以上两种方式的备份只能恢复某段时间的数据,对于按照时间点的恢复是无能为力的,那怎么办呢?binlog日志,是的,我们采取的是实时同步binlog日志到远程服务器上,这样理论上是可以恢复到任意时间点的。

3 binlog备份

应用场景

对于一些由于错误操作等造成数据丢失错误的,需要按照时间点进行还原的情况下。

备份时间及地点

备份服务器实时将主库上binlog同步到远程服务器上。

备份方式

Oracle/Mysqlbinlog工具进行日志拉取,shell脚本如下:

Oracle/Mysqlbinlog –read-from-remote-server –host=1.1.1.1 –port=3306 –user=\”backup\” –password=\”backup\” –raw –stop-never Oracle/Mysql-bin.000840 –result-file=/data/backup/binlog/

经过以上三种结合的备份方式,基本上可以满足在数据异常丢失情况下,恢复到正常状态。

4 主从复制

应用场景

主要应用于读写分离,故障转移的情况下

备份时间及地点

几乎可以认为是同步进行数据的复制

备份方式

采用UcacheOracle/Mysql提供的复制技术

对于主从复制,如果用于备库的话,最好是让sql_thread执行慢一段时间,可以是1天。这个结合实际情况,自己选择。

在全球大数据暴增的趋势下,市场上以Oracle/Mysql为主的数据库的数据量也越来越大。当数据呈指数增长时,数据备份时间也将随着数据量的增长而加长,这样就很难实现高效的数据保护。对于超大型Mysql/Oracle数据库的保护一直是业界的难题,尤其是如何在较短的时间内,完成数据的备份和有效性验证。UcacheBankup产品凭借多年的数据保护经验,推出了UCache灾备云这一套高效的Oracle/Mysql数据库保护

135E3J��qaq

常见的数据库备份方法,常用的数据库备份方法有哪三种

  数据库作为存储和管理这些信息的核心,其安全性和稳定性尤为重要。因此,定期进行数据库备份是保护数据完整性的重要途径。下面我们就详细介绍几种常见的数据库备份方法。

  全备份是指备份数据库中的所有数据和元数据。这种方法通常用于开发或测试环境,因为它可以确保在出现问题时恢复到最新情况。全备份可以通过数据库管理系统进行(DBMS)提供的导出功能,如MySQL的MySQLdump指令。  与全备份相比,增量备份只备份自上次备份以来发生改变的数据信息。这大大减少了备份所需的时间和内存空间,但所有的增量备份文件都需要修复。增量备份通常使用日志文档或二进制日志(binlog)来实现。例如,MySQL的二进制日志可用于增量备份。  差异备份是全备份和增量备份之间的一种手段,只备份自上次全备份或增量备份以来发生改变的数据信息。这使得差异备份既节省了内存空间,又保证了数据的一致性。差异备份通常由DBMS提供的导入功能实现。  在线备份需要在数据库运行中备份,不需要终止数据库服务。这种方法对大型数据库非常有效,因为它可以减少对业务的影响。在线备份通常是根据DBMS提供的复制功能来实现的,比如MySQL的主从复制。  离线备份需要在数据库停止服务后进行备份,通常需要大量的内存空间和较长的恢复期。然而,它可以随时进行,因为它不依赖于数据库服务。离线备份通常使用DBMS提供的导出功能,如MySQL的MySQLdump指令。  选择哪种数据库备份取决于具体的业务需求和环境。全备份、增量备份、差异备份和在线备份各有优缺点,必须根据实际情况进行选择。无论选择哪种方式,定期数据库备份都是维护数据安全的主要过程。

在数字化时代,数据安全是我们不容忽视的问题。云呐容灾备份系统强大的数据保护功能,丰富的报告和监控功能,及时发现并解决问题。

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。