8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2018-06-10

前置き

本記事は前回の記事の続編です。
ご覧になっていない方は、前回の記事もご覧になってください。
さて、今回は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
```

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

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

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

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

    # mysql -urails -p
    Enter password:         # Hogehoge123!
    mysql> 
    
  5. 余談です。
    パスワードを変更しないとログイン不能になるオプションですが、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でプロジェクトを新規構築します。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?