2012-02-03 13 views
11

Mevcut bir Magento sitesinde yükseltme yapıyorum. Yaklaşık 10 dakika sonra, Magento bir istisna bildirir ve I/rapor/var hata raporu dosyasını kontrol ederken aşağıdaki hata iletisini ve yığın dökümü bkz:Magento 1.4.0 - 1.6.2.0 yükseltmesi üzerinde benzersiz kısıtlama ihlali

a:5:{i:0;s:223:"Error in file: "/var/www/vhosts/mymagesite/app/code/core/Mage/Customer/sql/customer_setup/mysql4-upgrade-1.5.9.9-1.6.0.0.php" - SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0-8' for key 'UNQ_BY_CUSTOMER'";i:1;s:952:"#0 /var/www/vhosts/mymagesite/app/code/core/Mage/Core/Model/Resource/Setup.php(645): Mage::exception('Mage_Core', 'Error in file: ...') 
#1 /var/www/vhosts/mymagesite/app/code/core/Mage/Core/Model/Resource/Setup.php(437): Mage_Core_Model_Resource_Setup->_modifyResourceDb('upgrade', '1.4.0.0.7', '1.6.1.0') 
#2 /var/www/vhosts/mymagesite/app/code/core/Mage/Core/Model/Resource/Setup.php(320): Mage_Core_Model_Resource_Setup->_upgradeResourceDb('1.4.0.0.7', '1.6.1.0') 
#3 /var/www/vhosts/mymagesite/app/code/core/Mage/Core/Model/Resource/Setup.php(235): Mage_Core_Model_Resource_Setup->applyUpdates() 
#4 /var/www/vhosts/mymagesite/app/code/core/Mage/Core/Model/App.php(412): Mage_Core_Model_Resource_Setup::applyAllUpdates() 
#5 /var/www/vhosts/mymagesite/app/code/core/Mage/Core/Model/App.php(338): Mage_Core_Model_App->_initModules() 
#6 /var/www/vhosts/mymagesite/app/Mage.php(640): Mage_Core_Model_App->run(Array) 
#7 /var/www/vhosts/mymagesite/index.php(80): Mage::run('default', 'store') 
#8 {main}";s:3:"url";s:16:"/index.php/admin";s:11:"script_name";s:10:"/index.php";s:4:"skin";s:7:"default";} 

internette başka bir yerde genel tavsiyem değiştirmektir app/etc/config.xml yılında <initStatements> okumak için:

<initStatements>SET NAMES utf8; SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0;</initStatements> 

Ancak, veritabanları bütünlük kısıtlaması sistemini devre dışı bırakarak son derece zor desteklemek ve daha sonra sorunları gidermek için bir garanti yoldur. Yükseltme komut dosyasının bir hatayla çökmemesini sağlayan bir saldırıdır, sorunu herhangi bir şekilde veya biçimde düzeltmez.

StackOverflow topluluğu, daha iyi bir çözüm veya MySQL'de bütünlük denetiminin devre dışı bırakılmasının neden iyi bir fikir olduğu konusunda iyi bir açıklama sağlayabilir mi?

+1

Tüm uzantılar, yükseltme süresinde varsayılan temaya döndürüldü mü? –

+0

Uzantıları devre dışı bırakmadım veya varsayılan temaya geri dönmedim. Bu sorunu nasıl çözeceğinden emin değilim. Üçüncü taraf uzantıları bu hatayı verdiyse, "hasar" veritabanına önceden yapılmış ve bunları devre dışı bırakma işlemi geri almayacaktır. –

+0

Hey Jim :) Onları devre dışı bırakmanızın sebebi, uzantıların genellikle işe yaramasıdır. Magento yolu bir şey değiştirmeniz gerektiğinde uzatmak ve yeniden yazmaktır ve uzantılar magento'nun bazı sürümlerini yeniden yazmaktadır ve en son sürümlere güncellememektedir.Yani temelde hata bir şey yeniden yazıyor ve magento bu bölümü güncelledi = çakışma –

cevap

12

Bu tablo kırpmak için sorun değil. http://docs.nexcess.net/magento-database-maintenance

Magento'nun çalışması için kritik olmayan site kullanım bilgilerini toplayan tablolardan bir tanesi. boş değil varsayılan olarak NULL olarak varsayılan kullanılan bir sütun değiştiren Onun

/app/code/core/Mage/Customer/sql/customer_setup/mysql4-upgrade-1.5.9.9-1.6.0.0.php 

: (. senin kullananlara eğer, müşteri raporları verimini etkilediği)

sorun dan göç komut beraberdir.

ALTER TABLE `report_compared_product_index` MODIFY COLUMN `customer_id` int UNSIGNED NOT NULL COMMENT '' 

Hata, bu sütunda benzersiz bir dizinden geliyor. MySQL benzersiz dizini görmezden geliyordu. NULL değeri sıfır değerine ayarlandığında, NULL artık geçerli bir değer değildir ve sütunun değerini 0 olarak ayarlamaya çalışır. Bu, ikinci satıra gider ve şimdi benzersiz dizini bozar ve bir hata alırsınız, http://bugs.mysql.com/bug.php?id=8173

Bu tablodaki 1.4x kod kayıtlı verileri yeni şema ile uyumlu değildir. Ayrıca, eksik bilgileriniz benzersiz endeksi tatmin etmek için ihtiyaç duyduğundan temizlemek oldukça zor olacaktır. En hızlı seçenek tabloyu kırpmaktır.

+1

Teşekkürler @txyoji bu harika bir cevap. –

0

Bu, hata iletisinden deşifre edilmesi nispeten kolaydır. Yinelenen bir müşteriniz (veya birden fazla yinelenen müşteri) var.

customer_entity tablonuzu phpMyadmin'de açın ve çoğaltmaları arayın. Elinizde kaç tane müşteriye sahip olduğunuza bağlı olarak, manuel olarak '[email protected]' stil e-postaları ile kendi testlerinizde olacaksınız. Masadan geçtikten ve kendinize neler olup bittiğini öğrendikten sonra bunları güvenle silmeniz gerekir.

+0

Güncelleştirmeleri komut satırından (örn. "Php index.php") çalıştırarak sorunu giderebildim. Veritabanında gerçekten tekrarlanan kayıtlar varsa, güncellemelerin tarayıcıdan mı yoksa komut satırından mı çalıştırıldığından bağımsız olarak aynı hata mesajını görmeliyim. –

İlgili konular