zoukankan      html  css  js  c++  java
  • pg数据库的备份和恢复

    1 备份恢复方法

    • sql转储
    • 文件系统级备份
    • 连续归档

    2 sql转储

    sql转储方法的思想就是创建一个由SQL命令组成的文件,当把这个文件返回数据库时候,数据库利用其中的sql命令重建与转储状态一样的数据库实例。postgresql提供的工具是pg_dump,这个工具的基本用法如下:

    备份:pg_dump dbname > outfile
    恢复:psql dbname < infile
    

    需要注意的是,上述两个命令都是在postgres用户下运行的,outfile和infile都是sql文件。

    2.1 pg_dump

    pg_dump是一个普通的客户端工具,如果不指定主机IP和端口,那么默认备份的是本地服务器上的数据库。一般来说,这个命令由超级管理员来运行,这样可以备份到整个数据库的所有对象。由数据库创建的对象是一致的,即在运行pg_dump那一刻存储了该时刻的数据库快照,这个命令在运行过程中数据库的更新不会被转储。同时,pg_dump不会阻塞其他对数据库的操作。

    以下是一个数据库转储文件的例子,从转储文件中的内容来看,是由一系列的sql语句组成,包含了重建这个数据库所有的sql操作。

    --
    -- PostgreSQL database dump
    --
    
    -- Dumped from database version 9.6.3
    -- Dumped by pg_dump version 9.6.3
    
    SET statement_timeout = 0;
    SET lock_timeout = 0;
    SET idle_in_transaction_session_timeout = 0;
    SET client_encoding = 'UTF8';
    SET standard_conforming_strings = on;
    SET check_function_bodies = false;
    SET client_min_messages = warning;
    SET row_security = off;
    
    --
    -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:
    --
    
    CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
    
    
    --
    -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:
    --
    
    COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
    
    
    SET search_path = public, pg_catalog;
    
    SET default_tablespace = '';
    
    SET default_with_oids = false;
    
    --
    -- Name: module_permission; Type: TABLE; Schema: public; Owner: postgres
    --
    
    CREATE TABLE module_permission (
        profile_key integer NOT NULL,
        campaign_key integer NOT NULL,
        status integer NOT NULL,
        create_time date,
        modify_time date
    );
    
    
    ALTER TABLE module_permission OWNER TO postgres;
    
    --
    -- Name: userprofile_data; Type: TABLE; Schema: public; Owner: postgres
    --
    

    2.2 恢复

    pg_dump生成的sql文本可以有psql程序读取,但是注意的是恢复数据库的时候dbname是需要存在的,也就是说,转储文件中并不包含创建数据库的语句。可以在恢复之前创建一个数据库,用如下命令来创建一个数据库。

    createdb -T template0 dbname
    

    表明这个数据库dbname是基于模板template0来创建的,然后再执行如下恢复语句:

    psql dbname < infile
    

    恢复结果

    SET
    SET
    SET
    SET
    SET
    SET
    SET
    SET
    CREATE EXTENSION
    COMMENT
    SET
    SET
    SET
    CREATE TABLE
    ALTER TABLE
    CREATE TABLE
    ALTER TABLE
    CREATE TABLE
    ALTER TABLE
    CREATE TABLE
    ALTER TABLE
    CREATE SEQUENCE
    ALTER TABLE
    ALTER SEQUENCE
    CREATE TABLE
    ALTER TABLE
    CREATE SEQUENCE
    ALTER TABLE
    ALTER SEQUENCE
    CREATE TABLE
    ALTER TABLE
    CREATE VIEW
    ALTER TABLE
    ALTER TABLE
    ALTER TABLE
    COPY 10
    COPY 2514830
    COPY 2514830
    COPY 511969
     setval 
    --------
     388095
    (1 row)
    
    COPY 37
     setval 
    --------
         37
    (1 row)
    
    COPY 10
    ALTER TABLE
    ALTER TABLE
    ALTER TABLE
    ALTER TABLE
    ALTER TABLE
    ALTER TABLE
    

    默认情况下,psql在遇到一个sql执行错误后,会继续执行,并不会停止。这样可能恢复出来的就是一个不完整的数据库,需要手动修复那一小部分的错误。但是实际过程中,这种情况出现的较少,在这里不讨论,可以参考相关的数据手册中“备份和恢复”章节中的内容。

    pg_dump和psql读写管道的能力使得直接从一个服务器转储一个数据库到另外一个服务器中成为可能:

    pg_dump -h host1 dbname | psql -h host2 dbname
    

    在恢复完成后,基本可以使用,但是同时需要注意的是,需要使用新数据库的账号密码,原来数据库的账号密码并没有同步到新数据库中,同时为了在新数据库中能有更好的性能,在恢复完毕后,对全库进行一次analyze操作,在数据字典中建立统计信息。

    2.3 pg_dumpall

    pg_dump工具转储的是一个数据库dbname中所有的信息,不会转储角色和表空间等信息,如果需要完整转储整个数据库中所有的数据库实例,PostgreSQL提供了一个工具pg_dumpall,该工具能够转储一个数据库集簇中所有的内容,包含了前面提到的角色和表空间。使用的方法是:

    备份:pg_dumpall > outfile
    恢复:psql -f infile postgres
    

    从pg_dump和pg_dumpall两个工具的作用来看,前者偏向于重建一个数据库实例,这个实例中包含了基本的对象和数据信息,适用于角色等信息比较简单等,常用于定期备份使用;后者偏向于重建一个数据库集簇,适用于在一个新的环境中部署一套与原来一致的数据库环境,包括表空间和角色,尤其是在角色较多的复杂环境下,减少了手动干预的工作量。

    3 文件系统级备份

    这种备份方式比较简单粗暴,直接将存储数据库的文件进行备份,也就是通常下的pgdata目录,例如:

    tar -czvf backup.tar.gz /data1/pgdata
    

    这种方法有两个限制:
    1、为了得到可用的备份,需要停止数据库。创建完备份后,就相当于将该数据库的一个快照进行了备份,在需要时候,解压缩,启动数据库指定数据目录即可。
    2、只适用于完整的备份,不适用于部分数据库的备份。

    4 连续归档和时间点恢复

    待更新

  • 相关阅读:
    leetcode Remove Nth Node From End of List
    leetcode Plus One
    leetcode climbing stairs
    leetcode Merge Two Sorted Lists
    leetcode Maximum Subarray
    leetcode Binary Tree Level Order Traversal I II
    leetcode Pascal's Triangle II
    leetcode pascal's triangle
    leetcode valid parentheses
    leetcode Path Sum
  • 原文地址:https://www.cnblogs.com/easonbook/p/10891095.html
Copyright © 2011-2022 走看看