听起来您的旧服务器并非标准安装。总之,简要说明一下情况:您的旧服务器上的某个索引在多年间损坏了(操作系统升级后可能发生这种情况),导致两条完全相同的行被插入到 incoming_referers 表中。备份会原样复制它们,而新服务器则会拒绝这些行。因此,我们需要先在旧服务器上修复,然后再创建新的备份。
在旧服务器上,打开 Rails 控制台:
./launcher enter app
rails c
然后依次粘贴以下代码行:
db = ActiveRecord::Base.connection.current_database
DB.exec("DELETE FROM incoming_referers a USING incoming_referers b WHERE a.id > b.id AND a.path = b.path AND a.incoming_domain_id = b.incoming_domain_id")
DB.exec("REINDEX DATABASE #{ActiveRecord::Base.connection.quote_table_name(db)}")
这将删除重复项并重建所有索引(以防其他表也受到影响)。
如果 REINDEX 执行完毕且未报错,请输入 exit,在旧服务器上创建新的备份,然后恢复该新文件。如果报错提示涉及其他表,请直接将该错误信息粘贴到这里。