我最近降级了我的EC2实例。我无法再连接到RDS。我认为可能是内部IP不同,现在登录附加到该特定IP。我无法弄明白。我希望能够从快照中获得备份。有没有办法通过AWS下载它?
答案 0 :(得分:54)
您无法下载RDS快照。但是,您可以连接到它并导出数据库。除非您错误地设置了安全组(将端口打开到IP而不是其他安全组),否则降级实例不应影响连接。
答案 1 :(得分:15)
已接受的答案不再是最新的。您可以使用AWS控制台来代替命令行工具。
导航到RDS->快照->手动/系统->
选择快照->操作->导出到S3
在大多数生产环境中,经历S3很常见,因为您无法直接访问数据库实例。
{{3}}
答案 2 :(得分:7)
除了datasage回答。
作为生产实例的选项,您可以在RDS中创建只读副本,并从此副本进行转储。您可以通过这种方式避免冻结生产数据库。
我们将此方案用于PostgreSQL + pg_dump
。希望它对其他人也有帮助。
答案 3 :(得分:1)
听起来您的RDS处于具有安全组和ACL的专用子网内的VPC中。解决问题的唯一方法是在允许所有连接的默认VPC内拍摄快照并确定新的数据库实例。之后,您可以使用数据库客户端或CLI进行经典备份。
答案 4 :(得分:1)
我使用:
import java.io.Serializable;
import org.apache.avro.reflect.Nullable;
import org.apache.beam.sdk.coders.AvroCoder;
import org.apache.beam.sdk.coders.DefaultCoder;
import org.apache.beam.sdk.transforms.Combine.CombineFn;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AverageSpv extends CombineFn<String, AverageSpv.Accum, String> {
private static final Logger LOG = LoggerFactory.getLogger(AverageSpv.class);
@DefaultCoder(AvroCoder.class)
public static class Accum implements Serializable {
@Nullable String id;
}
@Override
public Accum createAccumulator() {
return new Accum();
}
@Override
public Accum addInput(Accum accumulator, String input) {
LOG.info("Add input: id {}, input);
accumulator.id = input;
return accumulator;
}
@Override
public Accum mergeAccumulators(Iterable<Accum> accumulators) {
LOG.info("Merging accumulator");
Accum merged = createAccumulator();
for (Accum accumulator : accumulators) {
merged.id = accumulator.id;
}
return merged;
}
@Override
public VehicleSpeedPerSegmentInfo extractOutput(Accum accumulator) {
LOG.info("Extracting accumulator");
LOG.info("Extract output: id {}", acummulator.id);
return acummulator.id;
}
}
答案 5 :(得分:0)
如果您不需要下载它,而只想与其他AWS账户ID共享,则另一个选择是share your snapshot。
答案 6 :(得分:-1)
我还需要这样做,所以我通过登录我的应用服务器创建了db(MySQL)的转储,该服务器有权访问数据库。然后我使用scp将转储下载到我的本地机器。 我用过:
mysqldump -uroot -p -h<HOST> --single-transaction <DBNAME> > output.sql