CentOS 7とRails 5とMySQL 5.7で使う(2)

# 前置き
本記事は[前回の記事](https://qiita.com/items/ee66c13100242f756f03)の続編です。
ご覧になっていない方は、前回の記事もご覧になってください。
さて、今回はRailsで使うRDBにMySQLを利用するための準備を行います。まぁほぼMySQLのインストールするだけですが、始めていきます！

# MySQLをインストールする
1. MariaDBをアンインストールします。
CentOS 7に標準でインストールされているRDBはMariaDBです。私は使ったことがないのですが、従来のMySQLと互換があると聞きます。しかし、オープンソースのRDBの経験が少ないので、[この書籍](http://gihyo.jp/book/2017/978-4-7741-9305-2)を読んでMySQLを利用してみることにしました。
よって、アンインストールしちゃいます。(またいつの日か。。。)

    ```
    # yum remove -y mariadb-libs
    ```

1. MySQLのリポジトリを登録します。
MySQL 8.0がリリースされましたが、前述の通りオープンソースのRDBの経験が少ないので、ドキュメントやプラクティスが豊富で新しいめのバージョンということで5.7をインスールします。(JSON型に興味あり。)

    ```
    # yum localinstall -y http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
    ```

1. MySQLをインストールします。

    ```
    # yum -y install mysql-community-server
    ```

1. インストールされたか確認します。
問題なし:thumbsup:

    ```
    # mysqld --version
    # mysqld  Ver 5.7.22 for Linux on x86_64 (MySQL Community Server (GPL))
    ```

1. 起動と自動起動の設定をします。

    ```
    # systemctl start mysqld
    # systemctl enable mysqld
    # systemctl status mysqld | grep 'Active: active'
           Active: active (running) since 土 2018-06-09 23:24:51 JST; 2min 53s ago
    ```

# MySQLをセットアップする
先ほどまでの手順で無事にMySQLがインストールされました。
今度はセットアップしていきます。

1. rootの初期パスワードを探します。
ルートのパスワードはインストール時にログに出力されています。
この例では```2dUpdwrC3Q.z```です。

    ```
    # cat /var/log/mysqld.log | grep 'password'
    2018-06-09T14:24:48.910944Z 1 [Note] A temporary password is generated for root@localhost: 2dUpdwrC3Q.z
    ```

1. 基本的な初期設定を行います。
    以下を実行します。

    ```
    # mysql_secure_installation
    ```

    ```
    Enter password for user root:     # 初期パスワード
    New password:                     # 新パスワード
    Re-enter new password:            # 再入力
    ```

    ```
    # パスワードのセキュリティーポリシーが緩い場合は以下のように言われます。 
        The 'validate_password' plugin is installed on the server.
            :
            :
        Change the password for root ? ((Press y|Y for Yes, any other key for No) : y      
    # Yes (今思えばNoで良かったかも)
        New password:                     # とりあえず新パスワード
        Re-enter new password:            # とりあえず再入力
    
        Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
    ```

    ```
    # 匿名ユーザを削除します。
    Remove anonymous users? (Press y|Y for Yes, any other key for No) : y  

    # Rootのリモート接続を禁止します。
    Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

    # テスト用のデータベースを削除します。
    Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
　　
    # この設定をすぐにリロードします。
    Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
    ```

1. ログインを確認します。
接続OK:thumbsup:

    ```
    # mysql -uroot -p
    Enter password:                   # 新パスワード
    mysql> 
    ```

1. 文字コードを変更します。
    1. まず現在の文字コードの設定を確認しておきます。

        ```sql
        mysql> SHOW VARIABLES LIKE 'chara%';
        +--------------------------+----------------------------+
        | Variable_name            | Value                      |
        +--------------------------+----------------------------+
        | character_set_client     | utf8                       |
        | character_set_connection | utf8                       |
        | character_set_database   | latin1                     |
        | character_set_filesystem | binary                     |
        | character_set_results    | utf8                       |
        | character_set_server     | latin1                     |
        | character_set_system     | utf8                       |
        | character_sets_dir       | /usr/share/mysql/charsets/ |
        +--------------------------+----------------------------+
        ```
    1. 設定ファイルを書き換えます。

        ```
        # vi /etc/my.cnf
        ```
    1. 末尾に追加します。

        ```my.cnf
        character-set-server=utf8mb4    #[mysqld]セクション

        [client]
        default-character-set=utf8mb4
        ```

    1. MySQLを再起動します。

        ```
        # systemctl restart mysqld
        ```

    1. もう一度、文字コードの設定を確認します。
        変更されてますね:thumbsup:

        ```sql
        mysql> SHOW VARIABLES LIKE 'chara%';
        +--------------------------+----------------------------+
        | Variable_name            | Value                      |
        +--------------------------+----------------------------+
        | character_set_client     | utf8mb4                    |
        | character_set_connection | utf8mb4                    |
        | character_set_database   | utf8mb4                    |
        | character_set_filesystem | binary                     |
        | character_set_results    | utf8mb4                    |
        | character_set_server     | utf8mb4                    |
        | character_set_system     | utf8                       |
        | character_sets_dir       | /usr/share/mysql/charsets/ |
        +--------------------------+----------------------------+
        ```

  1. Railsアプリ用のDBアカウントを作成します。
現在はどこからでもアクセス出来る状態にしています。本番環境では変更すると思います。

        ```sql
        GRANT ALL ON *.* TO 'rails'@'%' IDENTIFIED BY 'Hogehoge123!';
        ```

  1. DBアカウント「rails」でテストログインしてみます。

        ```sql
        # mysql -urails -p
        Enter password:         # Hogehoge123!
        mysql> 
        ```

  1. 余談です。
パスワードを変更しないとログイン不能になるオプションですが、MySQL 5.7.11でデフォルト値が変わったので、以下の追記は割愛しました。またデフォルト値が変わったら再考しましょう！

        ```my.cnf
        default_password_lifetime=0
        ```

# Rails向けにセットアップする
このまま```rails new hoge -d　mysql```を実行しても、mysql2が無くエラーになります。
セットアップの記事や[数年前に買っていた書籍](https://book.impress.co.jp/books/3375)(何年も前からやろうと思っていたことを、今やっているので現在は古い書籍ですね。)では「エラーになったら入れる」「それでもエラーになったら、これも入れる」というような紹介が多かったです。仕方ない部分もありますが、初学者(私とかね)の精神衛生上、よろしく無いので、予めインストールしておきます。

```
# yum -y install mysql-devel
# gem install mysql2 -v '0.5.1'
```

# 終わりに
前回の記事でお伝えしたとおり、ほぼMySQLのインストールの記事になりました。良い記事をリンクさせて頂き「Rails向けにセットアップする」部分だけ書けば良いとも思いましたが、私が実施したとおりの内容で記事にしてみました。
冗長ですみません:bow_tone1:
次回はRailsでプロジェクトを新規構築します。