我想复制一个生产PostgreSQL数据库到一个开发服务器。最快最简单的方法是什么?
当前回答
先使用pg_dump,然后再使用psql或pg_restore——这取决于您是选择- fp选项还是- fc选项来使用pg_dump。
用法示例:
ssh production
pg_dump -C -Fp -f dump.sql -U postgres some_database_name
scp dump.sql development:
rm dump.sql
ssh development
psql -U postgres -f dump.sql
其他回答
pg_dump the_db_name > the_backup.sql
然后将备份复制到您的开发服务器,使用以下方法进行恢复:
psql the_new_dev_db < the_backup.sql
先使用pg_dump,然后再使用psql或pg_restore——这取决于您是选择- fp选项还是- fc选项来使用pg_dump。
用法示例:
ssh production
pg_dump -C -Fp -f dump.sql -U postgres some_database_name
scp dump.sql development:
rm dump.sql
ssh development
psql -U postgres -f dump.sql
下面是使用pg_basebackup的示例
我选择这样做是因为它备份整个数据库集群(用户、数据库等)。
我把这个作为解决方案发布在这里,因为它详细说明了我必须采取的每一步,在阅读这里的其他答案并做更多的研究后,请随意添加建议或改进。
对于Postgres 12和Ubuntu 18.04,我必须做这些操作:
在当前运行数据库的服务器上:
更新pg_hba.conf,为我位于/etc/postgresql/12/main/pg_hba.conf
添加以下行(将192.168.0.100替换为要将数据库复制到的服务器的IP地址)。
host replication postgres 192.168.0.100/32 trust
更新postgresql.conf,我的地址是/etc/postgresql/12/main/postgresql.conf。增加如下一行:
listen_addresses = '*'
重启postgres:
Sudo服务postgresql重启
将数据库集群拷贝到以下主机:
Sudo service postgresql stop Sudo su root Rm -rf /var/lib/postgresql/12/main/* 退出 sudo -u postgres pg_basebackup -h 192.168.0.101 -u postgres -D /var/lib/postgresql/12/main/ .使用实例 Sudo服务postgresql启动
大方向——停止服务,删除数据目录中的所有内容(我的目录在/var/lib/postgreql/12)。该目录的权限为drwx------,用户和组为postgres。我只能作为根用户来做,甚至不能使用sudo -u postgres。我不知道为什么。确保您在要将数据库复制到的新服务器上执行此操作!您正在删除整个数据库集群。
确保将IP地址从192.168.0.101更改为复制数据库的IP地址。使用pg_basebackup从原始服务器复制数据。启动服务。
更新pg_hba.conf和postgresql.conf以匹配原始服务器配置-在您添加复制行和listen_addresses行之前进行任何更改(在我的关心下,我必须添加通过md5本地登录pg_hba.conf的能力)。
注意,关于max_wal_senders和wal_level有一些注意事项,可以在文档中找到。我不需要做任何事。
转储数据库:pg_dump database_name_name > backup.sql
导入数据库:psql db_name < backup.sql
以数据库名称运行此命令,如果要备份,则转储数据库。
pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}
eg. pg_dump -U postgres mydbname -f mydbnamedump.sql
现在将这个转储文件scp到您想要复制DB的远程机器。
eg. scp mydbnamedump.sql user01@remotemachineip:~/some/folder/
在远程机器上,在~/some/文件夹中运行以下命令来恢复DB。
psql -U {user-name} -d {desintation_db}-f {dumpfilename.sql}
eg. psql -U postgres -d mynewdb -f mydbnamedump.sql
推荐文章
- Postgres唯一约束与索引
- 使用{merge: true}设置的Firestore与更新之间的差异
- mysql_connect():[2002]没有这样的文件或目录(试图通过unix:///tmp/mysql.sock连接)在
- 使用电子邮件地址为主键?
- 选择postgres中字段的数据类型
- MongoDB在v4之前不兼容ACID意味着什么?
- 如何在PostgreSQL中查看视图的CREATE VIEW代码?
- 错误:没有唯一的约束匹配给定的键引用表"bar"
- 如何使用新的PostgreSQL JSON数据类型中的字段进行查询?
- 如何彻底清除和重新安装postgresql在ubuntu?
- 第一次设计数据库:我是否过度设计了?
- 分组限制在PostgreSQL:显示每组的前N行?
- IN与PostgreSQL中的ANY运算符
- PSQLException:当前事务被中止,命令被忽略,直到事务块结束
- 添加布尔列到表集默认