6

我已经迁移了一个 mgento 安装,执行以下操作:

  1. 复制了所有文件
  2. 导出数据库
  3. 使用 mysql 工作台导入数据库
  4. 将 base_url 更改为新域
  5. 将 local.xml 更新为正确的设置

现在我得到:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '363624' for key 'PRIMARY'

我已经在数据库中搜索了这个键 363624 ,但它并没有像消息中所说的那样重复

我该如何解决这个问题?

4

7 回答 7

31

这帮助了我(清理了一些表格):

输入您的 Magento 数据库并运行以下 sql 查询:

TRUNCATE dataflow_batch_export ; 
TRUNCATE dataflow_batch_import ; 
TRUNCATE log_customer ; 
TRUNCATE log_quote ; 
TRUNCATE log_summary ; 
TRUNCATE log_summary_type ; 
TRUNCATE log_url ; 
TRUNCATE log_url_info ; 
TRUNCATE log_visitor ; 
TRUNCATE log_visitor_info ; 
TRUNCATE log_visitor_online ; 
TRUNCATE report_event ;

之后需要清除 var/session dir(如果您的会话存储在文件中)会导致在清除会话文件之前您将收到相同的错误。

于 2013-06-25T21:19:30.060 回答
7

它没有被复制,而是必须尝试复制它。

你是如何导出数据库的?我会检查转储的 SQL 文件是否在顶部有“ SET FOREIGN_KEY_CHECKS=0; ”行或类似的行。

如果没有,我会删除数据库并将这一行添加到文件顶部:

设置 FOREIGN_KEY_CHECKS=0;

...这行到底部:

设置 FOREIGN_KEY_CHECKS=1;

...然后再试一次。

于 2013-04-07T23:10:10.533 回答
6

我遇到了同样的错误。

对我来说,事实证明,由于网站保持“活动”状态,导出花费了很长时间,以至于导出的结尾与开头不同步。

具体来说,“log_visitor_info”表比其他一些相关的访问者日志表多出大约 100 条记录,因此数据库正在尝试从此处已经存在的另一个表创建记录 ID。

我刚刚从这个特定的表中删除了最后 100 条左右的记录,并且事情再次正常工作而没有错误。或者,您似乎可以在 f5 键上混搭,直到您增加超过该已经存在的 ID 并且 Magento 将再次开始工作。

我怀疑在导出之前将商店置于维护模式可能有助于解决此特定错误。

于 2013-05-20T19:26:20.957 回答
0

就我而言,问题是文本编辑器中没有 BOM 编码的 UTF-8。我已经使用 BOM 更改为 UTF-8,一切正常。

于 2015-05-09T00:08:44.470 回答
0

如果表格显示错误'cataloginventory_stock_item' having 'UNQ_CATALOGINVENTORY_STOCK_ITEM_PRODUCT_ID_STOCK_ID' index,

那么请确保您从脚本中传递了不同的产品 SKU。

于 2016-11-10T13:14:06.643 回答
0

在您的 magento 数据库中运行此 sql 查询。

TRUNCATE dataflow_batch_export ;

TRUNCATE dataflow_batch_import ; 

TRUNCATE log_customer ; 

TRUNCATE log_quote ; 

TRUNCATE log_summary ; 

TRUNCATE log_summary_type ; 

TRUNCATE log_url ; 

TRUNCATE log_url_info ; 

TRUNCATE log_visitor ; 

TRUNCATE log_visitor_info ; 

TRUNCATE log_visitor_online ; 

TRUNCATE report_event ;

首先,您必须检查“log_visitor_info”表结构。在此表中,“visitor_id”字段的默认值应为空。如果默认值设置为任何你应该在下面运行这个查询,否则你把它留在下面的查询只是执行上面的查询。

ALTER TABLE `log_visitor_info` CHANGE `visitor_id` `visitor_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'Visitor ID';
于 2017-07-19T12:40:36.723 回答
0

This problem is because table log_visitor_info contains extra rows of visitors that doesn't exist in log_visitor table, as explained in @creuzerm's comment;

if you run these queries you must have the same result

SELECT MAX(`visitor_id`) FROM `log_visitor`;

SELECT MAX(`visitor_id`) FROM `log_visitor_info`;

to solve this problem you need to delete these extra invalid rows with the following query

DELETE FROM `log_visitor_info` WHERE `visitor_id` > ( SELECT MAX(`visitor_id`) FROM `log_visitor` );

for consistency run this too

DELETE FROM `log_visitor_online` WHERE `visitor_id` > ( SELECT MAX(`visitor_id`) FROM `log_visitor` );
于 2018-10-21T12:29:49.693 回答