【Rails】 本番環境MySQLデータを開発環境に入れた後に消す方法


# はじめに

本番環境にMySQLのデータを開発環境に入れる時には特にエラーもなくインプットすることができたのですが、消す時になってエラーが発生してハマってしまいました。
少し珍しいケースかもしれませんが、他の方の参考になればと思いまとめることにしました。

#### 関連リンク
そもそも本番環境のMySQLのデータをどうやって開発環境に入れるのかという記事は下記をご参照ください。

* EC2からMySQL(RDS)接続後にローカルMySQLにデータを入力する方法
    * https://qiita.com/syukan3/items/d73d23611c8bfccfa7e4


# エラー

開発環境でDB自体を削除するコマンドを実行したところ、、、

```
$ rails db:drop
```

エラー```ActiveRecord::ProtectedEnvironmentError```が出ました。。。

このエラーの意味は、

本番環境のDBを操作しようとしているが問題ないですか？

という警告のようなもので、環境変数を入れると操作を続けることができるよ。と言ってます。

そもそも開発環境なんですけど、なんで本番環境と出るんですか？？

```
rails aborted!
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your 'production' database.
If you are sure you want to continue, run the same command with the environment variable:
DISABLE_DATABASE_ENVIRONMENT_CHECK=1
bin/rails:4:in `<main>'
Tasks: TOP => db:migrate:reset => db:drop => db:check_protected_environments
(See full trace by running task with --trace)
```

# 結論

先に結論から書いてしまいますが、

Rails5では MySQLに環境変数を格納しており、本番環境のデータをそのまま開発環境に入れたことにより、MySQLの環境変数に本番環境の変数が格納されてしまったため、上記のエラーがでてしまいました。

なので、解決する方法としては、MySQLの環境変数を本番環境のものから開発環境のものに書き換えればいいということです。

# 解決手順

MySQLに接続します。

```
$ mysql -h db -u root -p
```

存在するデータベースを確認します。

```
$ show databases;
```

対象のデータベースを指定します。

```
$ use *******;
```

データベースないのテーブルの一覧を表示します。

```
$ show tables;
```

テーブル一覧の中に```ar_internal_metadata```があると思います。
この中に、環境変数を格納しています。

```
+---------------------------------------------------+
| Tables_in_scm_development                         |
+---------------------------------------------------+
| ar_internal_metadata                              |
| ...                                               |
+---------------------------------------------------+
```

ar_internal_metadataの中身をみてみると、

```
$ select * from ar_internal_metadata;
```

見つけました```production```の文字を。

```
+-------------+-------------+---------------------+---------------------+
| key         | value       | created_at          | updated_at          |
+-------------+-------------+---------------------+---------------------+
| environment | production  | 2020-01-10 09:37:29 | 2020-01-10 09:37:29 |
+-------------+-------------+---------------------+---------------------+
```

この```production```を```development```へ修正します。

```
$ update ar_internal_metadata set value='development'
```

もう一度、ar_internal_metadataの中身をみてみると、

```
$ select * from ar_internal_metadata;
```

環境変数は```development```に変更できました。

```
+-------------+-------------+---------------------+---------------------+
| key         | value       | created_at          | updated_at          |
+-------------+-------------+---------------------+---------------------+
| environment | development | 2020-01-10 09:37:29 | 2020-01-10 09:37:29 |
+-------------+-------------+---------------------+---------------------+
```

MySQLから抜けて

```
$ exit
```

もう一度、DBを削除するコマンドを実行。すると成功しました！

```
$ rails db:drop
```

# まとめ

つらつらと手順を書いたので、人によっては理解しづらいかもしれませんが、困っている誰かの役に立てばなーと思います。


# 参考
* 本番環境のデータをローカルのDBに投入したら UnknownMigrationVersionError と ProtectedEnvironmentError (Rails 5)
    * https://ontheneworbit.blogspot.com/2019/07/db-unknownmigrationversionerror.html

---
### 会社紹介

**株式会社 Mosaica**  
最先端テクノロジーで社会課題を解決し、持続可能な未来を創造する IT カンパニー。
AI ソリューション、クラウド統合、DX 推進、経営コンサルティングなど包括的なサービスでビジネス変革を支援しています。  

詳しくは [公式サイト](https://mosaica.co.jp/) までお気軽にご相談ください。
公式サイト： https://mosaica.co.jp/