超详细的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的事务存在着)
篇幅有限,基于时间点恢复的内容后面单独介绍吧,感兴趣的朋友可以关注下!
Mysql数据库操作指引(四)——数据库物理备份与恢复
简介:数据备份对于数据库而言是至关重要的。当数据文件发生损坏、系统内核崩溃、计算机硬件损坏或者数据被误删等事件时,使用一种有效的数据备份方案,就可以快速解决以上所有的问题。MySQL提供了多种备份方案,一般分为物理备份和逻辑备份。
物理备份通过直接复制包含有数据库内容的目录与文件实现,这种备份方式适用于对重要的大规模数据进行备份,并且要求实现快速还原的生产环境。典型的物理备份就是复制 MySQL数据库的部分或全部目录,物理备份还可以备份相关的配置文件。但采用物理备份需要MySQL处于关闭状态或者对数据库进行锁操作,防止在备份的过程中改变发送数据。
逻辑备份通过保存代表数据库结构及数据内容的描述信息实现,保存创建数据结构以及添加数据内容的SQL语句,这种备份方式适用于少量数据的备份与还原。逻辑备份需要查询MySQL服务器获得数据结构及内容信息,因为需要查询数据库信息并将这些信息转换为逻辑格式,所以相对于物理备份而言比较慢。逻辑备份不会备份日志、配置文件等不属于数据库内容的资料。逻辑备份的优势在于不管是服务层面、数据库层面还是数据表层面的备份都可以实现,这种备份与系统、硬件无关。
本文主要介绍数据库的物理备份与在突发情况下的数据恢复,并通过实际操作进行检验。详细内容请参考下文。
一、访问Mysql
1、登陆linux系统
2、查看mysql服务
执行指令 # systemctl status mysqld
二、Mysql数据库物理备份与恢复
1、停止mysql服务
查看指令# systemctl stop mysqld
2、备份mysql数据
(1)、创建备份目录
执行指令 # mkdir /backup
(2)、备份数据
执行指令 # tar zcvf /backup/mysql_backup-$(date +%F).tar.gz /var/lib/mysql/
(3)、模拟数据库丢失
执行指令 # mv /var/lib/mysql/zrlog /opt/
3、恢复mysql数据
(1)、创建恢复目录
执行指令 # mkdir /restore
(2)、恢复数据
执行指令 # tar zxvf /backup/mysql_backup-2022-08-08.tar.gz -C /restore
(3)、模拟数据恢复
执行指令 # mv /restore/var/lib/mysql/zrlog /var/lib/mysql
三、恢复数据后检验
1、启动mysql服务
查看指令# systemctl start mysqld
2、查看数据库
(1)、访问数据库
查看指令# mysql -u root -p password
(2)、查看已有的库
MySQL>show databases;
(3)、查看zrlog中的数据表
(4)、查看user数据表
MySQL>select * from zrlog;
四、Mysql逻辑备份与恢复
后续介绍… …
Oracle数据库的备份与恢复,实用易学简单,转发收藏备用
Oracle数据库非常强大,有其自己的备份与恢复机制,并且细分,只要配置合理,完全可以保证数据库的完整,免去运维人员的后顾之忧。
Oracle数据库使用RMAN备份,需要把数据库的非归档模式改成归档模式。
一、更改数据库的归档模式需要重新启动数据库,在mount模式下修改(三种启动模式nomount—mount— open)。
具体步骤如下:
1、进入数据库后,关闭数据库
SQL>shutdown immediate
2、启动数据库到mount状态
SQL>startup mount
3、改变数据库为归档模式
SQL>alter database archivelog;(归档改为非归档语句为alter database noarchivelog;)
4、验证方式
SQL>alter database open;(打开数据库)
SQL>archive log list
二、启动控制文件的自动备份
RMAN>configure controlfile autobackup on;
RMAN>show controlfile autobackup ;(验证)
三、全库备份
3.1最简单的全库备份
RMAN>backup database;
RMAN>list backup;(验证)
RMAN>list backup summary;(验证)
四、脚本备份
4.1查看linux系统oracle用户的环境变量,从而知道需要备份数据库的名称和实例
$ cat /home/oracle/.bash_profile
主要看ORACLE_SID=orcl
4.2在RMAN中设置冗余数(备份的次数,根据需要,一次备份的数据大小,备份的磁盘空间大小来决定)。
$ rman target/
RMAN>configure retenticn policy to redundancy 10;(这里设置为10次)
4.3规划备份的目录
/usr/local/oradata/orcl/RmanBackup,如果没有,创建即可,这里需要注意这个文件夹必须属于oracle用户。
4.4全量备份脚本如下图
这个0级全量备份脚本需要在oracle用户下执行,并且需要把脚本chmod为775权限。
export ORACLE_BASE=/usr/local/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
rman target/ << EOF_RMAN
run{
allocate channel c1 type disk;
backup incremental level 0 tag \’db0\’ format
\’/usr/local/oradata/orcl/RmanBackup/db0_%d_%U\’ database include current controlfile;
delete noprompt obsolete;
release channel c1;
}
#end
把以上脚本放置到crontab中,可以设置自动执行。
4.3增量备份脚本
export ORACLE_BASE=/usr/local/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
rman target/ << EOF_RMAN
run{
allocate channel c1 type disk;
backup incremental level 1 tag \’db1\’ format
/usr/local/oradata/orcl/RmanBackup/db1_%d_%T_%s\’ database include current controlfile;
delete noprompt obsolete;
release channel c1;
}
#end
Oracle数据库的恢复需要在oracle用户下执行,恢复内容包括控制文件*.ctl,重组日志文件*.log,数据库文件*.dbf。
一、恢复dbf文件
前提条件是Oracle数据库的初始化spfile文件,控制文件、重组日志文件、归档日志、备份都可以正常使用。
现在先删除dbf文件。
1、关闭数据库,再重新数据库,进入数据库
1.1 $ sqlplul / as sysdba
SQL>shutdown immediate(无法正常关闭,原因是没有数据库文件)
SQL>shutdown abort(强制关闭)
1.2 SQL>startup(无法正常启动,原因是没有数据库文件)
1.3恢复
$ rman target/
Oracle数据库没有处于open状态,这是因为数据库找不到数据文件,所以目前的数据库处于mount状态。
1.3.1 还原文件
RMAN> restore database;
1.3.2验证
进入存放dbf文件的目录查看,dfb文件已经被恢复。
1.3.3继续恢复数据
RMAN> recover database;
1.3.4打开数据库的open状态
RMAN> sql \’alter database open\’;
恢复完成,下面退出oracle数据库的rman环境,重新进入数据库。
[oracle@shell ~]$ sqlplus / as sysdba
SQL> select instance_name,status from v$instance;
查看重做日志文件是否为原来的重做日志文件
SQL> archive log list;
由上图显示,数据库的重做日志的序号没有从1开始,证明还是原来的重做日志。数据库进行了完全恢复。
恢复成功后,最好立刻备份数据。
二、重做日志文件损坏的恢复
2.1确定数据库的备份状态
必须是oracle用户,执行rman target/
查看数据库备份信息
2.2删除重做日志文件
2.3重做日志
$sqlplus / as sysdba
SQL> alter system switch logfile;
数据库会报错
这里第一行主要出现
ORA-01034: ORACLE not available的错误
此时可以重新启动到mount状态
SQL> startup mount;
继续恢复
SQL> alter database open resetlogs;
SQL> select * from v$log;
SQL> alter database open resetlogs;
第一行出现错误,ORA-01139:RESETLOGS选项仅在不完全数据库恢复后有效。
SQL> recover database until time \’2021-06-16 09:09:09\’;
完成介质恢复。把数据恢复到6月19日9点09分09秒。
SQL> alter database open resetlogs;
数据库已经更改
SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE例程已经关闭。
SQL> startup
ORACLE实例已经启动。
数据库装载完毕。
数据库已经打开。
SQL> select instance_name,status from v$instance;
查看文件.log文件在/usr/local/oradata/orcl目录下
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。