phpMyAdminのエクスポートが途中で切れるときは

phpMyAdminで大量のデータをエクスポートするとなぜだかデータが途中までしか出力されないことがあります。
なんででしょうか。
ちなみに、そのサーバーではバージョン3.3.10.5のphpMyAdminが使われています。

失敗の始まり

ついさっき、データベースのデータ削除作業でミスして必要なものまでどーんと削除してしまいました。
ぬかりなくバックアップを取っていたので戻したところ、全体で48,000件のうち、後ろの2,000件ほどが戻ってないじゃないですか。

意味が分からないまま、もう一度戻してみる・・・・やっぱ戻らないのであった。
バックアップのデータ、MySQLなのでSQLエクスポートのダンプなのですが、これを確認してみるとそもそもエクスポートされていません。
何故だ。
いるもの消しちゃったのに。
どうしたらいいのか。
えーと、2,000件もう一回入力してもらうように依頼するとか・・・・・・
冷や汗が・・・・・

そのバックアップはphpMyAdminから該当テーブルのみエクスポートしたそのファイル、理由は分からないけど途中で切れている上に、INSERT文は完結しているためにインポート時にエラーにもなにもなりませんでした。
うっかり気づかない可能性もあったけれど、エクスポートされたデータは通常挿入された順に出力されるために直近のデータがなくなっていてあからさまに画面が寂しくなって気づいて良かった。
セーフ。
セーフちゃうけど。

復活

念のためにmysqldumpコマンドでもバックアップしてあったので、そのちょっと巨大なダンプから該当テーブルのダンプだけを切り出したところ、なんと切れてません。
全部あります。
やりました。
やりましたよ。
冷や汗もさわやかなそよ風が吹いて乾いた様子です。

切り出したダンプファイルをzip圧縮して懲りずにphpMyAdminからインポートしたところ、データ量が多いので当たり前ですが延々と時間がかかった末のInternal Serverエラー。
なんだよ。
と思ってテーブルを確認してみると、画面はエラーだけどデータは全部入っていました。
そして今度は慎重にデータ削除して作業完了。

でも、なぜ切れるのか。
いろいろ試そうと思ったけれど、大量のデータ削除作業だったためにすでに少量データしかなく、再現テストができません。
別の環境でデータを戻してダウンロードしてみたところ、切れずにダウンロードできてしまって、ますます分かりません。

結論としては分からないんですけれど、データ量が多い(どれぐらいからが多いのかも分からないですが・・・)場合はコマンドで出力しておいた方が安心、ということかもしれません。
原因が特定できなくてここまで長々と書いてしまい、すいません。

回避方法

HTTP通信の加減で切れた可能性も否めないので、phpMyAdminはブラウザでのダウンロードではなくサーバーのディレクトリにエクスポートする設定もあるようです。
また、サーバー上のファイルをインポートすることもでき、データが多すぎるゆえのタイムアウト、Internal Serverエラーも回避できるかもしれません。

設定ファイル(config.inc.php)の以下の箇所に設定を記述してください。

/* * Directories for saving/loading files from server */
 $cfg['UploadDir'] = ''; 
$cfg['SaveDir'] = '';

UploadDir
SaveDir

この設定の方が安心かもしれません。
ブラウザでダウンロードする方が手軽ですけれど。

また、コマンドでダンプ出力/インポートする再のコマンドは以下ような感じです。
ダンプはgzipで圧縮されて日付つきのファイル名で保存されます。
インポートはsqlをインプットにするだけです。

mysqldump --default-character-set=utf8 -Q -e -h データベースサーバー名 -u ユーザ名 -pパスワード データベース名 > ダンプファイル名

mysql --default-character-set=utf8 -h データベースサーバー名 -u ユーザ名 -pパスワード データベース名 < ダンプファイル名

※キャラクターセットの設定は、もちろんデータベースの設定に合わせてください。

SSHが使えないサーバーも多いですが、使えた方がいざというときに便利ですし安心です。
データベースの更新作業の際には寿命が縮まらないように注意して作業しましょう。

と自分に言い聞かせました。
何度目か分からないけれど。