phpMyAdminでインポートできない大きなファイルを一気にインポートできる「BigDump」
phpMyAdminを使ったSQLファイルのインポートにはファイルサイズの制限があり、サーバ環境によってはサイズの大きいSQLファイルをインポートできない場合があります。
これを解消してくれるのが「BigDump」です。
BigDumpは、PHPベースのMySQLインポートツールです。
先日行ったサーバ移転で、100MBほどあるSQLファイルのインポートにこれを利用しました。約100MBほどあるSQLファイルを分割もせず、わずか1分ほどでインポートすることができました。
ということで以下、BigDumpによるSQLファイルのインポート手順を解説します。1つのSQLファイルサイズがかなり大きくても大丈夫なようですが、エクスポートするSQLファイルは7項の手順にしたがって出力したものを利用することを推奨します。
1.BigDumpのダウンロード
BigDumpのページの右にある「BigDump ver. 0.34b (beta) 」をクリック(バージョンは2012年4月現在)。
2.BigDumpの設定
ダウンロードしたアーカイブを展開し、中にあるbigdump.phpを任意のエディタで開き、データベースに接続するための以下の情報(赤色部分)を編集します。
// Database configuration
$db_server = 'localhost';
$db_name = '';
$db_username = '';
$db_password = '';
それぞれの設定内容は次のとおりです。
- $db_server:データベースサーバ
- $db_name:データベース名
- $db_username:データベースユーザ名
- $db_password:データベースパスワード
また、文字エンコーディングの設定もあります。
// Connection charset should be the same as the dump file charset (utf8, latin1, cp1251, koi8r etc.)
// See http://dev.mysql.com/doc/refman/5.0/en/charset-charsets.html for the full list
// Change this if you have problems with non-latin letters
$db_connection_charset = '';
UTF-8を設定する場合は次のようにします。
$db_connection_charset = 'utf8';
$db_connection_charsetの設定は不要と思いますが、6項のインポート実行でデータが文字化けした場合のみこの設定を行い、データベースを一旦削除・再作成して再実行するといいでしょう。
試してみたところ、さくらインターネットでは設定不要でしたが、ローカルPCのXAMPPのMySQLにインポートする場合は設定が必要でした。
上記以外の設定項目もいろいろあるようですが、編集は不要です。
3.BigDump用のディレクトリ作成とbigdump.phpのアップロード
FTPツール等で、ウェブサイトやブログを公開するサーバに「BigDump」などのディレクトリを作成します。ディレクトリはブラウザからアクセス可能な場所に作成してください。
そして作成したディレクトリに、2項で編集したbigdump.phpをアップロードします。
4.bigdump.phpの起動
ブラウザからbigdump.phpにアクセスします。データベースの設定が正しければ次のような画面が表示されます。
データベースの設定が正しくない場合は次のような表示になります。
正常に表示されない場合は、bigdump.phpに設定したデータベース情報の設定を見直してください。
5.SQLファイルのアップロード
FTPツール等を使って、phpMyAdminなどでエクスポートしたSQLファイルをbigdump.phpと同じディレクトリにアップロードします。
もし、SQLファイルのサイズがそれほど大きくなければ、bigdump.phpを使ったアップロードも可能です。
アップロードするには、4項で表示されているbigdump.phpのフォームからSQLファイルを選択し、「Upload」をクリックします。これでbigdump.phpと同じディレクトリにSQLファイルをアップロードします(この操作ではインポートは実行されません)。
ただしアップロード可能なファイルサイズは、サーバによって上限が異なります。上記のスクリーンショットはローカルPCのXAMPPの設定なので32MBになっています。さくらインターネットでは5MBでした。
FTPによるアップロード、またはbigdump.phpを使ったアップロード、いずれの場合も、アップロードしたファイルは次のように表示されます。
ここでは1ファイルのみですが、複数のSQLファイルをアップロードすればすべて表示されます。
6.インポート実行
※本手順を実行する前に7項までお読みください。
表示されたSQLファイルの一覧にある「Start Import」をクリックすれば、インポートを開始します。
次のように表示されればインポート完了です。実行ラインやクエリー数、バイト数などが表示されます。
以下の動画は当ブログのSQLファイルを実際にインポートしてみたものです。プログレスバーなどで進捗状況が分かるようになっています。
インポート完了後、画面下にある「Start from the beginning」をクリックして最初の画面に戻ります。このとき、絶対にブラウザの「戻る」で戻らないでください(インポートが再実行されます)。
一覧の右側にある「Delete file」をクリックすれば、サーバ上のSQLファイルを削除し、再実行を防ぎます(削除されないケースもあるようです。原因は不明)。
複数のSQLファイルをインポートする場合は、6項の手順を繰り返してください。
7.インポート時のエラーについて
「Start Import」を実行したあと、以下のエラーが発生する可能性があります。
このエラーの原因は、1回にINSERTするときの行数が300行以上ある場合です。ファイルサイズの小さいSQLファイルでも、1つのINSERT文に300行以上の内容が含まれていると、このエラーが発生する可能性があります。
具体的には次のようなSQLファイルの場合です。
INSERT INTO `mt_tag` (`tag_id`, `tag_is_private`, `tag_n8d_id`, `tag_name`) VALUES
(1, 0, 7, 'Customize'),
(2, 0, 9, 'MovableType'),
(3, 0, 11, 'Profile'),
(4, 0, 13, 'Template'),
:
(300行以上)
:
(1063, 0, 1062, 'WinMerge'),
(1064, 0, 0, 'persistentheaders'),
(1065, 0, 1064, 'PersistentHeaders');
このエラーを回避するには、phpMyAdminからエクスポートするときに、「作成するクエリの最大長」の値を変更します。さくらインターネットの場合、デフォルトで50000になっていたので、この値を5000などに変更してエクスポートします。これで1回のINSERT文が300行以内になりました。
この値について、例えば10などを設定しても、1つのINSERT文に1レコードの情報が入らなくなるということはありません。
- MySQLのrootログインで「Access denied for user 'root'@'localhost' (using password: YES)」に遭遇した場合の対処
- mysqlやmysqldumpで「 [Warning] Using a password on the command line interface can be insecure.」という警告が表示される場合の対処
- bashでMySQLのselect結果を出力する方法
- MySQL(phpMyAdmin)でエラー#1089になる場合の対処
- MySQLで「The used SELECT statements have a different number of columns」となる場合の対処
- mysqldumpで「Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces」となる場合の対処
- SSHポートフォワーディングでMySQLに接続する方法
- Windows向けMySQL管理クライアント「HeidiSQL」
- WindowsにMySQL(zip版)をインストールする
- MySQLのmax_user_connectionsについて
- phpMyAdmin で MySQL のストレージエンジンを MyISAM から InnoDB に変更する方法