创建我的应用程序的沙箱版本。数据库复制?或者另一种方式

时间:2011-05-18 06:52:27

标签: ruby-on-rails postgresql database-replication

我正在计划为潜在客户创建一个生产轨道应用程序的沙箱系统。

生产系统不断更新新内容,我希望将其带到沙箱中以使其尽可能真实。但是,我不想通过执行完整的数据库转储/恢复来修改沙箱,因为我想在此系统上保留用户帐户(只需使用新内容进行更新)

我已经检查了几个选项,但我可以使用一些建议......

1- DB转储/恢复

虽然它的工作方式很简单但是配置cron作业并在服务器之间传输整个数据库有点痛苦,即使我可能不需要它。我想我可以直接转储某些表,但这仍然可能传输的数据超过了所需数据。

2-数据库复制

基于每个表设置主从复制。从我所看到的,这可能是我想做的。仅复制新内容表并忽略帐户表。

3-另一种方式?

我不确定......有更好的方法吗?

但等等,还有更多!

沙箱系统并不总是在运行(它只在某些时间内可用)所以我需要的东西如果无法连接就不会太烦人。只是悄然失败,稍后再试。

我对复制很陌生,所以有人建议从哪里开始? Slony-I,Bucardo,rubyrep?

详情

  • Rails 3 app
  • PostgreSQL DB
  • Ubuntu服务器

1 个答案:

答案 0 :(得分:1)

您应该只进行转储/恢复。主/从设置将不起作用,因为从设备将处于只读状态。有两种方法可以做到这一点:

1)Drop the database via the -c flag,然后通过psql恢复:

pg_dump -c ... | psql some_host dba_user staging_db

2)加载到临时数据库,然后执行ALTER DATABASE ... RENAME TO

pg_dump ... | psql -c some_host dba_user staging_db_tmp
# In psql while connected to template1 (and no one is connected to prod):
ALTER DATABASE staging_db RENAME TO staging_db_tmp;
ALTER DATABASE staging_db_tmp RENAME TO staging_db;

在任何一种情况下,它们都很容易编写脚本。查看psql的'-1'或'--single-transaction'命令。