頑張らない!でも諦めない!必死にならずにええかげん

(レコード単位)それでもphpMyAdminでエクスポートがサーバーエラーになってしまう場合の対処法

      2014/11/22

Google or AdMax Promotion(it)

レンタルサーバーを利用していて、phpMyAdminを利用したエクスポートを行って、
Internal Server Errorが出てしまいエクスポートが正常に終了しない場合、
それでもエクスポートを行う必要がある場合に、できる対策(レコード指定)をご紹介します。

はじめに

レンタルサーバには様々な制約があり、
phpMyAdminを利用したようなエクスポートでは、
Apacheサーバーなどの実行時間制限などでエクスポートが中断されてしまうことがあります。

その際に表示されるのがInternal Server Errorの表示なのですが、
それでも大切なデータは何とかしてエクスポートする必要があるでしょう。

こうした制約はレンタルサーバの現実であり、限界なのだと思います。

30秒の壁

私のレンタルサーバの環境では、
現在30秒でInternal Server Errorが発生するようになっています。
しばらく前までは、1分20~30秒くらいまで実行できていたのですが、
設定が変更されたかはわかりませんが、今は30秒です。

要はphpMyAdminから何かの処理を要求した際に30秒以内に処理を完了しなければ、
その処理は中断されてしまいます。

エクスポートもしかりで、30秒以内に処理が終わる単位で要求する必要があるのです。
※30秒に明確な裏付けがあるわけではありません、あくまでも実測値です。

01_Internal Server Error

Internal Server Error

phpMyAdminにおける小出しバックアップの方法

phpMyAdminのエクスポート方法はいろいろな方法で行えますが、
最初のうちはこのインターフェイスに慣れるまでは、
phpMyAdminのメニュータブをクリックした際の、
表示される対象が異なっていることに気づきませんでした。

phpMyAdminでは現在の選択レベルに応じて、操作対象が変わります。

最上部に表示されているパンくずリストで自分の現在位置がわかります。

phpMyAdminのパンくずリスト表示

phpMyAdminのパンくずリスト表示

常にこれに注意をして操作する必要があります、この現在位置は次のようなものです。

  • ホスト
  • データベース
  • テーブル

こうした現在の操作対象のとして選択しているレベルに応じてエクスポートの設定も変化します。
エクスポート対象がどのように変化するかについては以下でご紹介しています。
phpMyAdminを利用したMySQLデータのエクスポート

この出力方法での最終手段は、もうレコード単位でのエクスポートしかありません。
テーブル内のデータを複数に分けて、エクスポートを行います。

レコード指定のエクスポート

通常はデータベース単位のエクスポートを行って、
インポートの際にはバッサリとデータベースを削除して、
全データのインポートという手順を取られている方も多いでしょう。

しかし、このレコード単位でのエクスポートインポートでは、
既存のテーブルを残しつつ、
1-1000レコードのインポート、1001-2000レコードのインポートという手順を
順次行っていく必要があります。

そうした時には、エクスポートの方法にも少し気を使う必要があります。

構造に対してはIF NOT EXISTSを有効化

データを分割してエクスポートを行う際には、
テーブル構造の生成処理は初回のみ行える状態にしておく必要があります。

既存にテーブルが存在しない場合には、生成するがそれ以外は生成しないといった感じです。

当然ですがテーブル構造の削除オプションは必要ありません

03_構造オプションの選択

構造オプションの選択

ダンプする際のコマンドは[REPLACE]コマンドを利用するように変更します。

04_データダンプオプションの選択

データダンプオプションの選択

エクスポートの詳細オプションなどについては、以下でご紹介しています。
(構造編)phpMyAdminを利用したエクスポートオプションと出力の関係

(データ編)phpMyAdminを利用したエクスポートオプションと出力の関係

phpMyAdminを利用したエクスポート・インポートで最も適した設定とは?

出力対象の指定

上記の設定にて、最後は出力対象とするレコードの指定を行います。

全体のレコード数をどのくらいのレコード数で分割するかという点においては、
サーバー側の制約(制限時間など)に合わせて、
正しく出力を行うことができるレコード数で分割して出力してください。

この出力行数の設定画面は注意が必要で、
行数を入力しただけではラジオボタンは選択されません。
意識的にクリックする必要があります。

05_ダンプ行の指定

ダンプ行の指定

私の場合は、863,989行(MySQL上で214.9 MiB)のテーブルを、
サーバー上にエクスポートした際に、400,000行のエクスポートで失敗し、
200,000行のエクスポートで正常処理完了といったところです。

この辺の目安は一括エクスポートをした結果で、
生成されたSQLファイルのサイズを確認するとなんとなくわかります。
私の環境の場合には、
40万行の出力サイズがエラー終了で102MB(エラー時はこのサイズ近辺)

20万行の出力サイズが正常終了で58MB
単純計算で40万行はおよそ、116MB程度になっていたと想定できます。
よって、30万行でも一回で出力は可能だと思われます。

切りが悪いので25万行単位で出力すれば、
常に出力が終了するだろうといった感じです。

しかし、86万行を25万単位でとなると、
1テーブルのエクスポートに4回の処理が必要ということになります。
結果、こんな感じでエクスポートしました。

06_出力結果

出力結果

正直、とほほですね。
毎回はこんなこと続けられない・・・といった感じです。

さいごに

こうした形で手間さえかけてあげることで、大きなテーブルであっても、
結果エクスポートを行うことは可能です。

しかし、毎回このような手順を行っていたのでは、
正直どこかでバックアップされていないという事態になることは目に見えていると思います。

レンタルサーバの制約は結局、安かろう悪かろうなんだなと思うところです。

MySQLはOracle Inc.による著作物です。
MySQLはFree Software Foundation, Inc.によってGPL Licenseでライセンスされています。

phpMyAdminはphpMyAdmin devel teamによる著作物です。
phpMyAdminはGNU General Public License, version 2.によってライセンスされています。

*本ページ内に記載されされた各社ブランド、サービス名、商標、登録商標については、
各社ブランドのロゴや商標等に関する帰属についてをご確認ください


最後までお読みいただきありがとうございました。
アルゴリズン


役に立ったと思っていただけたら、以下からシェア頂けたら幸いです^^

QRコードからもこのURLを開けます。

Pitta Promotion

アイキャッチ画像に利用させて頂いております、各社ブランドのロゴやシンボルに関しては、
各社ブランドのロゴや商標等に関する帰属についてをご確認頂けますようお願い致します。
ロゴの使用等に関する苦情・ご意見等がございましたら管理者までご連絡ください。

AdMax Promotion

カテゴリ
すべて展開 | すべて省略

Rakuten Promotion

プロモーション(btm)

Google or AdMax Promotion (it)

 - MySQL, phpMyAdmin ,

  関連記事