MySQL
centos7
mysql5.7

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

前置き

本記事は前回の記事の続編です。
ご覧になっていない方は、前回の記事もご覧になってください。
さて、今回はRailsで使うRDBにMySQLを利用するための準備を行います。まぁほぼMySQLのインストールするだけですが、始めていきます!

MySQLをインストールする

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

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

    # yum localinstall -y http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
    
  3. MySQLをインストールします。

    # yum -y install mysql-community-server
    
  4. インストールされたか確認します。
    問題なし:thumbsup:

    # mysqld --version
    # mysqld  Ver 5.7.22 for Linux on x86_64 (MySQL Community Server (GPL))
    
  5. 起動と自動起動の設定をします。

    # 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
    
  2. 基本的な初期設定を行います。
    以下を実行します。

    # 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
    
  3. ログインを確認します。
    接続OK:thumbsup:

    # mysql -uroot -p
    Enter password:                   # 新パスワード
    mysql> 
    
  4. 文字コードを変更します。

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

      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/ |
      +--------------------------+----------------------------+
      
    2. 設定ファイルを書き換えます。

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

      my.cnf
      character-set-server=utf8mb4    #[mysqld]セクション
      
      [client]
      default-character-set=utf8mb4
      
    4. MySQLを再起動します。

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

      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/ |
      +--------------------------+----------------------------+
      
    6. Railsアプリ用のDBアカウントを作成します。
      現在はどこからでもアクセス出来る状態にしています。本番環境では変更すると思います。

      GRANT ALL ON *.* TO 'rails'@'%' IDENTIFIED BY 'Hogehoge123!';
      
    7. DBアカウント「rails」でテストログインしてみます。

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

      my.cnf
      default_password_lifetime=0
      

Rails向けにセットアップする

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

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

終わりに

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