Mysql 正在寻找一种优雅的方法将cherry拾取的对象从一个数据库复制到另一个数据库

Mysql 正在寻找一种优雅的方法将cherry拾取的对象从一个数据库复制到另一个数据库,mysql,ruby-on-rails,database-connection,Mysql,Ruby On Rails,Database Connection,我正在对被破坏的特定对象进行数据库恢复。大约有一百个。有没有一种优雅的方式来实现这一点 理想情况下,我希望执行如下命令:Object.where(属性:'condition'),然后复制控制台输出,并能够将控制台复制到另一个数据库中,并根据该输出创建我的所有对象 有什么建议吗?如果您只是处理普通数据,您可以尝试以下三种方法之一 导出/导入CSV 纯数据库方法是从各种表中选择一个导出文件,以便稍后在另一端重新加载 例如: SELECT ... FROM ... INTO OUTFILE 'expo

我正在对被破坏的特定对象进行数据库恢复。大约有一百个。有没有一种优雅的方式来实现这一点

理想情况下,我希望执行如下命令:
Object.where(属性:'condition')
,然后复制控制台输出,并能够将控制台复制到另一个数据库中,并根据该输出创建我的所有对象


有什么建议吗?

如果您只是处理普通数据,您可以尝试以下三种方法之一

导出/导入CSV

纯数据库方法是从各种表中选择一个导出文件,以便稍后在另一端重新加载

例如:

SELECT ... FROM ... INTO OUTFILE 'export.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED  BY '"' LINES TERMINATED BY '\n'
这将创建一个CSV格式的导出文件,您可以稍后在其他系统上重新加载:

LOAD DATA INFILE 'export.csv' INTO TABLE ... FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED  BY '"' LINES TERMINATED BY '\n'
这需要直接访问MySQL服务器,但如果成功,速度会非常快
BINARY
BLOB
类型字段与CSV不兼容,因为它们与分隔符冲突

出口/进口YAML

每个模型都能够将自身输出为序列化YAML。基本上,您可以在一端转储所需的所有对象,然后在另一端重新加载

File.open('dump.yml', 'w') do |f|
  f.write(Object.where(:attribute => 'condition').all.to_yaml)
end
您可以在另一端重新加载这些文件:

File.open('dump.yml') do |f|
  Object.transaction do
    YAML.load(f).each do |attributes|
      Object.create!(attributes)
    end
  end
end
Object.transaction
部分意味着要么添加所有记录,要么不添加任何记录,因此如果出现错误,您可以更正它并再次运行脚本,而不会产生冲突

SQL转储/恢复

mysqldump
命令采用一个
——其中
参数,可用于筛选记录:

mysqldump database table --no-create-db --no-create-info --where `attribute='condition'` > table.sql

这应该只有
INSERT
语句,但请检查以确保。

您可以将备份数据库添加到
数据库中。yml
,从中读取对象,切换回主数据库并重新创建缺少的对象。比如:

ActiveRecord::Base.establish_connection(:backup_database)

objects = Object.where(attribute: 'condition')

ActiveRecord::Base.establish_connection(:master_database)

objects.each { |object| Object.create! object.attributes }

一个如何引用一个数据库而不是另一个数据库?
backup\u database
master\u database
是您的
数据库中定义的数据库。yml
,就像
development
production
。啊,好的,但是从控制台,执行
对象时,如何从一个数据库中选择对象而不是从另一个数据库中选择对象。其中..
建立连接
为后续读写设置数据库,以便您建立到备份数据库的连接,将对象读入内存,建立到生产(或其他)的连接并将对象从内存写回(其他)数据库。