【MAMP+マルチドメイン】大きな sql dump ファイルを bigdump で読み込む 

# Bigdump を使った mysql.dump の読み込み

大きな mysql データベースの dump ファイルの読み込みに問題がある場合、例えばタイムアウトなどが起こって読み込めないなど、
その問題に対処したスクリプトとして、BugDump というものを Alexey Ozerov さんが開発・公開されています。ドイツの方かな、感謝。

[BigDumpのサイト](https://www.ozerov.de/bigdump/)

今回、開発中の Laravel を使ったプロジェクトのローカルな開発環境(MAMP+マルチドメイン環境)で bigdump にお世話になったのでその使い方のメモを書いておきます。

# 想定している開発環境

- XAMPP または MAMP を利用し、かつマルチドメインで複数のサーバの開発を行っている。
- Laravel フレームワークを利用した Web サーバー開発を行っている。

# 環境設定

BigDump の説明を読むと、サーバー上で動作する php のスクリプトとして開発されているので、マルチドメインの一つとして BigDump のスクリプトを動くように設定します。

## BigDump 用のドメインを準備

### フォルダの準備

まずマルチドメインで動作する環境を作るため  
htdocs の下に、bigdump というフォルダを作成し、簡単な index.html を準備します。

```
作成するフォルダ: htdocs/bigdump
作成する index.html
```

サンプル index.html

```
<!doctype html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>Bigdump index</title>
</head>
<body>
  <h1>Bigdump index</h1>
  <p>
    <a href="./bigdump.php">bigdump.php</a>
  </p>
</body>
</html>
```

### httpd-vhost.conf の編集

マルチドメインの設定はできているという前提で、XAMPP(MAMP) の httpd-vhost.conf ファイルの編集を行います。

もちろんポート番号や ServerName は環境に合わせてください。

```
# bigdump
<VirtualHost *:8888>
    DocumentRoot "/Applications/MAMP/htdocs/bigdump"
    ServerName "local.bigdump"
</VirtualHost>
```
 
### hosts ファイルの編集

Linux 系だと `/etc/hosts` ファイルの編集。

```
127.0.0.1       local.bigdump
```

を追加

### マルチドメインでのページアクセスをテスト

`http://local.bigdump:8888` にアクセス。

下記のページが出ればoK.

![bigdump-001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407974/94334468-4c53-f5ed-cbf0-56e272b95930.png)



### bigdump.php のダウンロード

`bigdump.php` をダウンロードします。

![bigdump-002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407974/d6690906-d9df-a713-3845-8bd25cb227ae.png)

[BigDumpのサイト](https://www.ozerov.de/bigdump/)

ダウンロードした `bigdump.php` は `htdocs/bigdump` フォルダの下にコピーします。

### bigdump.php ファイルの編集

サーバーの設定部分 (この書面作成時では 38行目以降)

```
// Database configuration

$db_server   = 'localhost';         //<= MAMP環境では localhost のままでOK
$db_name     = 'xxxxxxxxx';         //<= Laravel で開発中の .env を参照すると良いと思います。
$db_username = 'yyyyyyyyy';         //<= Laravel で開発中の .env を参照すると良いと思います。
$db_password = 'zzzzzzzzz';         //<= Laravel で開発中の .env を参照すると良いと思います。

// 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 = 'utf8mb4';     //<= 日本語を使っているので utf8からマルチバイトの utf8mb4 に変更
```

もう１箇所、読み込ませる元のデータベースに外部キーがある場合は、以下の設定を有効にしないとエラーが出ます。  
(この書面作成時では 78行目)

```
// $pre_query[]='SET foreign_key_checks = 0';
```

の `//`コメントを外して、有効にする。

```
$pre_query[]='SET foreign_key_checks = 0';
```

# 動作確認

まず、phpMyAdmin などを利用し、対象のデータベース内の全てのテーブルを削除(drop) しておきます。

ブラウザを利用し、作成した URL にアクセス

![bigdump-001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407974/94334468-4c53-f5ed-cbf0-56e272b95930.png)

`bigdump.php` の部分をクリック

![bigdump-003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407974/f9740c7b-7523-16d9-7d7c-8a11705c17c2.png)

インポートしたい dump ファイルを読み込ませて、[upload] すると、下記のような画面になります。

![bigdump-004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407974/39d4178f-9229-6a36-d270-4639082070e1.png)


この画面で 赤線で示した `Start Import` を実行するとインポートが始まります。

下記のような画面が出たらインポートは終了です。

![bigdump-005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407974/1386b2ed-c475-8941-9c5c-8cd3d24bb703.png)

アップロードした dump ファイルは /htdocs/bigdump フォルダの下に置かれています。画面から Delete File で消すことも可能でした。

以上、MAMP+マルチドメインで bigdump を利用したメモでした。