railsのdbをsqlightからMysqlに変更する際に、bundle installでエラーが発生 

#背景
1. railsアプリのdbをsqlightからmysqlに変えようとしていた。
2. database.ymlとgemを書き換えた
3. bundle installをしたら,　以下のエラーが発生

```
> An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
> Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling."
```

#試したこと

1.エラー内容にある通り、gem install~~を実行しても、解決しなかった。
2.ログの確認

```
> ld: library not found for -lssl
> clang: error: linker command failed with exit code 1 (use -v to see invocation)
``` 
で終わっていることを確認。

#先人の知恵を検索
[mysql2 インストール時に 「ld: library not found for -limported_openssl」が表示された場合の対応](https://fkmy.hatenablog.com/entry/2019/10/18/022724 #)
[bundle installでmysql2がエラーになる件](https://qiita.com/SAYJOY/items/dd7c8fc7a3647e7ff969 #)
[mysql2 gemインストール時のトラブルシュート](https://qiita.com/HrsUed/items/ca2e0aee6a2402571cf6 #)

#bundle installできた

```
$  brew info openss

> For compilers to find openssl@1.1 you may need to set:
>  export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
>  export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"

$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl@1.1/lib" 
$ bundle config --local build.mysql2 "--with-cppflags=-I/usr/local/opt/openssl@1.1/include"

$bundle install
```

# mysqlのユーザーを作成して、ユーザーネームとパスワードを.envとdatabase.ymlに設定する

```
$ mysql.server stat
$ mysql -uroot
mysql> create user '[user_name]@localhost' indentified by '[password]';

#.env
MYSQL_USER_NAME='[user_name]'
MYSQL_PASSWORD='[password]'
```

#しかし、Mysqlにコネクトできないエラー発生
```
$ bundle exec rake db:create

> Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
> Couldn't create 'db_development' database. Please check your configuration.
```

#####そもそも、datebase.ymlのsocketとは
databaseとwebアプリが通信する先に必要であるらしい

[https://stackoverrun.com/ja/q/1099552]()
>"2つのプログラムがネットワーク上でお互いに話をしたい場合には、一つのプログラムは、他の1とのTCP接続（「ソケット」）を開くかもしれません。最初のプログラムは、2番目のコンピュータのIPアドレスとプログラムがリッスンしているポートを知る必要があります。"

>"Linuxでは、同じコンピュータ上の2つのプログラムが互いに通信したい場合でも、TCP接続を開くことができます。しかし、彼らはまた、 "ソケットファイル"経由で接続を開くことができます。 LinuxはTCP APIに似たソケットファイルAPIを作成するので、ソケットファイル経由の通信もサポートするためにTCP経由ですでにネットワーク経由で通信しているプログラムを更新するのは大したことではありません。ソケットファイルはTCPより高速ですが、両方のプログラムが同じコンピュータ上にある場合にのみ動作します"

#database.ymlにあるsocketの記述を消すとエラーも消えた
しかし、もう一つのエラーは相変わらず発生している

```
> Couldn't create 'db_development' database. Please check your configuration.
> Mysql2::Error::ConnectionError: Access denied for user 'ENV["MYSQL_USER_NAME"]'@'localhost' (using password: YES)
```


#database.ymlでの環境変数の記載方法が間違っていた

```
#.env

# 変更前
  username: ENV["MYSQL_USER_NAME"]
  password: ENV["MYSQL_PASSWORD"]

# 変更後
  username: <%= ENV["MYSQL_USER_NAME"] %>
  password: <%= ENV["MYSQL_PASSWORD"] %>
```

#無事に”rails db:create”が成功

コンテナ内でも"rails db:create"、成功
bundle exec rspec　コマンドも成功

結果、database.ymlはこうなる

```database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: portfolio1_development
  pool: 5
  username: <%= ENV["MYSQL_USER_NAME"] %>
  password: <%= ENV["MYSQL_PASSWORD"] %>

development:
  <<: *default
  database: portfolio1_development

test:
  <<: *default
  database: db_test

production:
  <<: *default
  database: portfolio1_production
  username: 
```

ちなみにdocker-compose.ymlはこうなる

```docker-compose.yml
version: '3'
services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    tty: true
    stdin_open: true
    depends_on:
      - db
    ports:
      - "3000:3000"
    volumes:
      - .:/myapp:delegated
  db:
    image: mysql:5.7
    environment:
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: password
    ports:
      - '3316:3306'
    volumes:
      - ./db/mysql/volumes:/var/lib/mysql
```