ものすごくサイズ大きい(巨大な)sqlファイル(10GB超え)をMySQLにインポートする

MySQLを扱う上で一番ポピュラーなのが、phpMyAdminだと思います。これはブラウザ上でグラフィカルなインターフェイスでデータベースを管理、操作できるアプリケーションです。
まず、大容量のデータをphpMayAdminでインポートするというのはコツがいる、というのは常々知っておりました。メモリー不足でエラーになったり、ブラウザ上で行なわれるのでアクセスがタイムアウトしたり、といった具合に。

※今回は、ローカルPCにインストールしたxampp内のMySQLにインポートします。

無事に15GBのsqlファイルをインポートできた方法(ローカルPCの場合)

データベースに接続する

MySQLの操作は、コマンドラインから行ないます。

コマンドプロンプトを立ち上げる

スタート → すべてのプログラム → アクセサリ → コマンドプロンプト
を起動します。(Windowsの場合)
MySQLはサーバーですので、ユーザーとしてログインして利用します。

MySQL(おそらくphpMyAdminで)セットアップの時に作成したアカウント(一般ユーザー)を使います。
ユーザー名: db_user パスワード: abcdef

MuSQLにログインする記述

C:\> C:\mysql\bin\mysql -u db_user -p
Enter password: abcdef
mysql>

「 mysql> 」という文字を、プロンプト といい、MySQLが命令を待っている状態です。この後に、SQL文を打ち込み、データベースを操作します。

あらかじめphpMyAdminなどから作成したデータベースを選択します。
データベース名: photo

mysql> use photo;
Database changed
mysql>

これで、”photo”というデータベースを扱えるようになります。

そして、最後。「photo.sql」というファイルを読み込みます。

mysql> \. photo.sql

これで、「photo」というテーブルに「photo.sql」のデータがインポートされます。
今回約、15GBのデータ量があったので約40分ほどかかりました。

他にもいろんな方法を試しましたが、駄目でした。しかしこれが有効な場合もあると思うので一応記します。

PHPのメモリーリミットの上限を変更する

php.iniをエディタで開き
私の場合はC:\xampp\php\php.ini

メモリの限界サイズ
memory_limit = 128M

PHPが受け取れるデータの最大サイズ
post_max_size = 128M

アップロードファイル時の最大サイズ
upload_max_filesize = 128M

などと設定しましたが、駄目でした。

また、違う方法として以下も試してみました。

アップロードファイルをローカルデータとして読み込ませる

参考サイト:http://www.eshima.info/archives/2006/11/xamppphpmyadmin.php

xampp/phpMyAdmin/config.inc.php の中の

$cfg[‘UploadDir’]=”;

$cfg[‘UploadDir’]=’./upload’;

に変更します。 次に

xampp/phpMyAdmin/upload

というフォルダを作り、その中に大容量のインポートファイルを置きます。 そしたらphpMyAdminの画面のインポートの中に 「ウェブサーバー上でアップロードする : 」という項目で uploadフォルダのインポートファイルが選択できるようになるので、そこで選択し、インポートを実行します。 あまりに大きいとタイムアウトになってしまいますが 再度実行ボタンを押すと続きからやってくれるようで 簡単にインポートができます。

こんな感じでphpMyAdminのインポート画面にアップロードファイルが選択できるようにまります。

しかし、この方法でも10分くらい読み込みして、29個のテーブルを作成したあたりで、エラーがでて駄目でした。肝心のバイナリの画像データは1つも読み込めていませんでした。通常のsqlファイルであればきっと簡単に読み込めるのだろうけど、3~6MBもあるバイナリデータが2000個以上のあるので、きっといろんな理由で駄目なのだとあきらめました。