windows 的 pg 数据库备份恢复(亲测有效)

1 需求

现在在本地windows电脑安装了一个数据库app01,现在需要对这个库进行备份,然后迁移到其他数据库里面

进行恢复

2 无密码备份1

直接使用不需要输入密码进行备份,恢复

在windows电脑的pg 数据库的配置文件pg_hba.conf 里面添加

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

然后在服务里面,找到pg 数据库,进行重启

需要将数据库命令所在的文件夹路径添加到全局配置里面,这样在其他文件夹就可以直接使用数据库命令

pg_dump -U postgres -d app01 -F c -f backup_file.dump

3 无密码恢复1

pg_dump -U postgres -d app01 -F c -f backup_file.dump 使用这个命令,无需密码进行备份了,现在需要在app02数据库,恢复数据到这个里面

当你已经成功在无需密码的情况下完成了 app01 数据库的备份,接下来要把备份数据恢复到 app02 数据库,可按以下步骤操作:

步骤 1:确保目标数据库 app02 存在

如果 app02 数据库还未创建,你可以使用 psql 工具来创建它。在命令行中输入以下命令以 postgres 用户身份登录到 PostgreSQL 服务器:

psql -U postgres

登录成功后,在 psql 提示符下执行以下 SQL 语句创建 app02 数据库:

CREATE DATABASE app02;

然后输入 \q 退出 psql。

步骤 2:恢复备份数据到 app02 数据库

使用 pg_restore 命令将之前备份的 backup_file.dump 文件恢复到 app02 数据库。由于之前备份时无需密码,若当前的认证规则仍然允许无密码连接,那么执行以下命令即可:

pg_restore -U postgres -d app02 backup_file.dump
  • -U postgres:指定使用 postgres 用户进行恢复操作。
  • -d app02:指定将数据恢复到 app02 数据库。
  • backup_file.dump:之前生成的备份文件。

步骤 3:处理可能的权限问题

恢复数据后,要确保 postgres 用户或其他相关用户对 app02 数据库及其对象具有适当的权限。你可以使用以下 SQL 语句来授予常见的权限:

-- 以 postgres 用户身份登录到 app02 数据库
psql -U postgres -d app02

-- 授予对所有表的操作权限
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO postgres;

-- 授予对所有序列的 USAGE 和 UPDATE 权限
GRANT USAGE, UPDATE ON ALL SEQUENCES IN SCHEMA public TO postgres;

-- 授予对所有函数和过程的执行权限
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO postgres;

执行完上述 SQL 语句后,输入 \q 退出 psql。

步骤 4:验证恢复结果

你可以再次以 postgres 用户身份登录到 app02 数据库,然后查看数据库中的表和数据,以验证恢复操作是否成功:

psql -U postgres -d app02

登录后,你可以使用 \dt 命令查看数据库中的表,使用 SELECT 语句查询表中的数据。

通过以上步骤,你应该能够将 app01 数据库的备份数据成功恢复到 app02 数据库中。

4 使用密码登录数据库

windows电脑安装了一个数据库,现在需要所有用户需要根据密码才可以登录数据库,而不是免密登录,需要这么做?

ALTER USER postgres WITH PASSWORD ‘060708’;

你遇到的这个错误表明在使用 psql 以 postgres 用户身份连接数据库时,输入的密码不正确,导致密码认证失败。以下为你详细分析可能的原因及对应的解决办法:

1. 确认输入的密码是否正确

在命令行输入密码时,屏幕不会显示输入的字符,输入完成后按回车键系统会进行验证。你要确保输入的密码和之前为 postgres 用户设置的新密码一致。

2. 再次重置 postgres 用户的密码

如果你不确定密码是否设置成功或者忘记了密码,可以再次重置 postgres 用户的密码。

步骤 1:停止 PostgreSQL 服务

打开“服务”窗口,找到 PostgreSQL 服务(通常名称为 postgresql-x64-版本号),右键点击该服务,选择“停止”。

步骤 2:修改 pg_hba.conf 文件

临时将认证规则修改为 trust,这样无需密码就能以 postgres 用户身份登录数据库。打开 C:\Program Files\PostgreSQL\版本号\data\pg_hba.conf 文件,将相关规则修改如下:

# "local" is for Unix domain socket connections only
local   all             postgres                                trust
# IPv4 local connections:
host    all             postgres             127.0.0.1/32       trust
# IPv6 local connections:
host    all             postgres             ::1/128            trust

保存文件后,重新启动 PostgreSQL 服务。

步骤 3:重置密码

打开命令提示符,输入以下命令以 postgres 用户身份登录数据库:

psql -U postgres

此时无需输入密码就能登录。登录成功后,在 psql 提示符下执行以下 SQL 语句重置密码:

ALTER USER postgres WITH PASSWORD '新密码';

将 ‘新密码’ 替换为你想要设置的实际密码。

步骤 4:恢复 pg_hba.conf 文件

将 pg_hba.conf 文件中的认证规则改回 md5:

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

保存文件后,重新启动 PostgreSQL 服务。

3. 检查密码加密方式

确保 PostgreSQL 使用的是 md5 加密方式存储密码。在 postgresql.conf 文件中,找到 password_encryption 参数,确保其值为 md5:

password_encryption = 'md5'

修改后保存文件,重新启动 PostgreSQL 服务。

4. 检查 pg_hba.conf 文件的配置顺序

pg_hba.conf 文件中的规则是按顺序匹配的,确保没有其他规则优先匹配导致认证失败。例如,如果有一条规则允许某个特定 IP 地址无需密码连接,而你的连接恰好匹配到这条规则,就可能出现问题。

5. 检查防火墙设置

确保防火墙没有阻止 PostgreSQL 服务的端口(默认是 5432)。你可以暂时关闭防火墙进行测试,如果关闭防火墙后能正常连接,说明防火墙配置有问题,需要对防火墙进行相应的设置。

按照以上步骤操作,你应该能够解决密码认证失败的问题,成功以 postgres 用户身份连接到数据库。

5 有密码备份

pg_dump -U postgres -d app01 -F c -f backup_file.dump

只需要输入命令就可以,输入密码

6 有密码恢复

确定已经手动创建数据库

pg_restore -U postgres -d app09 backup_file.dump

输入密码

<think> 首先,用户的问题是关于PG数据库备份方法。用户说:"我想查找PG数据库备份方法 请问PG数据库备份方法"。我需要基于提供的引用材料来回答。 回顾引用材料: - [^1]: 讨论了PG数据库备份恢复,提到了archive_command,涉及Linux下的备份路径权限。 - [^2]: 在Win10下定期备份PG数据库的命令。 - [^3]: 详细解释了pg_dump命令的使用,包括选项如-U, -h, -p, -F, -f,以及数据库还原的注意事项。 - [^4]: 在Linux服务器上自动备份PG数据库的方法,包括docker容器的版本。 我需要构建一个清晰、结构化的回答,覆盖不同环境下的备份方法: 1. **Linux环境下的备份** 2. **Windows环境下的备份** 3. **使用docker的备份方法** 4. **还原数据库的简要说明** 回答结构: - 开头简要介绍PG数据库备份的重要性。 - 分点列出不同备份方法。 - 使用代码块展示命令示例。 - 确保使用中文。 - 在回答末尾添加相关问题。 - 引用材料中提到的内容需要在末尾添加引用标识。 系统指令要求: - 行内数学表达式用$...$,但这里可能不涉及数学表达式。 - 独立公式用$$...$$,但备份方法主要是命令解释,不太需要数学公式。 - 确保LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在引用的段落末尾添加引用标识,如[^1]。 回答结构: 1. **介绍备份的重要性**:PG数据库备份是确保数据安全的关键步骤。 2. **备份方法**: - 使用pg_dump命令: - Linux下示例 - Windows下示例 - 使用archive_command进行连续归档(基于引用[^1]) - 自动备份脚本(基于引用[4]) - Docker容器下的备份(基于引用[4]) 3. **还原方法**:简要说明如何还原,基于引用[^3]。 4. **注意事项**:如权限、路径等。 5. **相关问题**:生成3-4个相关问题。 确保引用标识: - 当引用具体材料时,在段落末尾添加[^1]、[^2]等。 最终回答组织: - 使用标题或小标题(如###)来组织内容。 - 代码块用```包围。 相关问题生成: 基于备份方法,问题如: 1. 如何设置PG数据库的自动备份? 2. PG数据库备份有哪些格式选项? 3. 如何在还原PG数据库时处理错误? 4. 备份还原大型数据库的最佳实践是什么? </think> ### PG数据库备份方法总结 PostgreSQL(PG数据库备份是确保数据安全灾难恢复的关键步骤。备份方法因操作系统(如Linux或Windows部署方式(如裸机或Docker)而异。以下基于常见场景,结合引用材料,详细介绍备份方法。备份命令的核心是`pg_dump`工具,它支持全库备份、指定数据库备份不同格式输出[^3]。 #### 1. **Linux环境下备份** 在Linux系统中,使用`pg_dump`命令进行备份备份前需确保用户(如`postgres`)有目标路径的写入权限(例如:`chown postgres /backup/path`)[^1]。 - **基本备份命令示例**: ```bash # 备份单个数据库到自定义文件(-F t 表示tar格式,便于压缩) pg_dump -U postgres -h localhost -p 5432 -F t -d mydatabase -f /backup/mydatabase.tar ``` 参数说明: - `-U postgres`:使用`postgres`用户(需替换为实际用户名)。 - `-h localhost`:数据库服务器IP(本地可省略)。 - `-p 5432`:默认端口号。 - `-d mydatabase`:指定数据库名(替换为实际库名)。 - `-f /backup/mydatabase.tar`:输出文件路径(确保路径存在且可写)[^3]。 - **自动备份脚本**: 结合`cron`定时任务,实现每日备份。示例脚本: ```bash #!/bin/bash DB_USER="postgres" DB_HOST="localhost" DB_PORT="5432" DB_NAME="mydatabase" BACKUP_DIR="/usr/local/pgsql/backup" BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_$(date +%Y%m%d).tar.gz" pg_dump -U $DB_USER -h $DB_HOST -p $DB_PORT -F c $DB_NAME | gzip > $BACKUP_FILE ``` 此脚本将备份压缩为gzip格式文件[^4]。 - **连续归档备份**: 在`postgresql.conf`中配置`archive_command`,实现WAL日志归档: ```conf archive_command = 'cp %p /usr/local/pgsql/backup/%f' ``` 确保`/usr/local/pgsql/backup`目录有`postgres`用户权限(`chown postgres backup`)[^1]。 #### 2. **Windows环境下备份** 在Windows中,使用命令行或PowerShell执行`pg_dump.exe`(需指定完整路径)。 - **基本备份命令示例**: ```powershell # 备份所有数据库到SQL文件(-v 表示详细输出) C:\pg\PostgreSQL\12\bin\pg_dump.exe -U postgres -h localhost -p 5432 -f E:\dumppostgres.sql -v --all-databases ``` 参数说明: - `--all-databases`:备份所有数据库(可选,替换为`-d dbname`备份单个库)。 - 避免中文路径,防止兼容性问题[^2][^3]。 - **定期备份**: 通过Windows任务计划程序(Task Scheduler)设置定时任务,调用上述命令。 #### 3. **Docker容器环境备份** 如果PG运行在Docker容器中,需在宿主机执行命令: ```bash # 备份容器内的数据库 docker exec -t pg_container_name pg_dump -U postgres -h localhost -p 5432 -F c mydatabase | gzip > /host/path/backup.gz ``` 参数说明: - `pg_container_name`:替换为实际容器名。 - `/host/path/backup.gz`:宿主机存储路径(需映射卷)[^4]。 #### 4. **数据库还原方法** 还原使用`pg_restore`或`psql`命令: - **从tar文件还原**: ```bash pg_restore -U postgres -h localhost -p 5432 -d new_database -v /backup/mydatabase.tar ``` 确保目标数据库`new_database`已创建[^3]。 #### 注意事项 - **权限问题**:备份路径需数据库用户(如`postgres`)可读写[^1]。 - **格式选择**: - `-F t`(tar格式):适合完整数据库备份。 - `-F c`(自定义格式):支持压缩增量恢复。 - **性能建议**:大型数据库备份时,避开业务高峰;定期试还原流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一写代码就开心

你的打赏将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值