大容量のデータベースをエクスポートする際に四苦八苦している際に出会った「HeidiSQL」というツールについて紹介したいと思います。
phpMyAdminは「もっさり」
現在のプロジェクトでは開発環境の構築にxamppを使用しています。
xamppをインストールする際に、データベース管理ツールとして利用されているプログラムに「phpMyAdmin」があり、開発をする際にはこのphpMyAdminを使うわけですが、
これがとっっっっっても遅いのです。もっさりしているのです。
そんな中、自分に下されたタスクで悩み、解決に至ったあれこれを備忘録としてまとめたいと思います。
大量データのエクスポート
phpMyAdminのもっさり加減にイライラしていた自分に下されたタスクは、「20万件のデータが入ったデータのエクスポート」でした。
(※20万件のデータを作成したのも自分なのですが、その時の備忘録はまた後日)
なんでも、パフォーマンステストに使用するのだとか。。。
流れとしては、
↓
②完成したデータをエクスポート
↓
③エクスポートしたファイルをクライアント先に持っていきインポート
↑こんなかんじ。
②の作業に取り掛かった際に、今回のテーマともなる問題に直面するわけです。
出てくるエラーは主に以下の2つ
(数字は人によって違ってると思います。)
Fatal error: Allowed memory size of 134217728 bytes exhausted
数字とかは無視して日本語に直すと。。。
・タイムアウトしちゃう(エクスポートに時間かかりすぎてる)
・容量足りない(エクスポートする容量がでかすぎる)
さて、どうしたものか。。。
とりあえずphpMyAdminでの解決を頑張ってみた
もうphpMyAdminでエクスポートすることはほぼほぼないでしょうが、一応、念のため、一応、基本的な解決方法を備忘録として残しておきたいと思います。
◆タイムアウト対策◆
「php.ini」をいじります。
「max_execution_time」の値をいじります。
デフォルトの秒数が設定されているので、これを
max_execution_time = 120
↑とかにすればタイムアウトの問題は解決です(きっと)。
◆容量対策◆
これもまた「php.ini」をいじります。
こっちは、「memory_limit」をいじります。
デフォルトの容量が設定されているので、これを
memory_limit = 256M
↑とかにすれば容量の問題は解決です(多分)。
余談ですが、、、
容量の上限をなくすには、
memory_limit = -1
↑と設定すると良いようです。
・・・と、phpMyAdminでの解決法を書いてはみたのですが、
これでも解決しませんでした。
色々調べてはみたのですが、どうもapache側の設定もやらなければいけないようで。
これは深追いすると時間がかかりすぎる。。。(気がする)
そこでやり方を変えてみました。
HeidiSQLで「サクサク」
HeidiSQLはphpMyAdminと同じくデータベースを管理するツールです。
(このツールは同じプロジェクトに参画している他会社の先輩社員に教えていただきました。)
ダウンロードはみんな大好き窓の杜から
インストールが済んだ実行ファイルを実行。
接続方法はとても簡単。
・ホスト名に「127.0.0.1」
・ユーザに「root」
・パスワードは設定していたら入力
・データベースは使いたいデータベースを選択
上記4つの情報を選択・入力するとサクっとつながります。
ローカルでの開発の場合下記のような設定になります。
エクスポート方法は、左側に出てくるデータベース名にカーソルを合わせ右クリック、
「データベースをSQLとしてエクスポート」を選択
色々ややこしそうな画面が出てきますが、
データベースとテーブルに「ドロップ」と「作成」というチェックボックスがあるのでどちらにもチェックをつけます。
あとはファイル名を設定して「エクスポート」をクリック
これであっという間にダンプファイルが出来上がります。
まとめ
体感だとphpMyAdminの5000倍くらいの速度です。
他にも良いツールはたくさんあるのでしょうが当分はこれでやっていけそうな気がします。