备份PostgreSQL数据库
备份格式有几种选择:
bak:压缩二进制格式
sql:明文转储
tar: tarball
mydb=# \q
-bash-4.2$ pg
pgawk pg_dump pgrep
pg_basebackup pg_dumpall pg_restore
# 备份所有的
-bash-4.2$ pg_dumpall > pg_backup.bak
# 备份 mydb库的
-bash-4.2$ pg_dump mydb > mydb.bak
-bash-4.2$ ls
14 mydb.bak pg_backup.bak
-bash-4.2$ pwd
/var/lib/pgsql
# 导出postgres库所有表
pg_dump -U postgres -f/tmp/postgres.sql postgres
# 导出postgres库中 表test的数据
pg_dump -U postgres -f/tmp/postgres.sql -t test postgres
# 导出postgres库 以tar形式压缩保存为postgres.tar -F 格式
pg_dump -U postgres -F t -f /tmp/postgres.tar postgres
恢复数据库
# 恢复postgres.sql数据到postgres数据库,
psql -U postgres -f /tmp/postgres.sql postgres
# 恢复postgres.tar数据到postgres数据库 psql 打不开tar文件
pg_restore -U postgres -d postgres /tmp/postgres.tar(
su -postgres
pg_dump daname>dbname.bak
postgres 主从
清理历史文件
rm -rf /var/lib/pgsmaster
rm -rf /var/lib/pgsslave
docker rm -f pgsmaster
docker rm -f pgsslave
docker network create pg-network
docker run -d --network=pg-network --name pgsmaster -p 5500:5432 -e POSTGRES_PASSWORD=postgres -v /var/lib/pgsmaster:/var/lib/postgresql/data postgres:16.4
# 先不做挂载
docker run -d --network=pg-network --name pgsslave -p 5433:5432 -e POSTGRES_PASSWORD=postgres postgres:16.4
查看 pg IP地址 配置主IP信息,运行读的IP
docker inspect pgsmaster|grep IPAddress
docker inspect pgsslave |grep IPAddress
cat >>/var/lib/pgsmaster/postgresql.conf <<-'EOF'
primary_conninfo='host=172.19.0.2 port=5432 user=repl password=repl'
EOF
cat >>/var/lib/pgsmaster/pg_hba.conf <<-'EOF'
host replication repl 172.19.0.2/32 md5
host replication repl 172.19.0.3/32 md5
EOF
master创建从用户
docker exec -it pgsmaster /bin/bash
psql -U postgres
set synchronous_commit =off;
create role repl login replication encrypted password 'repl';
\du
\q
exit
docker restart pgsmaster
slave 备份文件并拷贝出容器
docker exec -it pgsslave /bin/bash
#pg_basebackup 向主服务器的数据备份。dump大文件 从库直接加载
pg_basebackup -Fp --progress -D /home/opt/postgresql-16.0/data/ -R -h 172.19.0.2 -p 5432 -U repl --password
Password:
waiting for checkpoint
23136/23136 kB (100%), 1/1 tablespace
root@99e541cc922a:/# ls /var/lib/postgresql/data/
base ...
root@99e541cc922a:/# exit
[root@vm ~]# docker cp pgsslave:/home/opt/postgresql-16.0/data/ /var/lib/pgsslave
Successfully copied 40.6MB to /var/lib/pgsslave
[root@vm ~]# ls /var/lib/pgsslave
... standby.signal 标识文件,
[root@vm ~]# docker rm -f pgsslave
重写映射并启动slave
docker run -d --network=pg-network --name pgsslave -p 5433:5432 -e POSTGRES_PASSWORD=postgres -v /var/lib/pgsslave:/var/lib/postgresql/data postgres:16.4
docker logs -f pgsslave
select * from pg_stat_replication; # 查看复制状态
查看从库同步信息
ceate table tbl1(id int, text varchar(10));
insert into tbl1 values (1, 'helloworld');