postgresSQL 逻辑备份

本文详细介绍使用PostgreSQL内置工具pg_dump和psql进行数据库备份和恢复的方法,包括备份脚本示例、常见错误处理及免密备份设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PostgreSQL自带一个客户端pgAdmin,里面有个备份,恢复选项,也能对数据库进行备份 恢复(还原),但最近发现数据库慢慢庞大的时候,经常出错,备份的文件过程中出错的几率那是相当大,手动调节灰常有限。所以一直寻找完美的备份恢复方案。其实PostgreSQL内置不少的工具,寻找的备份恢复方案就在其中:pg_dump,psql。这两个指令 在数据库的安装目录下,比如我自己本地安装的,路径形如:C:\Program Files\PostgreSQL\9.5\;然后进入到bin文件夹,会看到不少的exe文件,这就是PostgreSQL内置的工具了。里面会找到 pg_dump.exe,psql.exe两个文件

root@ubuntu:~# pg_dump --help
pg_dump dumps a database as a text file or to other formats.

Usage:
  pg_dump [OPTION]... [DBNAME]

General options:
  -f, --file=FILENAME          output file or directory name
  -F, --format=c|d|t|p         output file format (custom, directory, tar,
                               plain text (default))
  -j, --jobs=NUM               use this many parallel jobs to dump
  -v, --verbose                verbose mode
  -V, --version                output version information, then exit
  -Z, --compress=0-9           compression level for compressed formats
  --lock-wait-timeout=TIMEOUT  fail after waiting TIMEOUT for a table lock
  -?, --help                   show this help, then exit

Options controlling the output content:
  -a, --data-only              dump only the data, not the schema
  -b, --blobs                  include large objects in dump
  -c, --clean                  clean (drop) database objects before recreating
  -C, --create                 include commands to create database in dump
  -E, --encoding=ENCODING      dump the data in encoding ENCODING
  -n, --schema=SCHEMA          dump the named schema(s) only
  -N, --exclude-schema=SCHEMA  do NOT dump the named schema(s)
  -o, --oids                   include OIDs in dump
  -O, --no-owner               skip restoration of object ownership in
                               plain-text format
  -s, --schema-only            dump only the schema, no data
  -S, --superuser=NAME         superuser user name to use in plain-text format
  -t, --table=TABLE            dump the named table(s) only
  -T, --exclude-table=TABLE    do NOT dump the named table(s)
  -x, --no-privileges          do not dump privileges (grant/revoke)
  --binary-upgrade             for use by upgrade utilities only
  --column-inserts             dump data as INSERT commands with column names
  --disable-dollar-quoting     disable dollar quoting, use SQL standard quoting
  --disable-triggers           disable triggers during data-only restore
  --enable-row-security        enable row security (dump only content user has
                               access to)
  --exclude-table-data=TABLE   do NOT dump data for the named table(s)
  --if-exists                  use IF EXISTS when dropping objects
  --inserts                    dump data as INSERT commands, rather than COPY
  --no-security-labels         do not dump security label assignments
  --no-synchronized-snapshots  do not use synchronized snapshots in parallel jobs
  --no-tablespaces             do not dump tablespace assignments
  --no-unlogged-table-data     do not dump unlogged table data
  --quote-all-identifiers      quote all identifiers, even if not key words
  --section=SECTION            dump named section (pre-data, data, or post-data)
  --serializable-deferrable    wait until the dump can run without anomalies
  --snapshot=SNAPSHOT          use given snapshot for the dump
  --use-set-session-authorization
                               use SET SESSION AUTHORIZATION commands instead of
                               ALTER OWNER commands to set ownership

Connection options:
  -d, --dbname=DBNAME      database to dump
  -h, --host=HOSTNAME      database server host or socket directory
  -p, --port=PORT          database server port number
  -U, --username=NAME      connect as specified database user
  -w, --no-password        never prompt for password
  -W, --password           force password prompt (should happen automatically)
  --role=ROLENAME          do SET ROLE before dump

If no database name is supplied, then the PGDATABASE environment
variable value is used.

Report bugs to <pgsql-bugs@postgresql.org>.

用法:

备份数据库,指令如下:

pg_dump -h $hostname -p $port -U $username -d $dbname -w -b -v -f /backup/pgsql/pgsql_$dbname_$today.sql

指令解释:如上命令,pg_dump 是备份数据库指令,$hostname是数据库的ip地址(必须保证数据库允许外部访问的权限哦~),当然本地的数据库ip写 localhost;$username 是数据库的用户名;$dbname 是数据库名。> 意思是导出到/backup/pgsql/pgsql_$dbname_$today.sql文件里,如果没有写路径,单单写pgsql_$dbname_$today.sql文件名,那么备份文件会保存在/usr/lib/postgresql/9.5/bin文件夹里。

 

大家注意到了pg_dump后面没有跟密码参数,上面备份命令没有输入密码。

#切换至pgsql用户
su - postgres
#家目录下创建.pgpass文件
vi .pgpass
$hostname:$port:$dbname:$username:$password
#赋权
chmod 600 .pgpass

注:$hostname无论是主机名还是IP,必须要存在于/etc/hosts中且一致。

报错信息“pg_dump: [archiver (db)] connection to database "rebate" failed: fe_sendauth: no password supplied”

#编辑.bashrc文件
vi ~/.bashrc
#pgsql passwd
export PGPASSWORD="$password"

执行完上述步骤后可免密备份。

备份脚本如下

#!/bin/bash
export today=`date +%Y%m%d`
export EXP_FILE=/backup/$dbname/pgsql-$dbname_$today.gz
pg_dump -h $hostname -p $port -U $username -d $dbname -w -b -v -f /backup/$dbname/pgsql_$dbname_$today.sql
nohup /bin/gzip /backup/$dbname/pgsql-$dbname_$today.sql $EXP_FILE &
find /backup/$dbname -mtime +15 -name 'pgsql-$dbname_*.gz' -exec rm -rf {} \;
find /backup/$dbname -mtime -1 -name '*.sql' -exec rm -rf {} \;

 

### 数据库逻辑备份的方法及工具 数据库逻辑备份是指对数据库的逻辑组件(如表、视图、存储过程等)进行备份,通常使用专门的工具实现。以下是几种常见的数据库逻辑备份方法及工具: #### 1. DM 数据库逻辑备份 DM 数据库提供了 `dexp` 和 `dimp` 两个命令行工具来实现逻辑备份和还原。 - **逻辑导出**:`dexp` 工具用于对本地或远程数据库进行逻辑备份,支持数据库级、用户级、模式级和表级的备份[^1]。例如: ```bash dexp USERID="SYSDBA/SYSDBA@localhost:5236" FILE=backup.dmp MODE=FULL ``` - **逻辑导入**:`dimp` 工具利用 `dexp` 生成的备份文件对数据库进行联机逻辑还原[^2]。例如: ```bash dimp USERID="SYSDBA/SYSDBA@localhost:5236" FILE=backup.dmp ``` #### 2. KingbaseES 数据库逻辑备份 KingbaseES 提供了 `sys_dump` 和 `sys_dumpall` 工具用于逻辑备份。 - **单个数据库备份**:`sys_dump` 工具可以将单个数据库的数据和结构备份为文件[^5]。例如: ```bash sys_dump -U kingbase -W password -F c -f backup.dump dbname ``` - **整个集簇备份**:`sys_dumpall` 工具可以备份整个数据库集簇,包括角色、表空间等全局对象。例如: ```bash sys_dumpall -U kingbase -W password -f backup_all.dump ``` #### 3. MySQL 数据库逻辑备份 MySQL 使用 `mysqldump` 工具进行逻辑备份。 - **备份单个数据库**:将指定数据库的结构和数据导出为 SQL 文件。例如: ```bash mysqldump -u root -p dbname > backup.sql ``` - **备份所有数据库**:将所有数据库的结构和数据导出为 SQL 文件。例如: ```bash mysqldump -u root -p --all-databases > all_backup.sql ``` #### 4. Oracle 数据库逻辑备份 Oracle 使用 `expdp` 和 `impdp` 工具进行逻辑备份和还原。 - **逻辑导出**:`expdp` 工具用于将数据库对象导出为二进制文件。例如: ```bash expdp username/password DIRECTORY=dir_name DUMPFILE=backup.dmp ``` - **逻辑导入**:`impdp` 工具用于将备份文件中的数据导入到数据库中。例如: ```bash impdp username/password DIRECTORY=dir_name DUMPFILE=backup.dmp ``` #### 5. PostgreSQL 数据库逻辑备份 PostgreSQL 使用 `pg_dump` 和 `pg_restore` 工具进行逻辑备份和还原。 - **备份单个数据库**:将指定数据库的结构和数据导出为 SQL 文件或自定义格式文件。例如: ```bash pg_dump -U postgres dbname > backup.sql ``` - **恢复备份**:将备份文件中的数据导入到数据库中。例如: ```bash psql -U postgres dbname < backup.sql ``` ### 注意事项 - 逻辑备份和还原通常在联机状态下完成,即数据库服务器正常运行时进行。 - 不同数据库的备份工具功能和语法可能有所不同,需根据具体数据库选择合适的工具[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值