暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

Halo DB 14 小白零基础系列(13)--在HaloDB中的恢复工具pg_restore

冷狼 2024-12-04
53

前言

   上一篇我们讲到了HaloDB中的逻辑备份,为各位小伙伴介绍了HaloDB中常见的备份工具,那么与备份对应的恢复技巧在本篇中为大家介绍。

广告时间:

   我们的HaloDB是业内首次创造性的提出插件式内核架构设计,通过配置的方式,适配不同的应用场景,打造全场景覆盖的能力,满足企业大部分数据存储处理需求。从而消除数据孤岛,降低系统复杂度,保护企业既有投资,降低企业成本。同时支持x86、arm等异构平台之间的混合部署。
   如果有对我们的产品感兴趣的朋友可以通过主页的联系方式与我取得联系,获取license来安装体验,当然您如果有好的建议也可以提给我们,下面正式开始今天的内容。

一、HaloDB中的恢复工具pg_restore简介

   在上一期中我们讲解了如何使用HaloDB常用的逻辑备份工具pg_dump相关的备份功能,在本篇中我们重点介绍如何在HaloDB中还原我们的备份。如果有对相关内容不熟悉的朋友,上期文章链接:HaloDB 14 小白零基础系列(12)–在HaloDB中的备份与恢复浅谈
  上一期我们讲解了如何利用pg_dump进行备份,恢复则需要使用我们的pg_restore工具。
操作方式如下:
上一期我们创建了halo_zz.dump,本期讲解如何使用pg_restore:
pg_restore简单来说就是从一个由pg_dump创建的归档文件恢复数据库的工具。

[halo@halodb1 ~]$ pg_restore  --help
pg_restore restores a PostgreSQL database from an archive created by pg_dump.

Usage:
  pg_restore [OPTION]... [FILE]

General options:
  -d, --dbname=NAME        connect to database name
  -f, --file=FILENAME      output file name (- for stdout)
  -F, --format=c|d|t       backup file format (should be automatic)
  -l, --list               print summarized TOC of the archive
  -v, --verbose            verbose mode
  -V, --version            output version information, then exit
  -?, --help               show this help, then exit

Options controlling the restore:
  -a, --data-only              restore only the data, no schema
  -c, --clean                  clean (drop) database objects before recreating
  -C, --create                 create the target database
  -e, --exit-on-error          exit on error, default is to continue
  -I, --index=NAME             restore named index
  -j, --jobs=NUM               use this many parallel jobs to restore
  -L, --use-list=FILENAME      use table of contents from this file for
                               selecting/ordering output
  省略部分....
Connection options:
  -h, --host=HOSTNAME      database server host or socket directory
  -p, --port=PORT          database server port number
  -U, --username=NAME      connect as specified database user
  -w, --no-password        never prompt for password
  -W, --password           force password prompt (should happen automatically)
  --role=ROLENAME          do SET ROLE before restore

The options -I, -n, -N, -P, -t, -T, and --section can be combined and specified
multiple times to select multiple objects.

If no input file name is supplied, then standard input is used.

Report bugs to <pgsql-bugs@lists.postgresql.org>.

部分参数简介如下:

  • filename:指定要被恢复的归档文件(对于一个目录格式的归档则是目录)的位置。如果没有指定,则使用标准输入。
  • -a --data-only:只恢复数据,不恢复模式(数据定义)。这个选项类似于指定–section=data。
  • -c --clean:在重新创建数据库对象之前清除(丢弃)它们(除非使用了–if-exists)
  • -C --create:在恢复一个数据库之前县创建它。如果还指定了–clean,在连接到目标数据库之前丢弃并且重建它。
  •    如果使用–create,pg_restore还会恢复数据库的注释(如果有)以及与其相关的配置变量设置,也就是任何提到过这个数据库的ALTER DATABASE … SET …和ALTER ROLE … IN DATABASE … SET …命令。不管是否指定–no-acl,数据库本身的访问特权都会被恢复。

注意:
  在使用这个选项时,-d提到的数据库只被用于发出初始的DROP DATABASE和CREATE DATABASE命令。所有要恢复到该数据库名中的数据都出现在归档中。

  • -d dbname : 连接到数据库dbname并且直接恢复到该数据库中。dbname 可以是连接字符串。
  • -e : 在发送 SQL 命令到该数据库期间如果碰到一个错误就退出。默认行为是继续并且在恢复结束时显示一个错误计数。
  • -f filename : 为生成的脚本指定输出文件,或在与-l选项一起使用时为列表指定输出文件。为 stdout用 -。
  • -F format : 指定归档的格式。并不一定要指定该格式,因为pg_restore将会自动决定格式。
  • -I index: 只恢复提及的索引的定义。可以通过写多个-I开关指定多个索引。

二、示例:

1、对数据库进行备份:

----查询系统当前数据库
halo0root=#=# SELECT * FROM pg_database;
  oid  |  datname  | datdba | encoding | datcollate |  datctype  | datistemplate | datallowconn | datconnlimit
 | datlastsysoid | datfrozenxid | datminmxid | dattablespace |               datacl                
-------+-----------+--------+----------+------------+------------+---------------+--------------+-------------
-+---------------+--------------+------------+---------------+-------------------------------------
     1 | template1 |     10 |        6 | en_US.utf8 | en_US.utf8 | t             | t            |           -1
 |         13592 |          480 |          1 |          1663 | {=c/postgres,postgres=CTc/postgres}
 13592 | template0 |     10 |        6 | en_US.utf8 | en_US.utf8 | t             | f            |           -1
 |         13592 |          480 |          1 |          1663 | {=c/postgres,postgres=CTc/postgres}
 16386 | mydb      |     10 |        6 | en_US.utf8 | en_US.utf8 | f             | t            |           -1
 |         13592 |          480 |          1 |          1663 | 
 16384 | test2     |     10 |        6 | en_US.utf8 | en_US.utf8 | f             | t            |           -1
 |         13592 |          480 |          1 |          1663 | 
(5 rows)
----使用pg_dump进行备份
halodbzz=# \q 
[halo@halodb1 ~]$ pg_dump -Fc -v -f mydb.dump mydb
pg_dump: last built-in OID is 16383
pg_dump: reading extensions
pg_dump: identifying extension members
pg_dump: reading schemas
pg_dump: reading user-defined tables
pg_dump: reading user-defined functions
pg_dump: reading user-defined types
pg_dump: reading procedural languages
pg_dump: reading user-defined aggregate functions

.....
pg_dump: saving database definition
pg_dump: dumping contents of table "public.halodbzz"

2、开始恢复

[postgres@pgzz ~]$  pg_restore -v -C -d mydb mydb.dump
pg_restore: connecting to database for restore
pg_restore: creating DATABASE "mydb"
pg_restore: connecting to new database "mydb"
pg_restore: connecting to database "mydb" as user "mydb"
pg_restore: creating TABLE "public.hmydb"
pg_restore: processing data for table "public.mydb"
pg_restore: creating CONSTRAINT "public.mydbdb mydb_email_key"
pg_restore: creating CONSTRAINT "public.mydbdb mydbdb_pkey"

这样,halodbzz 数据库就完成了恢复。

3、验证恢复成果

halo0root=# \c mydb
You are now connected to database "mydbdbzz" as user "halo".
halodbzz=# select * from halodbzz;
 id |  username   |          email          | age |         created_at         
----+-------------+-------------------------+-----+----------------------------
  1 | zhangchenxi | zhangchenxi@example.com |  18 | 2024-04-17 22:15:38.191357
  2 | sky         | sky@example.com         |  18 | 2024-04-17 22:15:38.191357
  3 | Salvatorezz | charlie@example.com     |  18 | 2024-04-17 22:15:38.191357
(3 rows)

至此恢复完成。另外如果针对表恢复以及相关操作,建议各位小伙伴自己探索。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论