• docker中postgresql的备份和还原


     

    1.备份

    本地主机在docker容器内部执行命令的格式:

    docker exec <container_name> <your_command>

    docker容器都是假设所有的文件是在容器卷中的,如果文件不在docker容器中,你需要在本地主机和容器之间传输。

    备份容器中的某个数据库

    docker exec -it <container_name> /usr/bin/pg_dump \
    -U <postgresq_user> <postgresql_database> > postgres_backup.sql

    远程备份需要指定-h <postgresql_host>

     

    开启备份压缩

    docker exec -it <container_name> /usr/bin/pg_dump \
    -U <postgresql_user> <postgresql_database> | gzip -9 > postgres-backup.sql.gz

     

    备份容器中的所有的数据库

    docker exec -it <container_name> /usr/bin/pg_dumpall  \
    -U <postgresql_user> > postgres-backup.sql

     

    带有密码的备份

    将密码作为环境变量

    docker exec -i -e PGPASSWORD=<postgresql_password>  <container_name> /usr/bin/pg_dump \
    -U <postgresql_user> <postgresql_database> | gzip -9 > postgres-backup.sql.gz

     

    在容器内部备份

    docker exec <postgresql_container> /bin/bash \
    -c "/usr/bin/pg_dump -U <postgresql_user> <postgresql_database>" \
    | gzip -9 > postgres-backup.sql.gz

     

    带有密码的备份

    docker exec <postgresql_container> /bin/bash \
    -c "export PGPASSWORD=<postgresql_password> \
        && /usr/bin/pg_dump -U <postgresql_user> <postgresql_database>" \
    | gzip -9 > postgres-backup.sql.gz

     

    2.使用pg_store还原

    还原之前,要确认容器的卷和卷的大小

    docker ps
    docker inspect -f '{{ json .Mounts }}' <container_id> | python -m json.tool

    比如:

    [
      {
          "Type": "volume",
          "Name": "my_postgres_backup_local",
          "Source": "/var/lib/docker/volumes/my_postgres_backup_local/_data",
          "Destination": "/backups",
          "Driver": "local",
          "Mode": "rw",
          "RW": true,
          "Propagation": ""
      },
      {
          "Type": "volume",
          "Name": "my_postgres_data_local",
          "Source": "/var/lib/docker/volumes/my_postgres_data_local/_data",
          "Destination": "/var/lib/postgresql/data",
          "Driver": "local",
          "Mode": "rw",
          "RW": true,
          "Propagation": ""
      }
    ]

    这里的卷路径是/backups和/var/lib/postgresql/data

    得到卷的信息后,就需要将dump文件拷贝到指定的卷路径了:

    docker cp </path/to/dump/in/host> <container_name>:<path_to_volume> 

    然后执行还原:还原之前要确保指定的数据库是已经存在的了

    使用数据库用户进行还原

    pg_restore -U <database_owner> -d <database_name> <path_to_dump> 

    也可以使用docker命令:

    docker exec <container_name> <some_command> 

    3.找出数据库的owner

    docker exec <container_name> psql -U postgres -l
    或者
    psql -U postgres -l

    示例:

    $ psql -U postgres -l
                                    List of databases
      Name   | Owner   | Encoding | Collate   |   Ctype   |   Access privileges  
    -----------+----------+----------+------------+------------+-----------------------
    postgres | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
    template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres         +
              |         |         |           |           | postgres=CTc/postgres
    template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres         +
              |         |         |           |           | postgres=CTc/postgres
    abce     | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
    (4 rows)

    4.使用docker还原数据库

    docker exec <container_name> pg_restore -U postgres -d some_database /backups/postgres-backup.sql 
     
  • 相关阅读:
    RMS on why Emacs lisp doesn't have namespace
    老子《道德经》第十章
    switch fall-through一题
    Linux 安装Anroid Studio 0.8
    软考-初级-程序员 【完成】
    《中国医学药典》2010版 一、二、三部 【分享】
    一步步学习微软InfoPath2010和SP2010--第三章节--表单设计基础:处理InfoPath布局、控件和视图(8)--视图
    一步步学习微软InfoPath2010和SP2010--第三章节--表单设计基础:处理InfoPath布局、控件和视图(7)--添加含规则的提交按钮到Flight Delay表单
    一步步学习微软InfoPath2010和SP2010--第三章节--表单设计基础:处理InfoPath布局、控件和视图(6)--添加控件到Flight Delay表单
    一步步学习微软InfoPath2010和SP2010--第三章节--表单设计基础:处理InfoPath布局、控件和视图(5)--理解数据绑定的基础
  • 原文地址:https://www.cnblogs.com/abclife/p/16206042.html
Copyright © 2020-2023  润新知