01 数据库的备份与恢复 - xiaoxin01/Blog GitHub Wiki
本文介绍数据库postgres的备份与恢复
postgres数据库有2个指令:
- pg_dump
- pg_dumpall
pg_dump用于备份单个数据库,可以备份为可读的纯文本(默认),也可以备份为自定义格式(-Fc/-Fd);pg_dumpall通过pg_dump命令,实现所有数据库的备份,并且额外包含数据库角色和表空间。
一个文本备份内容大致如下:
--
-- PostgreSQL database dump
--
-- Dumped from database version 13.1
-- Dumped by pg_dump version 13.0 (Debian 13.0-1.pgdg100+1)
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Name: public; Type: SCHEMA; Schema: -; Owner: postgres
--
CREATE SCHEMA public;
ALTER SCHEMA public OWNER TO postgres;
--
-- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres
--
COMMENT ON SCHEMA public IS 'standard public schema';
SET default_tablespace = '';
SET default_table_access_method = heap;
--
-- Name: xxxx; Type: TABLE; Schema: public; Owner: postgres
--
CREATE TABLE public.xxxx (
)
COPY public.xxxx (id, xxxx) FROM stdin;
9a1b950a-aee2-4660-8ad4-712a1388160b \N d38e6300-7ce1-49db-bc30-0bf4a50bfbdd \N
\.
……
以文本格式备份数据库时,需考虑将备份文件压缩:
pg_dump --username=xxx -Z6 -f dbname.sql.gz dbname
以自定义格式备份数据库,默认会压缩:
pg_dump -Fc --username=postgres -f dbname.dump -d dbname
备份所有数据库:
pg_dumpall > db.out | gzip > db.sql.gz
对于文本格式的备份,可以用psql命令恢复数据(如果db已经存在并有数据,需要先将db删除重建)
psql -d dbname -f xxx.sql
对于压缩的文件,可以用管道
zcat xxx.sql.gz | psql -d dbname -W
对于自定义备份文件,用pg_restore恢复数据库( --clean --create命令用于先删除db再创建)
pg_restore --username=postgres -d dbname --clean --create .\dbname.dump