PostgreSQL远程数据库备份至Linode服务器:位置选择与命令指导
PostgreSQL跨服务器备份恢复(排除指定表)
1. 选择远程还是本地执行备份?
- 若数据库体积较大,优先在远程虚拟服务器执行备份:避免大备份文件往返本地的带宽消耗,节省时间,降低传输出错概率。
- 若需要本地留存备份副本,或远程服务器资源(CPU/磁盘)紧张,可选择在本地机器执行备份。
2. 两种方案的具体命令
方案一:在远程虚拟服务器执行备份
a. 备份命令
直接在远程服务器运行命令生成压缩备份(自动添加日期后缀便于管理):
pg_dump -T analytics_* -T aggregated* -T completeness* -O -x database_name | gzip > db_backup_$(date +%Y%m%d).sql.gz
参数说明:
-T:排除指定表(支持通配符)-O:不导出对象所有者信息(恢复时用当前用户创建对象)-x:不导出权限信息
随后将备份文件传到Linode服务器:
scp db_backup_YYYYMMDD.sql.gz your_linode_user@linode_ip:/path/to/backup/storage/
b. Linode服务器恢复命令
先确保目标数据库已创建(未创建则执行createdb database_name),再解压恢复:
gunzip -c /path/to/backup/storage/db_backup_YYYYMMDD.sql.gz | psql -d database_name -U your_postgres_user
方案二:在本地机器直接拉取远程备份
a. 备份命令
本地通过PostgreSQL客户端直接连接远程服务器,生成本地备份文件:
pg_dump -h remote_server_ip -U remote_postgres_user -T analytics_* -T aggregated* -T completeness* -O -x database_name | gzip > db_backup_$(date +%Y%m%d).sql.gz
参数说明:
-h:指定远程服务器IP/域名-U:远程PostgreSQL用户名
若需自动输入密码,可通过环境变量实现:
PGPASSWORD=remote_postgres_password pg_dump -h remote_server_ip -U remote_postgres_user -T analytics_* -T aggregated* -T completeness* -O -x database_name | gzip > db_backup_$(date +%Y%m%d).sql.gz
若想更安全(无需开放远程5432端口),可通过SSH隧道拉取备份:
ssh remote_user@remote_server_ip "pg_dump -T analytics_* -T aggregated* -T completeness* -O -x database_name" | gzip > db_backup_$(date +%Y%m%d).sql.gz
随后将本地备份传到Linode:
scp db_backup_YYYYMMDD.sql.gz your_linode_user@linode_ip:/path/to/backup/storage/
b. Linode服务器恢复命令
与方案一完全一致:
gunzip -c /path/to/backup/storage/db_backup_YYYYMMDD.sql.gz | psql -d database_name -U your_postgres_user
内容的提问来源于stack exchange,提问作者Jetro Olowole
相关产品推荐
相关产品推荐

