magento を 1.4.0.1 から 1.7.0.2 にアップグレードしています。最初はいくつかのエラーがありました。それらを修正した後、アップグレードは 5 時間実行され、完了しません。エラーは表示されません。なぜそれが起こっているのですか?
5 に答える
最近、クライアントのマジェントを V1.4 から V1.7.2.0 にアップグレードし、次の手順に従いました。
次のテーブルを除いて、ライブ データベース バックアップを zip 形式で収集します。
- 「log_customer」</li>
- 「log_quote」</li>
- 「log_summary」</li>
- 「log_url」</li>
- 「log_url_info」</li>
- 「log_visitor」</li>
- 「log_visitor_info」</li>
「log_visitor_online」</p>
圧縮されたバックアップ データベースを、独自のファイル システムの任意のフォルダーに解凍します。
ローカルの WAMP / XAMPP を起動し、Web アプリ「phpMyAdmin」を使用して、テスト データベース「test_something」または任意の名前を作成します。
コマンド プロンプト ウィンドウを開き、「mysql」と入力して MySQL コマンド プロンプトを起動します。
コマンドプロンプトを使用して、解凍したデータベースをテストデータベースにインポートします。これにより、エラーが発生せずにはるかに高速になります。
インポートが成功したら、phpMyAdmin から「DB Changes.txt」ファイルに記載されている SQL を実行します。
ローカルの WAMP / XAMPP で新しい Magento v1.7.2.0 を抽出し、古いライブサイト データを含むテスト データベースを使用して、この Magento のインストールを開始します。
Magento のインストールが正常に完了したら、コマンド プロンプトを使用して、新しいアップグレードされたデータベースを zip 形式でエクスポートおよびダンプします。これにより、エラーが発生することなく、はるかに高速になります。
何もインストールせずに、新しく圧縮された Magento を抽出するか、v1.7.2.0 の新しく解凍された Magento をライブ サーバーのファイル システムにアップロードします。
この圧縮されたデータベースをライブ サーバーのファイル システムにアップロードし、ライブ サーバーの PuTTY を開きます。
ローカル WAMP / XAMPP の「app/etc/local.xml」Magento ファイルのコピーをアップロードして、ライブ Magento の「app/etc/local.xml」ファイルを置き換えます。ライブ サーバーにアップロードする前に、新しいライブ サーバーに従って、このファイルのすべての DB 資格情報を変更することを忘れないでください。
ポイント 14 が完了するまで、ライブ Web サーバーの Web ブラウザーから Magento を参照しないでください。
PuTTY コマンドを使用して、圧縮されたデータベースを抽出し、ライブ Web サイトの新しいデータベースにインポートします。
インポートが成功したら、「path」列の値が「%base_url%」の「core_config_data」データベース テーブルを検索します。「値」列のすべての値を、ライブ サイトの完全な URL「http://www.livesite.com/」に置き換えます。「index.php」は言及しません。
テーマとその関連ファイルを新しいサーバーのファイル システムにアップロードします。
拡張機能/モジュールをアップロードして、互換性を確認してください。
システム構成で必要なモジュールを構成するのは、管理パネルからであることを確認してください。
DB Changes.txt は次
log_customer
の とおりlog_id
です 。 -00-00 00:00:00', datetime DEFAULT NULL, smallint(5) unsigned NOT NULL, PRIMARY KEY ( ), KEY ( ) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Customers log information';visitor_id
customer_id
login_at
logout_at
store_id
log_id
IDX_VISITOR
visitor_id
--
-- テーブルのテーブル構造
log_quote
CREATE TABLE IF NOT EXISTS
log_quote
(quote_id
int(10) unsigned NOT NULL DEFAULT '0',visitor_id
bigint(20) unsigned DEFAULT NULL,created_at
datetime NOT NULL DEFAULT '0000-00-00 00:00:00',deleted_at
datetime DEFAULT NULL, PRIMARY KEY (quote_id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Quote log data';
--
-- テーブルのテーブル構造
log_summary
CREATE TABLE IF NOT EXISTS
log_summary
(summary_id
bigint(20) unsigned NOT NULL AUTO_INCREMENT,store_id
smallint(5) unsigned NOT NULL,type_id
smallint(5) unsigned DEFAULT NULL,visitor_count
int(11) NOT NULL DEFAULT '0',customer_count
int(11) NOT NULL DEFAULT ' 0',add_date
datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (summary_id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='要約ログ情報';
--
-- テーブルのテーブル構造
log_url
CREATE TABLE IF NOT EXISTS
log_url
(url_id
bigint(20) unsigned NOT NULL DEFAULT '0',visitor_id
bigint(20) unsigned DEFAULT NULL,visit_time
datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (url_id
), KEYIDX_VISITOR
(visitor_id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='URL 訪問履歴';
--
-- テーブルのテーブル構造
log_url_info
CREATE TABLE IF NOT EXISTS
log_url_info
(url_id
bigint(20) unsigned NOT NULL AUTO_INCREMENT,url
varchar(255) NOT NULL DEFAULT '',referer
varchar(255) DEFAULT NULL, PRIMARY KEY (url_id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='詳細情報URL 訪問';
--
-- テーブルのテーブル構造
log_visitor
CREATE TABLE IF NOT EXISTS
log_visitor
(visitor_id
bigint(20) unsigned NOT NULL AUTO_INCREMENT,session_id
char(64) NOT NULL DEFAULT '',first_visit_at
datetime DEFAULT NULL,last_visit_at
datetime NOT NULL DEFAULT '0000-00-00 00:00:00',last_url_id
bigint(20) unsigned NOT NULL DEFAULT '0',store_id
smallint(5) unsigned NOT NULL, PRIMARY KEY (visitor_id
) ) エンジン=InnoDB DEFAULT CHARSET=utf8 COMMENT='システム訪問者ログ';
--
-- テーブルのテーブル構造
log_visitor_info
CREATE TABLE IF NOT EXISTS
log_visitor_info
(visitor_id
bigint(20) unsigned NOT NULL DEFAULT '0',http_referer
varchar(255) DEFAULT NULL,http_user_agent
varchar(255) DEFAULT NULL,http_accept_charset
varchar(255) DEFAULT NULL,http_accept_language
varchar(255) DEFAULT NULL,server_addr
bigint(20) DEFAULT NULL,remote_addr
bigint(20) DEFAULT NULL, PRIMARY KEY (visitor_id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='訪問者による追加情報';
--
-- テーブルのテーブル構造
log_visitor_online
CREATE TABLE IF NOT EXISTS
log_visitor_online
(visitor_id
bigint(20) unsigned NOT NULL AUTO_INCREMENT、visitor_type
char(1) NOT NULL、remote_addr
bigint(20) NOT NULL、first_visit_at
datetime DEFAULT NULL、last_visit_at
datetime DEFAULT NULL、customer_id
int(10) unsigned DEFAULT NULL、last_url
varchar(255) DEFAULT NULL, PRIMARY KEY (visitor_id
), KEYIDX_VISITOR_TYPE
(visitor_type
), KEYIDX_VISIT_TIME
(first_visit_at
,last_visit_at
), KEYIDX_CUSTOMER
(customer_id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;切り捨て
report_event
ます。切り捨て
report_viewed_product_index
ます。切り捨て
report_compared_product_index
ます。切り捨て
dataflow_batch_export
ます。ALTER TABLE
orders
CHANGEurl
parent_id
VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL;
I lib\Varien\Db\Adapter\Pdo\Mysql.phpファイルの次の行を変更して、クエリのログ記録について
protected $_debug = true;
protected $_logAllQueries = true;
protected $_debugFile = 'var/debug/pdo_mysql.log';
次に、pdo_myql.logファイルを分析して、クエリがエラーで実行されていることを知り、magento インストーラーが何度もそれを実行しました。
エラーでした。
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ''11199-1' for key 'UNQ_INCREMENT_ID'
そのため、データベース テーブルのエントリを削除し、pdo_mysql.logで他のクエリが表示され、アップグレードが完了しました。
マジェントのアップグレードに何日も取り組んでいる私は、マジェントを 1.4.0.1 から 1.7.0.2 に正常にアップグレードするための手順を要約しています。プロジェクトごとに異なるデータがあるため、表示されるこれらのエラーは他のプロジェクトでは異なります。
新しいバージョン用の新しいデータベースを作成します。( 大きなデータベースのインポートとエクスポートに適しているため、SQLyogを使用しています)。
wwwまたはhtdocsで新しいバージョン 1.7.0.1 を抽出してインストールします。私のプロジェクト名はmagento171です。
修復ステップで新しいデータベースが必要になるため、新しいデータベースを作成します。
古いデータベースデータを新しいデータベースにインポートします。
新しくインストールされたバージョンの magento で、 etc/local.xmlの新しいデータベース名を変更します。
etc/local.xmlで、 SET NAMES utf8 を見つけてSET NAMES utf8に変更します。SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0; .
古いプロジェクト ファイルを新しいバージョンの magento にコピーします。空のフォルダーにテーマがあります。デフォルトのフォルダにテンプレート ファイルがある場合は、デフォルトをコピーします。
• app\design\frontend\default\blank
• アプリ\コード\ローカル
•スキン\フロントエンド\デフォルト/空白
• app\etc\modules (新しいバージョンにないファイルをコピーします)。
lib\Varien\Db\Adapter\Pdo\ Mysql.phpの次の行を変更して、MySql クエリのログを記録する
protected $_debug = true; protected $_logAllQueries = true; protected $_debugFile = 'var/debug/pdo_mysql.log';
code/core/mage/でCREATE TABLEを検索 してCREATE TABLE IF NOT EXISTSに変更します。
テーブルcore_config_dataの次のエントリを変更します (プロジェクト フォルダー名を使用します)。
• web/unsecure/base_url | http://localhost/magento171/ • web/secure/base_url | http://localhost/magento171/
/errors/local.xml.sampleの名前を/errors/local.xmlに変更して、 error_reporting を有効にします。
var\cache内のすべてのデータを削除して、magento キャッシュをクリアします。
ブラウザーに移動し、プロジェクト パスを入力します。 http://localhost/magento171/にアクセスし、ブラウザーとvar/debug/pdo_mysql.logファイルに注目してください。
最初に発生したエラーは次のとおりです。ファイルのエラー: "D:\xampp\htdocs\magento171\app\code\core\Mage\Sales\sql\sales_setup\mysql4-upgrade-1.3.99-1.4.0.0.php"
- SQLSTATE [23000]: 整合性制約違反: 1062 キー 'PRIMARY' のエントリ '7' が重複しています
修正: pdo_mysql.logファイルから、問題がsales_flat_orderテーブルにあることがわかりました。これは、主キーの重複エントリが多数あることを意味するため、すべての sales テーブルを切り捨てました。これは実際には私の古いDBのエラーです。新しいバージョンでは、increment_id は UNIQUE です。主キーのチェックをスキップすることはできないため、sales に関連するすべてのテーブルを切り捨てました。同じ問題がある場合は、その機能に関連するすべてのテーブルを切り捨てます。たとえば、顧客で重複している場合はすべての顧客テーブルを切り捨て、カタログにある場合はカタログ テーブルを切り捨てます。ただし、エラーが発生した時点で切り捨てを行う必要があることに注意してください。インストールが開始される前に切り捨てが行われると、インストーラーは既存のデータを読み取らず、最終的に注文や請求書の欠落などの記録を見逃すことになります。
SET FOREIGN_KEY_CHECKS = 0; TRUNCATE `sales_flat_creditmemo`; TRUNCATE `sales_flat_creditmemo_comment`; TRUNCATE `sales_flat_creditmemo_grid`; TRUNCATE `sales_flat_creditmemo_item`; TRUNCATE `sales_flat_invoice`; TRUNCATE `sales_flat_invoice_comment`; TRUNCATE `sales_flat_invoice_grid`; TRUNCATE `sales_flat_invoice_item`; TRUNCATE `sales_flat_order`; TRUNCATE `sales_flat_order_address`; TRUNCATE `sales_flat_order_grid`; TRUNCATE `sales_flat_order_item`; TRUNCATE `sales_flat_order_payment`; TRUNCATE `sales_flat_order_status_history`; TRUNCATE `sales_flat_quote`; TRUNCATE `sales_flat_quote_address`; TRUNCATE `sales_flat_quote_address_item`; TRUNCATE `sales_flat_quote_item`; TRUNCATE `sales_flat_quote_item_option`; TRUNCATE `sales_flat_quote_payment`; TRUNCATE `sales_flat_quote_shipping_rate`; TRUNCATE `sales_flat_shipment`; TRUNCATE `sales_flat_shipment_comment`; TRUNCATE `sales_flat_shipment_grid`; TRUNCATE `sales_flat_shipment_item`; TRUNCATE `sales_flat_shipment_track`; SET FOREIGN_KEY_CHECKS = 1;
インストールに時間がかかりすぎるため、pdo_mysql.logファイルを調べると、次のエラーが何度も表示されます。表示されるエラー: SQLSTATE[23000]: 整合性制約違反: 1062 キー 'UNQ_INCREMENT_ID' のエントリ ''11199-1' が重複しています 修正: テーブルの最初のエントリを削除します。
データベースの修復手順: magento-db-repair-tool-1.1 (http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/db-repair-tool)を使用して、新しいデータベースで新しいデータベースを修復する必要があります。レポートの最後に、すべての修正が表示されます。
これで、Web サイトをライブ サーバーに簡単に移行できます。
Magento 1.4 から 1.7.x へのアップグレードに関する最も包括的な説明は、ターンキー Web サイトで提供されている次の方法だと思います。
Magento アップグレードのこの部分に進む前に、Magento アップグレード スクリプトがストアをアップグレードするバージョンを確認することが重要です。これを確認するには、次のコマンドを入力します。
1
./mage list-upgrades
この結果が表示される場合:
Updates for community:
Mage_All_Latest: 1.4.2.1 => 1.7.0.2
Lib_Js_Mage: 1.4.2.0 => 1.7.0.2
Lib_Varien: 1.4.2.0 => 1.7.0.2
これは、Magento がバージョン 1.7.0.2 にアップグレードされることを意味します。必要なものでない場合は、アップグレード チャネルを「ベータ」に変更し、Magento を RC (ベータ) バージョンにアップグレードできます。
1 – 次のコマンドを入力して、アップグレード チャネルを安定版に変更します (「安定版」チャネルは、Magento を最新の 1.7.x 安定版にアップグレードすることに注意してください)。
1
./mage config-set preferred_state stable
この後、「./mage list-upgrades」コマンドを実行すると、次の結果が表示されます。
コミュニティの更新:
Mage_All_Latest: 1.4.2.1 => 1.7.0.2.
Lib_Js_Mage: 1.4.2.0 => 1.7.0.2.
Lib_Varien: 1.4.2.0 => 1.7.0.2.
Lib_Phpseclib: 1.4.2.0 => 1.7.0.2.
Mage_Core_Adminhtml: 1.4.2.0 => 1.7.0.2.
Mage_Core_Modules: 1.4.2.0 => 1.7.0.2.
2 – チャネルを選択した後、次のコマンドを使用して Magento を Magento 1.7.0.2 にアップグレードできます。
1
./mage upgrade-all --force
「./mage upgrade-all –force」が機能しない場合は、次のコマンドを実行してみてください。
1
./mage install connect20.magentocommerce.com/community Mage_All_Latest --force
画面にアップグレードされたパッケージが表示されます。
…
Package upgraded: community/Mage_Locale_en_US 1.7.0.2
Package upgraded: community/Lib_Mage 1.7.0.2
Package upgraded: community/Lib_ZF 1.11.1.0
Package upgraded: community/Lib_Js_Prototype 1.7.0.2.
Package upgraded: community/Lib_ZF_Locale 1.11.1.0
これでアップグレードが完了し、ブラウザで Magento ストアにアクセスしてデータベースのアップグレードを実行できます。このプロセスには数分かかるため、しばらくお待ちください。すべてが正しくアップグレードされていれば、ブラウザにアップグレードされたストアが表示されます。データベースをアップグレードする前に、PHP エンジンの時間とメモリの制限を増やすことをお勧めします。
それを増やすことができない場合は、SSH 経由でデータベースのアップグレードを実行してみてください。
1
php -f ./index.php
データベースのアップグレードが完了すると、Magento 管理パネルのフッターでストアのバージョンを確認できます。
apacheログを確認してください。ただし、アップグレードプロセスのどこかで問題が発生しているようです。すべてのファイルが新しいバージョンであることを確認し、データベースをバックアップし、データベース接続情報が正しいことを確認してください。
データベースのサイズを再確認することもできます。データベースが巨大な場合、magentoがタイムアウトしている可能性があります。
現在の (1.4.0.1) データベースの大きさは? 最近、7 GB のデータベースをアップグレードしなければならなかったとき、ローカル サーバーで週末全体がかかりました。このような長いプロセスの理由は、バージョン 1.6 に新しいインデクサーがあり、データベース構造が再構築されたためです。インストール スクリプトは、更新されたコードの最初のロード時に実行されることを意図しています。多くの外部キーを削除し、多くの制約を持つ新しいキーを作成しています。