[Blog] サーバー移行における「ギガ単位の巨大データベース」の取り扱い(インポート/エクスポート)について。
uma2x にてエントリーしたものを修正・加筆したものをアップしています。
こんにちは。@donpy です。
当サイト「覚醒する @CDiP」は約4年ほどとあるサーバーにて運営をしておりました。
サーバーマシンへの負荷が高く、時折サーバーダウン等の不具合を起こしつつも、なんとか運営してきましたが、このたびとあるきっかけでサーバー移行することができました。
その経緯についてと、移行時において苦労した点についてレポートさせていただきたいと思います。
移行の決意
2009年12月より正式に WordPress に移行した「覚醒する @CDiP」ですが、それからの運営では、数多くのサーバーダウン、あるいはデータベースエラーによってアクセスできない状態が頻発しておりました。
正確な数字は把握していませんが、感覚的には週に1度のダウンは当たり前でサーバー再起動もたびたび行いつつ運営しておりました。ブログそのものは順調に成長し、日々のアクセスが増えるに従い、その頻度はどんどん増していきました。
しかしながら、とある有志によって用意されたサーバーと担当者さんがいらっしゃいます。当時、知恵も知識もなかった私にとって、ブログをやりながら「WordPressで発信したい」という想いを綴っていたとき、声がかかり、すべてを揃えていただけたのです。
そのような恩もあるわけで、自分の都合だけでおいそれとサーバー移行に踏み切れなかった事実もあります。
決定的にサーバーの移行を考え出した時期は 2012年5月の終わり。
5/27 に度重なるサーバーダウンを体験しました。このとき実はひとつのエントリーがきっかけになっていたわけですが、一日に実に17度のサーバーダウンを体験したのです。
これはもうこのサーバーでは耐えきれないと判断しました。
移行先の模索と移行の難しさを知る
私の言う、サーバー移行というのは、「ドメインを変えずにすべてのサイトデータを別サーバーに移管する」ということです。
ならば、旧サーバーからのデータベースのエクスポートと、旧サーバーに溜め込まれた WordPress データを一旦ローカルに保存し、それを新サーバーに移しかえる作業が必要です。
言葉で言うのは簡単で、実際、自分自身も「簡単にできるだろう」と考えていたのですが、それは甘かった。
そこには肥大化したデータベースと、サーバーに保管した巨大なデータ群があったからです。下書きを含めた投稿数は9000点、登録した画像が6000点。音声ファイルなどもギガ単位で保管しておりました。
データベースにしてギガ単位、WordPress データにして10GBオーバーのものでした。WordPressデータについては力技で FTP ツールからのダウンロードで対応できましたが、どうしてもデータベースの取り扱いが難しかったです。これの扱いがわかるのに実に1年以上かかったというわけです(正確に言うと途中あきらめていたので取り組んでいた時期はもっと短いです。)
とにかく、旧サーバーからのエクスポート並びに新サーバーへのインポート。これが高い障壁になって立ちはだかったのです。また、FTPツールからのダウンロード、アップロードについても色々と問題がありました。
大量のデータを取り扱うことの難しさの一部を垣間見たような気がします。
障壁とは何か?
私がつまづいた点は、とにかくデータベースの移行です。
▼ 旧サーバーからのエクスポート
まずこれができませんでした。データベースの肥大化のせいで、phpmyadmin を使ってのエクスポートはタイムアウトになってしまい、正常にダウンロードができない状態になっておりました。(ブラウザが真っ白になって無反応になってしまい、ダウンロードファイルの用意に至らない)
いろいろな記事を読むことで、こちらについては「データベースをひとつずつ指定してエクスポート」することで、なんとかデータベースをローカルに保存することができました。しかし、このやり方ではあとから問題が生じるのです(後述します)
▼ 新サーバーへのインポート
ひとつずつエクスポートしたデータベースをいざ、新サーバーの phpmyadmin からインポートしようとしたのですが、最大サイズが 30MB と制限されているのです。肥大化したデータベースは一部100MBオーバーのものも含まれており、いくら圧縮かけても指定のサイズまでサイズダウンすることは到底難しかったです。
徹底的なデータベースのシェイプアップも行ってみましたが、どうにもなりませんでした。また、30MB以下のファイルにおいてもデータベースのインポートに失敗する事例もあったりと、そこで一度サーバー移行をあきらめた経緯があるわけです。
また、FTPにおいても問題がありました。
▼ FTP経由でのデータのダウンロード/アップロード
ファイル数が10万オーバーの中で、私は「Cyberduck」という FTPツールを使って、WordPress データのダウンロード並びにアップロード作業をやっておりましたが、どうしても、抜けがありました。また、ファイル数が膨大なため、全体のファイルサイズ以上に時間のかかる作業ではありました。
ギガ単位のデータベースのインポートは phpmyadmin を使わないことで解決した
phpmyadmin はブラウザベースの MySQL 管理ツールです。
ブラウザ上からのアップロードは制限があり、最大で 30MB とされています。ここは私に近しいブロガーの方の枠を超えて調べる必要があると考え、ビッグデータを取り扱うデータベース系サイトを読みあさることでようやく解決の糸口を掴むことができました。その解決法は以下のサイトで書かれていました。
超簡単!Wordpressを別のサーバに引っ越す手順!大規模サイトもこれでOK!
こちらでは、巨大なデータベースのエクスポートとインポートについてひとつの方法が示されていたのですが、これが私の環境にはビンゴでした。
実は巨大なデータベースファイルをあらかじめFTPでサーバーにアップロードしておいた上で、「Bigdump」というサーバープログラムを使うことで、サーバー上でデータベースのインポートが行える方法があったのです。ただし、注意が必要なのは、この方法でデータベースにインポートする際に、旧サーバーからのエクスポートの時点でとあるおまじないとしておく必要があるんですよね。
以下手順を示してみます。
▼ エクスポート時
エクスポートは「phpmyadmin」を使います。
基本はサイズの大きなデータベースはひとつずつエクスポートします。サイズの小さなデータベースはまとめて。そんな感じで容量的に無理のないくらいに分割してエクスポートしました。
ここで注意が必要なのは上の画像にもある通り、「作成するクエリの最大長」を300程度の小さな値に設定することです。私の旧サーバーでの phpmyadmin では初期値が 50000 となっていました。この数値が大きすぎるとインポート時にエラーになってしまうのです。
ここで4つのデータベースファイルを作成して正常にエクスポートできました。
▼ インポート
インポートは「BigDump」というサーバープログラムを使用しました。ダウンロードは以下のサイトからどうぞ。
BigDump: Staggered MySQL Dump Importer
先ほども申しました通り、巨大なデータベースファイルをあらかじめFTPでサーバーにアップロードしておいた上で、「Bigdump」というサーバープログラムを使うことで、サーバー上でデータベースのインポートが行います。
このようにローカルにデータベースファイルを用意するのではなく、サーバー上においたデータベースファイルを「BigDump」で処理します。
bigdump と データベースファイルを同一のディレクトリに配置し、bigdump.php の中身に自分のサーバー情報を追記編集します。
そして「xxx.com/bigdump 」などとブラウザから呼び出しますと、
このようにインポートしたいデータベースファイルが既にサーバーにアップされた状態で選択することができます。ひとつずつインポートしていきます。
この通り、ブラウザでは決して upload できなかった sql ファイルを上げることができました。ここからインポートさせます。1つのデータベースファイルのインポートが終わったら、「Start from the beginning」で、元に戻り、まだインポートできていないファイルのインポートを繰りかえします。
ずっと移行の際に障壁になっていた、データベースの移行を完了することができました。
FTPファイル操作は「Yummy FTP」が信頼できた。
冒頭にも書きましたが、私は最初「Cyberduck」というFTPツールにて、WordPressデータのアップロード並びにダウンロードをしていたのですが、ダウンロード失敗している例が多かったです。
色々と調べているとよさげな FTP ツールがありました。
さくらtoシックスコアのサーバー移転手順とハマった点 | しゅうまいの256倍ブログ neophilia++
しゅうまいさんが紹介されていた「Yummy FTP」。
Yummy FTP 1.9.1
容量 :3.9 MB
価格 : ¥850
販売元: Martin Crane Limited
昔にひとりぶろぐさんがセール中に紹介していたものを運良く私は落としていましたが使っていなかったんですね。
これを使うことでデータに関しても問題なく移行できました。こちらも実はサーバー上で圧縮ファイルを展開するという技があるみたいなんですが、こちらは力技で転送致しました。
移行そのものは割とスムーズでした。
とにかくデータの取り扱いが難しいだけで、それにまつわるエントリーをたくさん読んでいたこともあって、移行のイメージは頭にでき上がっていましたせいか、データさえどうにかなればあとは割と簡単でした。
何はともあれ、安定した Sixcore サーバーでのブログ運営が始まったわけです。移行後、目に見えて速く、軽くなったような気がします。あとはアクセス集中にどれだけ耐えてくれるかなんですが、心配はしていません。
Googleのウェブマスターツールなどでのスコアも気にしながら今後の運営に取り組んでいきたいですね。
とにかく長年の夢がやっと叶ったって感じで自分としてもホッとしています。しばらくはゆっくりと運営していきたいと思ってます。やや特殊な環境でお役に立てる部分は少ないかもしれませんが、同様のお悩みを持つ方の少しの助けになればいいなぁと思ってます。
私の選んだ新しいサーバーは「Sixcore」です。非常に快適ですね。さまざまな細かい設定ですとか、サポートも手厚く日曜でもメールでの相談をうけていただいたりしています。興味がある方はぜひチェックしてみてください。
ではまた。
みなさんはどう思われましたか?
ブログへのいいね!もそのノリで是非!
.