phpMyAdmin のアップロードファイルサイズを変更する
MySQL + phpMyAdmin によるバックアップで「phpMyAdmin によるバックアップファイルのアップロードサイズに制限がある」と書きましたが、自宅サーバ(Apache)等、管理者権限があれば、このサイズを簡単に変更することができます。
この最大サイズを変更するには、php.ini にある下記の行
php_value upload_max_filesize 2M
の赤色部分を次のように修正します。
php_value upload_max_filesize 8M
さらにサイズを拡大する場合は、php.ini の
- memory_limit
- post_max_size
- upload_max_filesize
の関係が
memory_limit > post_max_size > upload_max_filesize
となるように、それぞれ値を変更する必要があります(実際には同値でもOK)。
参考サイトは下記です。
MySQL + phpMyAdmin によるバックアップ
Movable Type 等のブログツールを MySQL で運用している場合、管理画面の「書き出し」とは別に、データベース(以下DB)からバックアップを取得することができます。
Movable Type を例に挙げると両者の違いは次の通りです。
| 書き出し | DBバックアップ | |
|---|---|---|
| バックアップ対象 | エントリー・コメント・トラックバック・カテゴリー | ブログ情報やテンプレート等、DBに保存されている全てのデータ |
| バックアップサイズ | 無制限 | 無制限(ただしサーバ環境によってアップロードサイズの制限あり) |
ということで、DBバックアップについてはバックアップサイズに制限があり、例えばさくらインターネットのスタンダードプランでは約8MBになっています(一番最後の画面参照)。DBのバックアップを利用する際はこの点を考慮する必要があります。
ちなみに私のサイトのDBバックアップデータはすでに12MBを超えており、運用データでは実験することができませんでした。そういう訳で、今回はテストデータ(40エントリー位)を用いて動作の確認を行っています。
以下、phpMyAdmin を利用したバックアップファイル取得方法です。既に他のブログでもかなり紹介されていますが、実際に試してみると新たな発見もありましたので参考になれば幸いです。
1.バックアップのエクスポート
エクスポート手順は2通りあります。ひとつはDB全てのバックアップ、もうひとつはDB内の全テーブルのバックアップです。前者はインポート時にDBの作成から実施し、後者は予め作成されたDBにテーブルのみを作成します。どちらを選択しても差はないようですが、エクスポート時のオプション選択が若干異なります。前者の方が手順は少ないです。
いずれにしても、phpMyAdmin を利用したバックアップではデータベースが何かひとつ存在しないといけないようです。
1.1 DB全てのエクスポート
1.2 DB内の全テーブルのエクスポート
2.バックアップデータのインポート
1.1項・1.2項、どちらのエクスポート方法を選択しても、インポートする方法はほぼ同じです。「ほぼ」と書いたのは、1.2でエクスポートした場合は必ず同一のDB名を選択する必要があるからです。1.1のエクスポートを選択した場合、インポートする際に選択するDB名は任意です。
が、話がややこしくなるので、ここではエクスポートしたDB名と同じDB名のDBが存在することを前提に進めます。
この右側に「最大サイズ」とあるのがバックアップデータの許容サイズを示しています。 |
これでバックアップデータがDBにインポートされます。
MySQLでエントリーのフィールドサイズを拡張する
MySQLではエントリーのデータ型に「TEXT型」というものを用いており、最大65535 バイトまで格納することができます。で、このサイズを超える場合、当然のことながらDBに適正に保存することができません(最大長に入らない部分が切り捨てられます。)。実は当サイトを Berkeley DB から MySQL に移行した際、テンプレートデータを記したエントリーが途中で途切れてしまい、調べているうちに上記の原因であることが判明しました。
ということで、MySQLでのフィールドサイズの拡張方法です。インストール前での実行方法ですので、その点は予めご了承ください。
Movable Type インストールアーカイブに含まれている schemas/mysql.dump を任意のエディタで開いて下記のように修正します。
create table mt_entry (
entry_id integer not null auto_increment primary key,
entry_blog_id integer not null,
entry_status tinyint not null,
entry_author_id integer not null,
entry_allow_comments tinyint,
entry_allow_pings tinyint,
entry_convert_breaks varchar(30),
entry_category_id integer,
entry_title varchar(255),
entry_excerpt text,
entry_text textmediumtext,
entry_text_more text,
entry_to_ping_urls text,
entry_pinged_urls text,
entry_keywords text,
entry_tangent_cache text,
entry_created_on datetime not null,
entry_modified_on timestamp not null,
entry_created_by integer,
entry_modified_by integer,
entry_basename varchar(50) not null,
index (entry_blog_id),
index (entry_status),
index (entry_author_id),
index (entry_created_on),
index (entry_basename)
);
mediumtext は最大長 16777215 バイトです。ちなみに longtext というものもあり、こちらは最大長 4294967295 バイトです。
テンプレートのフィールドサイズを拡張する場合は、同じファイル内の下記の部分を変更します(多分)。
create table mt_template (
template_id integer not null auto_increment primary key,
template_blog_id integer not null,
template_name varchar(50) not null,
template_type varchar(25) not null,
template_outfile varchar(255),
template_rebuild_me tinyint default 1,
template_text textmediumtext,
template_linked_file varchar(255),
template_linked_file_mtime varchar(10),
template_linked_file_size mediumint,
template_created_on datetime not null,
template_modified_on timestamp not null,
template_created_by integer,
template_modified_by integer,
template_build_dynamic tinyint,
unique (template_blog_id, template_name),
index (template_type)
);
修正した後、Movable Type をインストールすることで指定したサイズでDBが作成されます。
BerkeleyDB と MySQL のベンチマークテスト
念願の自宅サーバ MySQL 化で、早速 BerkeleyDB との性能を比較してみました。
タイトルはDBのベンチマークテストになってますが、具体的には Movable Type の主要な操作を、開始?応答が返ってくるまでのおおまかな時間で示しています。ブラウザは Firefox1.0 を使用しました。
1.コメント投稿
| BerkeleyDB | |
| MySQL |
2.再構築
インデックス
| BerkeleyDB | |
| MySQL |
個別エントリーアーカイブ
| BerkeleyDB | |
| MySQL |
月別アーカイブ
| BerkeleyDB | |
| MySQL |
日別アーカイブ
| BerkeleyDB | |
| MySQL |
カテゴリーアーカイブ
| BerkeleyDB | |
| MySQL |
すべて
| BerkeleyDB | ||
| MySQL |
3.エントリーの読み込み・書き出し
エントリーの読み込み
| BerkeleyDB | (未測定) |
| MySQL |
エントリーの書き出し
| BerkeleyDB | |
| MySQL |
グラフでお分かりの通り、レスポンスが飛躍的に向上しています。DBを一人で占有している状態ですのでレンタルサーバではこのままの値は当てはまりませんが、自宅サーバ環境では MySQL に大きなアドバンテージがあることがお分かりになると思います。
エントリーの書き出しは、IEでは読み込みサイズに比例して二次曲線的にレンダリング性能が悪化するようです。ファイルサイズが大きい場合、私の環境の問題でなければこの作業は Mozilla 系のブラウザで行われることをお勧めします。ちなみにIEではいずれのDBについても、書き出しに45分?1時間近くかかりました。
ということで Firefox を使いました。
参考までに上記測定時のブログデータを以下に記しておきます。われながらすごい量です。
対象データ
- エントリー:564
- コメント:2751
- トラックバック:997
- カテゴリー:43
- 投稿月:18ヶ月
- 投稿日:564日
- インポート用データサイズ:約3.6MB
再構築時の対象テンプレート
- メインインデックス
- 最近のエントリー(モジュール化)
- 最近のコメント(モジュール化)
- 最近のトラックバック(モジュール化)
- 月別アーカイブ(モジュール化)
- サブカテゴリーリスト(モジュール化)
- Atomフィード
- RSD
- RSS1.0
- RSS2.0

