用法:
pg_dump [选项]... [数据库名字]
一般选项:
-f, --file=FILENAME 输出文件或目录名
-F, --format=c|d|t|p 输出文件格式 (定制, 目录, tar)
明文 (默认值))
-j, --jobs=NUM 执行多个并行任务进行备份转储工作
-v, --verbose 详细模式
-V, --version 输出版本信息,然后退出
-Z, --compress=0-9 被压缩格式的压缩级别
--lock-wait-timeout=TIMEOUT 在等待表锁超时后操作失败
--no-sync do not wait for changes to be written safely to disk
-?, --help 显示此帮助, 然后退出
控制输出内容选项:
-a, --data-only 只转储数据,不包括模式
-b, --blobs 在转储中包括大对象
-B, --no-blobs exclude large objects in dump
-c, --clean 在重新创建之前,先清除(删除)数据库对象
-C, --create 在转储中包括命令,以便创建数据库
-E, --encoding=ENCODING 转储以ENCODING形式编码的数据
-n, --schema=SCHEMA 只转储指定名称的模式
-N, --exclude-schema=SCHEMA 不转储已命名的模式
-o, --oids 在转储中包括 OID
-O, --no-owner 在明文格式中, 忽略恢复对象所属者
-s, --schema-only 只转储模式, 不包括数据
-S, --superuser=NAME 在明文格式中使用指定的超级用户名
-t, --table=TABLE 只转储指定名称的表
-T, --exclude-table=TABLE 不转储指定名称的表
-x, --no-privileges 不要转储权限 (grant/revoke)
--binary-upgrade 只能由升级工具使用
--column-inserts 以带有列名的INSERT命令形式转储数据
--disable-dollar-quoting 取消美元 (符号) 引号, 使用 SQL 标准引号
--disable-triggers 在只恢复数据的过程中禁用触发器
--enable-row-security 启用行安全性(只转储用户能够访问的内容)
--exclude-table-data=TABLE 不转储指定名称的表中的数据
--if-exists 当删除对象时使用IF EXISTS
--inserts 以INSERT命令,而不是COPY命令的形式转储数据
--no-publications do not dump publications
--no-security-labels 不转储安全标签的分配
--no-subscriptions do not dump subscriptions
--no-synchronized-snapshots 在并行工作集中不使用同步快照
--no-tablespaces 不转储表空间分配信息
--no-unlogged-table-data 不转储没有日志的表数据
--quote-all-identifiers 所有标识符加引号,即使不是关键字
--section=SECTION 备份命名的节 (数据前, 数据, 及 数据后)
--serializable-deferrable 等到备份可以无异常运行
--snapshot=SNAPSHOT 为转储使用给定的快照
--strict-names 要求每个表和/或schema包括模式以匹配至少一个实体
--use-set-session-authorization
使用 SESSION AUTHORIZATION 命令代替
ALTER OWNER 命令来设置所有权
联接选项:
-d, --dbname=DBNAME 对数据库 DBNAME备份
-h, --host=主机名 数据库服务器的主机名或套接字目录
-p, --port=端口号 数据库服务器的端口号
-U, --username=名字 以指定的数据库用户联接
-w, --no-password 永远不提示输入口令
-W, --password 强制口令提示 (自动)
--role=ROLENAME 在转储前运行SET ROLE
#仅导出脚本
pg_dump -h 主机地址 -U 用户名 -F p -s 数据库->"C:\\table.sql"
#仅导出数据
pg_dump -h 主机地址 -U 用户名 -F p -a 数据库->"C:\\data.sql"
#仅创建表
psql -h 主机地址 -U 用户名 -f "C:\\table.sql"
#仅导入数据
psql -h 主机地址 -U 用户名 -f "C:\\data.sql"
清理pg_wal的工具,如非必须不要使用,使用前必须停止数据库.
使用方法:
pg_resetwal [选项]... 数据目录
选项:
-c XID,XID 设置承受提交时间戳的最旧和最新事务
(任一值中的零表示没有改变)
[-D] DATADIR 数据目录
-e XIDEPOCH 设置下一个事务ID时间单元(epoch)
-f 强制更新
-l WALFILE force minimum WAL starting location for new write-ahead log
-m MXID,MXID 设置下一个事务和最老的事务ID
-n 未更新, 只显示将要做什么 (测试用途)
-o OID 设置下一个 OID
-O OFFSET 设置下一个多事务(multitransaction)偏移
-V, --version 输出版本信息,然后退出
-x XID 设置下一个事务 ID
-?, --help 显示帮助信息,然后退出
pg_resetwal相关参数可以通过pg_controldata来获得.
注意看数据库状态,数据库是关闭的.
Database cluster state: shut down
pg_controldata -D /data/pgdata
Catalog version number: 201707211
Database system identifier: 6529648691513019680
Database cluster state: shut down
pg_control last modified: Thu 07 Jun 2018 02:54:08 PM CST
Latest checkpoint location: 26D/22FFF9C0
Prior checkpoint location: 26D/22000028
Latest checkpoint's REDO location: 26D/22FFF9C0
Latest checkpoint's REDO WAL file: 000000010000026D00000022
Latest checkpoint's TimeLineID: 1
Latest checkpoint's PrevTimeLineID: 1
Latest checkpoint's full_page_writes: on
Latest checkpoint's NextXID: 0:114042
Latest checkpoint's NextOID: 291211
Latest checkpoint's NextMultiXactId: 80259
Latest checkpoint's NextMultiOffset: 350641
Latest checkpoint's oldestXID: 549
Latest checkpoint's oldestXID's DB: 1
Latest checkpoint's oldestActiveXID: 0
Latest checkpoint's oldestMultiXid: 1
Latest checkpoint's oldestMulti's DB: 1
Latest checkpoint's oldestCommitTsXid:0
Latest checkpoint's newestCommitTsXid:0
Time of latest checkpoint: Thu 07 Jun 2018 02:54:06 PM CST
Fake LSN counter for unlogged rels: 0/1
Minimum recovery ending location: 0/0
Min recovery ending loc's timeline: 0
Backup start location: 0/0
Backup end location: 0/0
End-of-backup record required: no
wal_level setting: replica
wal_log_hints setting: off
max_connections setting: 100
max_worker_processes setting: 8
max_prepared_xacts setting: 100
max_locks_per_xact setting: 1024
track_commit_timestamp setting: off
Maximum data alignment: 8
Database block size: 8192
Blocks per segment of large relation: 131072
WAL block size: 8192
Bytes per WAL segment: 16777216
Maximum length of identifiers: 64
Maximum columns in an index: 32
Maximum size of a TOAST chunk: 1996
Size of a large-object chunk: 2048
Date/time type storage: 64-bit integers
Float4 argument passing: by value
Float8 argument passing: by value
Data page checksum version: 0
Mock authentication nonce: 1724f7fdbad295c50650de487e94cb1c4286f8d7b1e9bfecd7fc764971e3bbc4
强制更新重置pg_wal,将清空pg_wal,慎重使用,后果概不负责.
pg_resetwal -o 291211 -x 114042 -f /data/pgdata
注意-o 参数和-x参数为
Latest checkpoint's NextXID: 0:114042
Latest checkpoint's NextOID: 291211
用于清理归档文件,当在postgresql.conf打开archive_mode时,归档文件需要定期清理.
archive_mode = on
archive_command = ‘test ! -f /data/archivedir/%f && cp %p /data/archivedir/%f’
如不清理归档文件文件,很快磁盘空间就会被占用.当磁盘空间满了以后PG将会崩溃,重启数据库会报以下错误.
could not write to file "pg_wal/xlogtemp.9021": No space left on device
可以通过下列命令查看磁盘空间
df -h
查看目录大小发现归档文件几乎把磁盘空间完全占用,单机可以用以下命令删除归档文件,但是还是建议使用pg_archivecleanup清除.
du -h /data
cd /data/archivedir
ls | xargs -n 10 rm -rf --直接rm会报-sh: /bin/rm: Argument list too long
双机不要使用rm删除归档文件,通过在recovery.conf设置archive_cleanup_command参数来实现自动清理.
pg_archivecleanup --help
pg_archivecleanup removes older WAL files from PostgreSQL archives.
Usage:
pg_archivecleanup [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE
Options:
-d generate debug output (verbose mode)
-n dry run, show the names of the files that would be removed
-V, --version output version information, then exit
-x EXT clean up files if they have this extension
-?, --help show this help, then exit
For use as archive_cleanup_command in recovery.conf when standby_mode = on:
archive_cleanup_command = 'pg_archivecleanup [OPTION]... ARCHIVELOCATION %r'
e.g.
archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %r'
Or for use as a standalone archive cleaner:
e.g.
pg_archivecleanup /mnt/server/archiverdir 000000010000000000000010.00000020.backup
cd /data/archivedir --切换到归档目录
ls -l --查看归档文件日期
pg_archivecleanup /data/archivedir 00000001000000010000001E --删除所有早于00000001000000010000001E的归档日志
有前辈写好了shell,需要的同学请在这里下载,每天执行前辈的shell,只保留10天之内的归档文件
./walarchivecleanup.sh -p /data/archivedir -a 10
或删除所有早于00000001000000010000001E的归档日志
./walarchivecleanup.sh -p /data/archivedir -f 00000001000000010000001E