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

使用docker 运行PostgreSQL

墨香溪的溪 2021-08-02
1776
  1. 下载PostgreSQL 镜像

            

    docker pull postgres

    或者指定版本

      docker pull postgres:13

      下载完成:

        MacBook-Pro:docker_dir ivan.yu$ docker image ls|grep postgres
        postgres 13 acf5fb8bfd76 4 days ago 314MB
        postgres 11.8 31d22a1554df 5 months ago 282MB
        postgres latest b97bae343e06 7 months ago 313MB
        1. Docker 创建内部网络:

          docker network create  --subnet 172.21.0.0/24 --gateway 172.21.0.1 pg_network

          这样就启动了一个网段在172.21.0.0/24 网关为172.21.0.1 的内部网络以用来容器内部通信。

          1. 启动pg13

            docker run -it --name postgres13 -e POSTGRES_PASSWORD='postgres' -e ALLOW_IP_RANGE=0.0.0.0/0 --network pg_network -v Users/ivan.yu/docker_dir/pg13_data:/pg13_data -d postgres:13

            其中:

            --name 指定容器的名字

            -e POSTGRES_PASSWORD 指定postgres 用户的密码

            -e ALLOW_IP_RANGE 允许所有IP连接

            --network 指定使用的网络

            -v 指定本地目录和容器的共享点,: 前为宿主机目录,后为容器内目录。

            1. 连接pg13 容器, 登陆成功。

              MacBook-Pro:pg13_data ivan.yu$ docker exec -it postgres13 bash
              root@f5ade7905143:/# su postgres
              postgres@f5ade7905143:/$ psql
              psql (13.1 (Debian 13.1-1.pgdg100+1))
              Type "help" for help.
              postgres=#
              1. 在容器内关闭PostgreSQL 实例,会导致容器直接关闭。

                postgres@f5ade7905143:/$ pg_ctl stop
                waiting for server to shut down....MacBook-Pro:pg13_data ivan.yu$
                MacBook-Pro:pg13_data ivan.yu$
                MacBook-Pro:pg13_data ivan.yu$ docker ps
                CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
                1. 创建数据库,表

                  postgres=# create database test;
                  CREATE DATABASE
                  postgres=# \c test
                  You are now connected to database "test" as user "postgres".
                  test=# create table t1 as select * from pg_class;
                  SELECT 386
                  test=# create table t2(id int,
                  test(# name varchar(20)
                  test(# );
                  CREATE TABLE
                  test=# insert into t2 values(1,'ivan');
                  INSERT 0 1
                  1. 备份数据库

                    postgres@f5ade7905143:/$ pg_basebackup -D pg13_data -Ft -z
                    postgres@f5ade7905143:/$ cd pg13_data
                    postgres@f5ade7905143:/pg13_data$ ls
                    backup_manifest base.tar.gz pg_wal.tar.gz

                    —因为设定了共享,所以在宿主机上也可以方便的看到

                      MacBook-Pro:pg13_data ivan.yu$ ls
                      backup_manifest base.tar.gz pg_wal.tar.gz

                      8. 备份恢复

                       8.1  解压缩,并将需要的归档日志移入wal 目录以备恢复

                        root@f5ade7905143:/# cd pg13_data/
                        root@f5ade7905143:/pg13_data# ls
                        backup_manifest base.tar.gz pg_wal.tar.gz
                        root@f5ade7905143:/pg13_data# gunzip base.tar.gz
                        root@f5ade7905143:/pg13_data# ls
                        backup_manifest base.tar pg_wal.tar.gz
                        root@f5ade7905143:/pg13_data# tar -xvf base.tar
                        root@f5ade7905143:/pg13_data# gunzip pg_wal.tar.gz
                        root@f5ade7905143:/pg13_data# tar -xvf pg_wal.tar
                        root@f5ade7905143:/pg13_data# mv 000000010000000000000002 pg_wal/


                        8.2 启动并恢复

                          postgres@f5ade7905143:/$ chmod 700 pg13_data
                          postgres@f5ade7905143:/$ pg_ctl start -D /pg13_data
                          waiting for server to start....2021-01-17 08:30:45.779 UTC [787] LOG: starting PostgreSQL 13.1 (Debian 13.1-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
                          2021-01-17 08:30:45.779 UTC [787] LOG: listening on IPv4 address "0.0.0.0", port 5433
                          2021-01-17 08:30:45.779 UTC [787] LOG: listening on IPv6 address "::", port 5433
                          2021-01-17 08:30:45.785 UTC [787] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5433"
                          2021-01-17 08:30:45.851 UTC [788] LOG: database system was interrupted; last known up at 2021-01-17 07:46:14 UTC
                          ...2021-01-17 08:30:48.967 UTC [788] LOG: redo starts at 0/2000028
                          2021-01-17 08:30:48.968 UTC [788] LOG: consistent recovery state reached at 0/2000100
                          2021-01-17 08:30:48.970 UTC [788] LOG: redo done at 0/2000100
                          2021-01-17 08:30:49.697 UTC [787] LOG: database system is ready to accept connections
                          done
                          server started
                          postgres@f5ade7905143:/$


                          文章转载自墨香溪的溪,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                          评论