[学习笔记] Postgresql 备份与恢复总结


Postgresql备份与恢复


 
Postgresql数据库备份与恢复种类:

        物理备份与还原:备份
PGDATA, 归档文件,以及所有表空间目录,适于跨小版本的恢复,但是不能跨平台;

        逻辑备份与还原:备份数据,适用于跨版本和跨平台的恢复。
        
        备份恢复方式通常有三种:

        1)SQL 转储(逻辑)
        2)文件系统级别备份( 物理-冷备份)
        3)在线热备份(物理-归档)
        4)pg_basebackup(物理备份,采取流复制方式)

二、  SQL 转储(逻辑):

(一)pg_dump

    1. 创建数据库

        createdb eagle

    2. 连入数据库eagle

        psql eagle

    3. 创建测试表,插入数据               

        eagle=# create table pg_t ( id int);

        CREATE TABLE

        eagle=# insert into pg_t values(1);

        INSERT 0 1

        eagle=# insert into pg_t values(2);

        INSERT 0 1

        eagle=# insert into pg_t values(3);

        INSERT 0 1

        eagle=# insert into pg_t values(4);

        INSERT 0 1

4. 查看数据

    eagle=# select * from pg_t;

           id

       ----

          1

          2

          3

          4

    (4 rows)

5. 备份

    pg_dump eagle > /arch/ eagle.dmp

6. 删除数据库pg

    dropdb eagle

7. 创建新数据库(恢复之前需创建数据库

    createdb eagle

8. 恢复数据

    psql eagle

    SET

    SET

    SET

    SET

    SET

    SET

    SET

    SET

    SET

    CREATE TABLE

    ALTER TABLE

    CREATE TABLE

    ALTER TABLE

    REVOKE

    REVOKE

    GRANT   


9. 查看数据是否回复

    eagle=# select * from pg_t;

     id

    ----

      1

      2

      3

      4

  (数据已成功恢复)

(二)pg_dumpall

    pg_dump只能备份单个数据库,而且恢复的时候需要创建空数据库。pg_dumpall可以备份所有数据库,并且备份角色、表空间。

    1. 创建数据库

    createdb pg1

    createdb pg2

2.  pg1中创建表并插入数据

    psql pg1

    eagle=# create table tb1(id int);

    eagle=# insert into tb1 values(1);

3.  pg2中创建表并插入数据

    eagle pg2

    eagle=# create table tb2(id int)

    eagle=# insert into tb2 values(2);

4. 备份数据库

    pg_dumpall > /arch /pg_all.dmp

5. 删除数据库

    dropdb pg1

    dropdb pg2

6. 恢复数据库

    psql –f /arch/pg_all.dmp postgres

可以指定任何数据库名,如果恢复到一个空的集群中,通常使用postgres数据库

7. 查看数据库pg1是否恢复

    psql pg1

    eagle=# select * from tb1;

    id

    ---

    1

    (1 rows)

8. 查看数据库pg2是否恢复

    psql pg2

    =# select * from tb2;

    id

    ---

    2

    (1 rows)

   数据已成功恢复)

(三)备份压缩与分割:

压缩与分割的原理都是利用Linux的管线(PIPE)命令。

1)压缩

备份:

    pg_dump dbname | gzip > filename.gz

恢复

    gunzip -c filename.gz | psql dbname

2)分割

备份:

    pg_dump dbname | split -b1m- filename

恢复

    cat filename* | psql dbname

三、文件系统级别备份(冷备份)

文件系统级别的备份是冷备份,需要停止数据库。

1. 停止数据库

    pg_ctl stop

2. 备份数据库

    tar –jcv –f /arch/coolbak.tar.bz2 /usr/local/pgsql/data/

3. 删除/usr/local/pgsql/data/目录

     rm –r /usr/local/pgsql/data/


4. 解压备份文件到原目录

    tar –jxvf  /arch /coolbak.tar.bz2 –C /

5,启动数据库

    pg_ctl start

6. 查看数据库pg1是否恢复

    psql pg1

    eagle=# select * from tb1;

    id

    ---

    1

    (1 rows)

7. 查看数据库pg2是否恢复

    psql pg2

    eagle=# select * from tb2;

    id

    ---

    2

    (1 rows)


四、在线热备份(归档)

(一)备份

    1. 配置归档模式

    配置归档需要编辑postgresql.conf文件:
    
vim /usr/local/pgsql/data/postgesql.conf

        archive_mode = on                                                              ---开启归档模式

        archive_command = ‘cp %p /arch /%f’                           ---指定归档路径

注:%p要被归档的日志文件的路径,%f是要被归档的日志文件的文件名

   2. 启动数据库

       pg_ctl –D /usr/local/pgsql/data start
    
     查看postgresql进程:
    [postgres@PostGres ~]$ ps -ef|grep postgres:|grep -v grep
     postgres  1783  1782  0 16:49 pts/0    00:00:00 postgres: pg_statsinfo launcher process   
     postgres  1784  1782  0 16:49 ?        00:00:00 postgres: logger process   
     postgres  1786  1782  0 16:49 ?        00:00:00 postgres: checkpointer process   
     postgres  1787  1782  0 16:49 ?        00:00:00 postgres: writer process   
     postgres  1788  1782  0 16:49 ?        00:00:00 postgres: wal writer process   
     postgres  1789  1782  0 16:49 ?        00:00:00 postgres: autovacuum launcher process   
     postgres  1790  1782  0 16:49 ?        00:00:00 postgres: archiver process                   ---归档进程
     postgres  1791  1782  0 16:49 ?        00:00:00 postgres: stats collector process   
     postgres  1809  1782  0 16:50 ?        00:00:00 postgres: postgres postgres [local] idle

    3. 创建数据库arch

        createdb arch
    
4. 创建表并插入记录

        psql arch

        arch=# create table tb(a int);

        arch=# insert into tb(a) values(1);
    
5. 创建备份

        arch=# select pg_start_backup(‘baseline’);
    
6. 备份整个data目录

        tar –jcv –f /usr/local/pgsql/backup/baseline.tar.bz2 /usr/local/pgsql/data/
    
7. 停止备份

        psql arch

        arch=# select pg_stop_backup();
    
8. 插入新记录,然后切换日志,重复3

        arch=# insert into tb(a) values(2);

        arch=# select pg_switch_xlog();

        arch=# insert into tb(a) values(3);

        arch=# select pg_switch_xlog();

        arch=# insert into tb(a) values(4);

        arch=# select pg_switch_xlog();
    
9. /data/pg_xlog/下的WAL日志文件复制到预设的归档目录下,保证产生的WAL日志都已归档。

(二)恢复
    
1. 停止数据库

          pg_ctl –D /usr/local/pgsql/data/ stop
    
2. 删除/data/

          rm –r /usr/local/pgsql/data/
    
3. 恢复备份

         tar –jxv –f /usr/local/pgsql/backup/baseline.tar.bz2 –C /

    4. 清空/data/pg_xlog/目录下所有文件

        rm –r /usr/local/pgsql/data/pg_xlog/

    5. 创建/pg_xlog/及其下面的archive_status目录

        mkdir /usr/local/pgsql/data/pg_xlog/

        mkdir /usr/local/pgsql/data/pg_xlog/archive_status

    6. /data/目录下创建recovery.conf

        vim /usr/local/pgsql/data/recovery.conf

        restore_command = ‘cp /usr/local/pgsql/backup/archived_log/%f “%p”’

    7. 启动数据库

        pg_ctl –D /usr/local/pgsql/data/ start

        一切正常的话数据库就会自动应用WAL日志进行恢复

    8. 查看数据库arch是否恢复

        psql arch

        arch=# select * from tb;

            a

            ---

            1

            2

            3

            4

        (4 rows)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7721556/viewspace-1408159/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7721556/viewspace-1408159/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值