下载PostgreSQL 镜像
docker pull postgres
或者指定版本
docker pull postgres:13
下载完成:
MacBook-Pro:docker_dir ivan.yu$ docker image ls|grep postgrespostgres 13 acf5fb8bfd76 4 days ago 314MBpostgres 11.8 31d22a1554df 5 months ago 282MBpostgres latest b97bae343e06 7 months ago 313MB
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 的内部网络以用来容器内部通信。
启动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 指定本地目录和容器的共享点,: 前为宿主机目录,后为容器内目录。
连接pg13 容器, 登陆成功。
MacBook-Pro:pg13_data ivan.yu$ docker exec -it postgres13 bashroot@f5ade7905143:/# su postgrespostgres@f5ade7905143:/$ psqlpsql (13.1 (Debian 13.1-1.pgdg100+1))Type "help" for help.postgres=#
在容器内关闭PostgreSQL 实例,会导致容器直接关闭。
postgres@f5ade7905143:/$ pg_ctl stopwaiting for server to shut down....MacBook-Pro:pg13_data ivan.yu$MacBook-Pro:pg13_data ivan.yu$MacBook-Pro:pg13_data ivan.yu$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
创建数据库,表
postgres=# create database test;CREATE DATABASEpostgres=# \c testYou are now connected to database "test" as user "postgres".test=# create table t1 as select * from pg_class;SELECT 386test=# create table t2(id int,test(# name varchar(20)test(# );CREATE TABLEtest=# insert into t2 values(1,'ivan');INSERT 0 1
备份数据库
postgres@f5ade7905143:/$ pg_basebackup -D pg13_data -Ft -zpostgres@f5ade7905143:/$ cd pg13_datapostgres@f5ade7905143:/pg13_data$ lsbackup_manifest base.tar.gz pg_wal.tar.gz
—因为设定了共享,所以在宿主机上也可以方便的看到
MacBook-Pro:pg13_data ivan.yu$ lsbackup_manifest base.tar.gz pg_wal.tar.gz
8. 备份恢复
8.1 解压缩,并将需要的归档日志移入wal 目录以备恢复
root@f5ade7905143:/# cd pg13_data/root@f5ade7905143:/pg13_data# lsbackup_manifest base.tar.gz pg_wal.tar.gzroot@f5ade7905143:/pg13_data# gunzip base.tar.gzroot@f5ade7905143:/pg13_data# lsbackup_manifest base.tar pg_wal.tar.gzroot@f5ade7905143:/pg13_data# tar -xvf base.tarroot@f5ade7905143:/pg13_data# gunzip pg_wal.tar.gzroot@f5ade7905143:/pg13_data# tar -xvf pg_wal.tarroot@f5ade7905143:/pg13_data# mv 000000010000000000000002 pg_wal/
8.2 启动并恢复
postgres@f5ade7905143:/$ chmod 700 pg13_datapostgres@f5ade7905143:/$ pg_ctl start -D /pg13_datawaiting 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-bit2021-01-17 08:30:45.779 UTC [787] LOG: listening on IPv4 address "0.0.0.0", port 54332021-01-17 08:30:45.779 UTC [787] LOG: listening on IPv6 address "::", port 54332021-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/20000282021-01-17 08:30:48.968 UTC [788] LOG: consistent recovery state reached at 0/20001002021-01-17 08:30:48.970 UTC [788] LOG: redo done at 0/20001002021-01-17 08:30:49.697 UTC [787] LOG: database system is ready to accept connectionsdoneserver startedpostgres@f5ade7905143:/$
文章转载自墨香溪的溪,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




