LoginSignup
6
7

More than 5 years have passed since last update.

サイズの大きなmysqlのdumpファイルをレンタルサーバへインポートする。

Last updated at Posted at 2014-11-11

phpMyAdminでインポートするとき、phpのMemoryAllocateの制限に引っかかる

サイズの大きなmysqlのdumpファイルを、レンタルサーバーデフォルトのphpMyAdminでインポートしようとすると、phpのMemoryAllocateに引っかかったりしますよね。
シェルが触れるサーバーならコマンドラインからやればいいのですが、
そうじゃないと、テーブルごとに分割してインポートとかやってみますが。。。。どのテーブルまでインポートできたのかわからなくなってしまいます(私が実際に遭遇しました。。。。確実性が全くない)。もうお手上げです。

BigDumpを利用する

そこで、大きなdumpデータを複数行に分割して自動的にインポートできる、PHPのプログラム

BigDump
http://www.ozerov.de/bigdump/

を利用します。

手順

mysqldumpデータの準備

BigDumpでは行ごとに自動分割してインポートし、1回のインポート時に必要なメモリ容量を抑えることで、メモリの利用制限がかかっている環境でも大きなファイルのインポートが可能になります。

ですので、dumpデータを取得する際には、1行のInsert文で複数レコードをinsertするいわゆる拡張insert文を利用しないようにします。

phpMyAdminの場合

mysqldump.jpg

Data creation optionsで画像のように

  • すべての INSERT 文にカラム名を含める
  • 上のどちらでもない

のどちらかを選んでください。(すべての INSERT 文を複数行挿入で行うを選ばない)
あとは必要に応じてオプションをいれてdumpファイルをエクスポートして下さい。

コマンドラインの場合

--skip-extended-insert

オプションを利用して、1行で1レコードのinsertするダンプファイルを作成します。

mysqldump --skip-extended-insert > dump.sql

BigDumpのインストール

インストールといっても、webサーバーでアクセスできるところに、設定を書き込んだファイルを配置するだけです。

ダウンロード

http://www.ozerov.de/bigdump/
からダウンロード

設定を変更

41行名から始まるDBの設定を適切に変更します。


// Database configuration

$db_server   = 'localhost'; //適切なホスト名を
$db_name     = 'db_1'; //DB名を
$db_username = 'dbuser'; //ユーザー名
$db_password = 'password'; //パスワード

また、56行目あたりの、OPTIONAL SETTINGで1度にインポートを実行する行数,インポートの間隔を設定します。
メモリの利用制限にかからないように適切に設定してください。

// OPTIONAL SETTINGS 

$filename           = '';     // Specify the dump filename to suppress the file selection dialog
$ajax               = true;   // AJAX mode: import will be done without refreshing the website
$linespersession    = 3000;   // Lines to be executed per one import session
$delaypersession    = 0;      // You can specify a sleep time in milliseconds after each session
                              // Works only if JavaScript is activated. Use to reduce server overrun

webサーバーからアクセスできる場所へ配置

あとでdumpファイルも同一ディレクトリへアップロードするので、適当なディレクトリを作成して配置します。

例えば、

DocumentRoot/dump/

bigdump.php

をアップロードします。

mysqldumpファイルの配置

先ほどとったmysqldumpファイルを配置します。

前述のbigdump.phpと同じ場所

DocumentRoot/dump/

へ配置することにします。

BigDumpの実行

BigDumpへアクセス

配置したBigDumpへアクセスします。

対象のdumpファイルを選択し、実行

BigDumpへアクセスすると同ディレクトリにあるdumpファイルが選択肢に表示されます。
対象のdumpファイルを選択し、「start import」をクリックします。

終了

後はBigDumpが自動でインポートしてくれます。インポート状況も表示されるので、インポートが100%になったら終了です。

後処理

ちゃんとインポートされていることが確認できたら、bigdump.phpとdumpファイルを削除してください。

参考サイト

大きいサイズのSQLをインポートしてくれる「BigDump」 | 日々の覚書…日常のことも少しだけ
http://www.tailtension.com/usefultool/1498/

mysqldumpで一行ずつのINSERT文を吐き出したい - 屑プログラマの憂鬱
http://artisan.hatenablog.com/entry/20110922/1316670746

6
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7