PostgreSQL备份和恢复自动化的方法

发布时间:2022-02-28 17:02:06 作者:iii
来源:亿速云 阅读:170

这篇“PostgreSQL备份和恢复自动化的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PostgreSQL备份和恢复自动化的方法”文章吧。

SQL 转储

这种转储方法背后的想法是使用 SQL 命令从 DataCenter1 生成一个文本文件,当反馈到 DataCenter2 服务器时,将重新创建与转储时相同状态的数据库。在这种情况下,如果客户端无法访问主服务器,他们可以访问 BCP 服务器。PostgreSQL 为此提供了实用程序 pg_dump。该命令的基本用法是:  pg_dump dbname >backupoutputfile.db。

如您所见,pg_dump 将其结果写入标准输出。下面,我们将看到这如何有用。

pg_dump 是一个常规的 PostgreSQL 客户端应用程序。这意味着您可以从任何有权访问数据库的远程主机执行此备份过程。pg_dump 不以特殊权限运行。特别是,它必须对您要备份的所有表具有读访问权限,因此在实践中,您几乎总是必须以数据库超级用户身份运行它。

pg_dump 创建的转储在内部是一致的,也就是说,转储代表 pg_dump 开始运行时数据库的快照。pg_dump 在工作时不会阻止对数据库的其他操作。(具有排他锁的例外,例如大多数形式的 ALTER TABLE。)

重要提示:如果您的数据库模式依赖于 OID(例如作为外键),您必须指示 pg_dump 也转储 OID。为此,请使用 -o 命令行选项。

SQL 转储自动化

Pgbackup.yml

---
- hosts: database_prim:database_replica
  gather_facts: true
  vars_files:
    - mysecret_vars/{{ environ }}.yml
# This is to Identify if DB is Primary and replicating data to secondary
  tasks:
  - name: select pg status
    command: psql -c "SELECT pg_is_in_recovery();"
    register: IsPromoted
    changed_when: False
    environment:
      PGDATABASE: "{{ pg_database }}"
      PGUSER : "{{ pg_username }}"
      PGPASSWORD : "{{ pg_password }}"
#Get the DB parameter from run time on Client application, Not required if you have parameters
  - block:
    - name: Get client database settings
      shell: "awx-manage print_settings | grep '^DATABASES'"
      register: results
      changed_when: False
      delegate_to: "{{ groups['client’][0] }}"
    - name: Ingest client database settings
      set_fact:
        client_db_settings: "{{ results.stdout | regex_replace('DATABASES\\s+= ', '') }}"
      delegate_to: "{{ groups['client'][0] }}" 
    - include_role:
        name: pgbackup
    when: "'f' in IsPromoted.stdout"
  tags: pgbackup
---
- name: Determine the timestamp for the backup.
  set_fact:
    now: '{{ lookup("pipe", "date +%F-%T") }}'
- name: Create a directory for a backup to live.
  file:
    path: '{{ backup_dir.rstrip("/") }}/{{ now }}/'
    mode: 0775
    owner: root
    state: directory
- name: Create a directory for non-instance specific backups
  file:
    path: '{{ backup_dir.rstrip("/") }}/common/'
    mode: 0775
    owner: root
    state: directory
# create dump, Here adding runtime param. You can add param whatever ways
- name: Perform a PostgreSQL dump.
  shell: "pg_dump --clean --create --host='{{ client_db_settings.default.HOST }}' --port={{ client_db_settings.default.PORT }} --username='{{ tower_db_settings.default.USER  }}' --dbname='{{ tower_db_settings.default.NAME }}' > pgbackup.db"
  args:
    chdir: '{{ backup_dir.rstrip("/") }}/common/'
  environment:
    PGPASSWORD: "{{ client_db_settings.default.PASSWORD }}"
- name: Copy file with owner and permissions
  copy:
    src: '{{ backup_dir.rstrip("/") }}/common/pgbackup.db'
    dest: '{{ backup_dir.rstrip("/") }}/{{ now }}/'
    remote_src: yes

以上就是关于“PostgreSQL备份和恢复自动化的方法”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

推荐阅读:
  1. postgresql使用pg_rman备份恢复
  2. elasticsearch的备份和恢复

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

postgresql

上一篇:Presto有哪些特征

下一篇:怎么设计一个看起来很厉害的API接口

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》