11

要旨

英語版ウィキペディアの 40 GB 以上の大規模なインポートを実行する前に、負荷を処理するために 3 つのテーブル (「ページ」、「リビジョン」、および「テキスト」) からインデックスと自動インクリメント フィールドを一時的に削除する必要がありました。これで、ようやく英語版ウィキペディアをローカル マシンに正常にインポートし、ローカル ミラー (MediaWiki API) を作成できました。わーい!

ただし、インデックスと自動インクリメント フィールドを 10 年以内に再作成する必要があります。幸いなことに、(1) インデックスとフィールドを削除する前に、phpmyadmin で関連するテーブルのスクリーンショットをたくさん撮りました。(2) インポート前に行った手順を非常に正確に説明できます。(3) これは、MySQL に堪能な人にとってはそれほど難しいことではありません。残念ながら、私は MySQL の専門知識がまったくないので、「ベイビー ステップ」の説明は非常に役に立ちます。

私がやったことを正確に(インポートの準備):

ステップ 1、2、3: この画像は、[変更] をクリックし、[自動インクリメント] のチェックを外して (インポートの準備として)フィールドpage_idを変更する前のテーブルページを示しています。テーブルリビジョンのフィールドrev_idとテーブルテキストのold_id に対してまったく同じ変更を行いましたが、冗長性を避けるためにスクリーン ショットは省略しました。

「page_id」の変更前のテーブル「page」

ステップ 4: この画像は、すべて削除する前のテーブルページのインデックスを示しています。

削除する前のテーブル「ページ」のインデックス

ステップ 5: この画像は、すべて削除する前のテーブルリビジョンのインデックスを示しています。

削除する前のテーブル「リビジョン」のインデックス

ステップ 6: この画像は、すべて削除する前のテーブルテキストのインデックスを示しています。

ドロップする前のテーブル「テキスト」のインデックス

今必要なもの (インポート後の復元):

100 年も待たずに元のインデックスと自動インクリメント フィールドを復元する必要があるだけです。

セットアップの詳細: PHP 5.3.8 (apache2handler)、MySQL 5.5.16 (InnoDB)、Apache 2.2.21、Ubuntu 12.04 LTS、MediaWiki 1.19.0 (プライベート ウィキ)

4

1 に答える 1

4

私はウィキペディアがとても好きなので、助けようと思います。

たくさん使う必要があります

ALTER TABLE

主キーを追加する

ALTER TABLE page ADD PRIMARY KEY (page_id);
ALTER TABLE revision ADD PRIMARY KEY (rev_id);
ALTER TABLE text ADD PRIMARY KEY (old_id);

自動インクリメントを戻す

ALTER TABLE page MODIFY COLUMN page_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;

続行する前に、すべてのテーブルのテーブルの説明が必要です。rev_id と old_id が page_id と同じ定義である場合:

ALTER TABLE revision MODIFY COLUMN rev_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
ALTER TABLE text MODIFY COLUMN old_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;

一意のキーを追加する

ALTER TABLE page ADD UNIQUE name_title(page_namespace, page_title);
ALTER TABLE revision ADD UNIQUE rev_page_id(rev_page, rev_id);

その他の指標

ALTER TABLE page ADD INDEX page_random(page_random);
ALTER TABLE page ADD INDEX page_len(page_len);
ALTER TABLE page ADD INDEX page_redirect_namespace(page_is_redirect, page_namespace, page_len);
ALTER TABLE revision ADD INDEX rev_timestamp(rev_timestamp);
ALTER TABLE revision ADD INDEX page_timestamp(rev_page, rev_timestamp);
ALTER TABLE revision ADD INDEX user_timestamp(rev_user, rev_timestamp);
ALTER TABLE revision ADD INDEX user_text_timestamp(rev_user_text, rev_timestamp);

繰り返しますが、この内容を変更する列定義がある場合があります。CREATE TABLE 情報を提供する必要があります。

于 2012-06-06T22:13:36.953 に答える