database - 在远程服务器上移动 PostgreSQL 数据库的最快方法
问题描述
我需要将一个超过 100GB 的相当大的数据库从旧的远程服务器移动到新的远程服务器。
我通过 ssh 连接到新服务器并从那里使用以下命令,但我认为这不是最好/最快的方法。
pg_dump -C -h 123.123.123.123 -U pgadmin -W -d db_name | psql -h 127.0.0.1 -U pgadmin -W -d db_name
有更好的方法吗?我正在考虑使用某种数据压缩来减少从两台机器传输的数据,但我不知道该怎么做以及它是否有用。
解决方案
这将取决于瓶颈是什么。
您可以pg_basebackup
改用,这样您就无需像这样计算新索引了pg_dump
。但是,您可能正在传输更多数据,因此这可能会使您放慢速度而不是加快速度。
如果网络带宽是一个严重的瓶颈,那么您可以登录到源服务器(123.123.123.123)并执行pg_basebackup -Ft -D- -Xnone ... | pxz > backup.tar.xz
,然后使用 scp 或 rsync 将压缩数据传输到新服务器。您将必须有一个 wal 存档,以便新服务器可以获取它错过的任何 WAL 文件。可以调整复制槽,所以你不需要这个,但是 pg_basebackup 并不容易做到这一点。
xz 很慢。如果你有很多 CPU,pxz 的速度会慢一些,但仍然很慢。所以这样做是值得的,因为网络仍然比 pxz 慢。如果网络不是那么慢,您可以使用更快但不太彻底的压缩方法,例如 gzip 或其并行版本 pigz。
你也可以用pg_dump ... | pxz > dump.sql.xz
.
如果您不想将压缩文件存储在原始服务器上,您可以使用类似ssh 123.123.123.123 "pg_dump ...|pxz" | xzcat | psql ...
. (或者你可以用 pg_basebackup 做同样的事情)。但这里的问题是,您无法从网络故障中恢复,而必须从头开始重复整个过程。这就是为什么如果有空间我更喜欢将文件保存在原始服务器上。
推荐阅读
- php - 如何在运行时检测新的一天已经过去?
- javascript - 交换 JavaScript 列表
- reactjs - setState 比回调函数慢
- node.js - Node.js 中有没有办法用麦克风创建新的音频线并将声音作为音板发送?
- ios - 如何将 C 动态库添加到现有的颤振项目中?
- android - EditText 不会向 Spinner 添加数据
- javascript - 如何识别事件并将其作为参数传递给 JS 中的回调函数?
- html - HTML表格:一个单元格中有两种文本大小?
- ios - 将参数传递给视图时,SwiftUI 崩溃预览
- django - Django:从登录的用户发送电子邮件