PostgreSQL 11(七)导入导出与备份还原

参考: PostgreSQL 11 Backup and Restore

pg_dump、pg_dumpall、pg_dumpall 逻辑备份还原

---------------------------------------------------------
pg_dump 逻辑导出、导入 (https://www.yiibai.com/manual/postgresql/app-pgdump.html)
---------------------------------------------------------
# '-C' 包含 'create database' 命令:
pg_dump -p 5433 -C -d test > /opt/postgre_data/backup/dump.sql

# '-c' 包含 'drop database' 命令:
pg_dump -p 5433 -C -c -d test > /opt/postgre_data/backup/dump.sql

# '-c --if-exists' 包含 'drop table if exist' 命令:
pg_dump -p 5433 -c --if-exists -d test > /opt/postgre_data/backup/dump.sql


#导出时不需要包含创建数据库的命令,导入时可以指定到任意数据库
pg_dump -p 5433 --inserts --column-inserts --no-comments --quote-all-identifiers -d test > /opt/postgre_data/backup/dump.sql

# 压缩导出
pg_dump -p 5433 --inserts --column-inserts -d test | gzip > /opt/postgre_data/backup/dump.sql.gz


# 【导入】
psql -p 5432 demo < /opt/postgre_data/backup/dump.sql

---------------------------------------------------------
pg_dumpall 逻辑导出、导入
---------------------------------------------------------

# 【导出】所有数据库及其他信息,包括角色、表空间等 
pg_dumpall -p 5433 --inserts --column-inserts --no-comments --quote-all-identifiers > /opt/postgre_data/backup/dumpall.sql

# 【导入】需要超级用户权限
psql -p 5433 -f /opt/postgre_data/backup/dumpall.sql postgres


---------------------------------------------------------
pg_restore  导入
---------------------------------------------------------
# 其他格式(Fc/Ft)导出,可用 pg_restore 还原
pg_dump -p 5433 --no-comments -Ft -d test > /opt/postgre_data/backup/test.sql


# 如果数据库不存在,加上选项'-C'来创建,数据库名称要与备份的一致
pg_restore -p 5433 -d test /opt/postgre_data/backup/test.sql
pg_restore -p 5433 -C -d test /opt/postgre_data/backup/test.sql

 

物理备份还原

预写日志(WAL)存放目录为 pg_wal,日志记录数据库中的所有修改信息,可用于系统崩溃恢复,日常数据恢复等。WAL 将日志分隔成多段,每段16M。WAL 不进行归档的时候,系统会创建几段文件循环重复覆盖写入。如启用归档,需设置配置参数 wal_level  为 replica 或更高,同时设置 archive_mode 为 on 状态。归档成功后,将被删除或者被新的数据覆盖。当归档命令(archive_command)成功时,它才返回零。archive_command 在配置文件reload后可生效。归档可恢复数据,但不会对配置文件(postgresql.conf, pg_hba.conf, pg_ident.conf)恢复,需单独备份配置文件档命令仅在已经完成的 WAL 段上调用,如果日志少致使长时间才归档,可以设置 archive_timeout 指定时间强制切换WAL 段,也可手动执行命令 pg_switch_wal 切换。
 

启用归档设置(须重启服务)

# vim /var/lib/pgsql/11/data/postgresql.conf
wal_level = replica			# minimal / replica(9.6 以前为 archive,hot_standby)
archive_mode = on
archive_command = 'test ! -f /opt/postgre_data/archivedir/%f && cp %p /opt/postgre_data/archivedir/%f' 

【备份方法一】

# 【备份方法一】data01 为一个新的空目录(或未创建的目录)
su - postgres bash -c 'pg_basebackup -Ft -P -z -v -Z 5 -c fast -X stream  -D /opt/postgre_data/backup/data01'

【备份方法二】

# 【备份方法二】 
# pg_start_backup(label text [, fast boolean [, exclusive boolean ]])
# pg_stop_backup(exclusive boolean [, wait_for_archive boolean ])

su - postgres 
psql -c "select pg_start_backup('hot_backup', false, false);"
tar -jcvf /opt/postgre_data/backup/data.tar.bz2 /var/lib/pgsql/11/data
psql -c "select pg_stop_backup(false, true);"

# 结果显示
NOTICE:  pg_stop_backup complete, all required WAL segments have been archived
                               pg_stop_backup                                
NOTICE:  pg_stop_backup complete, all required WAL segments have been archived
                               pg_stop_backup                                
-----------------------------------------------------------------------------
 (0/3A000370,"START WAL LOCATION: 0/39000028 (file 000000010000000000000039)+
 CHECKPOINT LOCATION: 0/39000060                                            +
 BACKUP METHOD: streamed                                                    +
 BACKUP FROM: master                                                        +
 START TIME: 2019-03-20 10:17:18 CST                                        +
 LABEL: hot_backup                                                          +
 START TIMELINE: 1                                                          +
 ","18141 /var/lib/pgsql/11/data/ts_user01")                                +

 

【时间点还原】

当前服务器已存在数据库实例(端口为6401),现在需要查看 实例6401某个时间点的数据,此处在当前服务器新增一个实例来回复数据查看。

======================================================================================
备份
======================================================================================
#数据库完整目录备份
su postgres
pg_basebackup -p 6401 -Ft -P -z -v -Z 5 -c fast -X stream -D /data/pgbackup/pg6401_20191031

#新增数据
psql -p 6401
CREATE TABLE tab( id SERIAL PRIMARY KEY, inserttime TIMESTAMPTZ NOT NULL DEFAULT now());

INSERT INTO tab VALUES(DEFAULT,DEFAULT);SELECT pg_sleep(5);
INSERT INTO tab VALUES(DEFAULT,DEFAULT);SELECT pg_sleep(5);
INSERT INTO tab VALUES(DEFAULT,DEFAULT);SELECT pg_sleep(5);
INSERT INTO tab VALUES(DEFAULT,DEFAULT);SELECT pg_sleep(5);
INSERT INTO tab VALUES(DEFAULT,DEFAULT);SELECT pg_sleep(5);
INSERT INTO tab VALUES(DEFAULT,DEFAULT);SELECT pg_sleep(5);
DELETE FROM tab WHERE id = 2;
INSERT INTO tab VALUES(DEFAULT,DEFAULT);SELECT pg_sleep(5);
INSERT INTO tab VALUES(DEFAULT,DEFAULT);SELECT pg_sleep(5);
INSERT INTO tab VALUES(DEFAULT,DEFAULT);
SELECT * FROM tab;

#先归档日志(WAL文件没写完不会自动归档)
SELECT pg_switch_wal();


======================================================================================
时间点还原
======================================================================================
#配置新实例(用来还原)
su postgres
mkdir -p /data/pg6410
mkdir -p /data/pgbackup/6410/archive

#解压到数据目录
tar -xzvf /data/pgbackup/pg6401_20191031/base.tar.gz -C /data/pg6410

#此测试因在同一台服务器,所以这里换个实例端口
sed -i 's/6401/6410/g' /data/pg6410/postgresql.conf

#配置还原的时间点(此处归档目录从/data/pgbackup/6401读取,注意时区!)
cat << EOF > /data/pg6410/recovery.conf
#recovery_target_time = '2019-10-31 05:24:18+08'
recovery_target_time = '2019-10-31 05:24:18'
restore_command = 'cp /data/pgbackup/6401/archive/%f %p'
EOF


#启动服务!
chmod 0700 /data/pg6410
pg_ctl -D /data/pg6410 -l /data/pg6410/logfile.log start

#此时可以访问数据库查看表数据了!

------------------------------------------------------
#如果还原时间预计不对,还可继续还原(从新更改时间)
cat << EOF > /data/pg6410/recovery.conf
recovery_target_time = '2019-10-31 05:24:30'
restore_command = 'cp /data/pgbackup/6401/archive/%f %p'
EOF

#重启服务
pg_ctl -D /data/pg6410 -l /data/pg6410/logfile.log restart
------------------------------------------------------

#最后执行!恢复完成(recovery.conf文件名字将变成recovery.done)
SELECT pg_wal_replay_resume();

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Navicat Premium是一个数据库开发工具,可让您从单个应用程序同时连接到MySQL,MariaDB,MongoDB,SQL Server,Oracle,PostgreSQL和SQLite数据库。与Amazon RDS,Amazon Aurora,Amazon Redshift,Microsoft Azure,Oracle Cloud,Google Cloud和MongoDB Atlas等云数据库兼容。您可以快速轻松地构建,管理和维护数据库。 设置数据源连接后,可以使用“导入向导”将数据从多种格式或从ODBC传输到数据库中。将数据从表/集合,视图或查询结果导出为Excel,Access,CSV等格式。使用我们的内置编辑器添加,修改和删除记录,您可以在Tree View,JSON View和类似电子表格的经典Grid View中方便地进行编辑。Navicat为您提供有效管理数据并确保流程平稳所需的工具。 Visual SQL / Query Builder将帮助您创建,编辑和运行SQL语句/查询,而不必担心语法和命令的正确用法。通过获取关键字建议并从编码中去除重复内容,使用“代码完成”和可自定义的代码段快速进行编码。使用我们的调试组件,例如设置断点,单步执行程序,查看和修改变量值以及检查调用堆栈,可以快速找到并纠正PL / SQL和PL / PGSQL编码错误。 使用我们专业的对象设计器创建,修改和管理所有数据库对象。使用复杂的数据库设计和建模工具将数据库转换为图形表示形式,以便您可以轻松地建模,创建和理解复杂的数据库。 我们的图表功能使您可以创建大型数据集的可视表示形式,并帮助您从数据中获得更深刻的见解。探索并发掘数据之间的模式,趋势和关系,并创建有效的视觉输出,以将您的发现显示在仪表板上以进行共享。 我们功能强大的本地备份/还原解决方案以及针对MongoDump,Oracle Data Pump和SQL Server Backup Utility的直观GUI,可指导您完成备份过程并减少潜在的错误。为可重复部署的过程设置自动化,例如在特定时间或日期执行数据库备份,MapReduce作业和脚本执行。无论您身在何处,都可以随时完成工作。 使用我们的内置模式可视化工具发现和探索您的MongoDB模式。分析文档并在集合中显示丰富的结构,以便您可以了解数据的架构,查找架构异常并轻松检查异常值。 通过SSH隧道和SSL建立安全连接,可确保每个连接都是安全,稳定和可靠的。支持不同的数据库服务器身份验证方法,例如MySQL和MariaDB的PAM身份验证,MongoDB的Kerberos和X.509身份验证以及PostgreSQL的GSSAPI身份验证。Navicat提供了更多的身份验证机制和高性能环境,因此您不必担心通过不安全的网络进行连接。
Navicat [1] 是一套快速、可靠并价格相宜的数据库管理工具, 专为简化数据库的管理及降低系统管理成本而设。它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息。 Navicat是闻名世界、广受全球各大企业、政府机构、教育机构所信赖,更是各界从业员每天必备的工作伙伴。自2001 年以来,Navicat 已在全球被下载超过 2,000,000 次,并且已有超过 70,000 个用户的客户群。《财富》世界 500 强中有超过 100 家公司也都正在使用 Navicat。 Navicat提供多达 7 种语言供客户选择,被公认为全球最受欢迎的数据库前端用户界面工具。 它可以用来对本机或远程的 MySQL、SQL Server、SQLite、Oracle 及 PostgreSQL 数据库进行管理及开发。 Navicat的功能足以符合专业开发人员的所有需求,而且对数据库服务器的新手来说又相当容易学习。有了极完备的图形用户界面 (GUI),Navicat 让你可以以安全且简单的方法创建、组织、访问和共享信息。 Navicat适用于三种平台 - Microsoft Windows、Mac OS X 及Linux。它可以让用户连接到任何本机或远程服务器、提供一些实用的数据库工具如数据模型、数据传输、数据同步、结构同步、导入导出备份还原、报表创建工具及计划以协助管理数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值