Hologram を使ってスタイルガイドを作成してみた

Hologram とは

HologramRuby 環境で動くスタイルガイドジェネレータです。

.css.scss.sass.less.styl などの多様な形式のファイルに書かれたコメントから、自動でスタイルガイドを作ってくれます。

スタイルガイドは、静的な HTML ファイルとして出力され、独自のテンプレートを使ってスタイルガイドをカスタマイズすることもできます。

f:id:enomotodev:20170519204215p:plain

作業環境

  • CentOS 7.2
  • Ruby 2.3.1
  • Bundler 1.13.2
  • Sass 3.4.22

Hologram のインストー

プロジェクトの Gemfilegem "hologram" を追記します。

source "https://rubygems.org"

gem "sass"
gem "hologram"

追記したら bundle install しましょう。

$ bundle install

インストールが完了したので、バージョンを確認してみましょう。

$ hologram -v
hologram 1.4.0

Hologram の始め方

hologram init コマンドで hologram の設定ファイルなどが作成されるので、hologram init を実行してみます。

$ hologram init
Created the following files and directories:
  hologram_config.yml
  doc_assets/
  doc_assets/_header.html
  doc_assets/_footer.html
  code_example_templates/
  code_example_templates/markdown_example_template.html.erb
  code_example_templates/markdown_table_template.html.erb
  code_example_templates/js_example_template.html.erb
  code_example_templates/jsx_example_template.html.erb

色々とファイルが作成されましたが、hologram_config.yml の中身を見てみましょう。

# Hologram will run from same directory where this config file resides
# All paths should be relative to there

# The directory containing the source files to parse recursively
source: ./sass

# The directory that hologram will build to
destination: ./docs

# The assets needed to build the docs (includes header.html,
# footer.html, etc)
# You may put doc related assets here too: images, css, etc.
documentation_assets: ./doc_assets

# The folder that contains templates for rendering code examples.
# If you want to change the way code examples appear in the styleguide,
# modify the files in this folder
code_example_templates: ./code_example_templates

# The folder that contains custom code example renderers.
# If you want to create additional renderers that are not provided
# by Hologram (i.e. coffeescript renderer, jade renderer, etc)
# place them in this folder
code_example_renderers: ./code_example_renderers

# Any other asset folders that need to be copied to the destination
# folder. Typically this will include the css that you are trying to
# document. May also include additional folders as needed.
dependencies:
  - ./build

# Mark which category should be the index page
# Alternatively, you may have an index.md in the documentation assets
# folder instead of specifying this config.
index: basics

# To additionally output navigation for top level sections, set the value to
# 'section'. To output navigation for sub-sections,
# set the value to `all`
nav_level: all

# Hologram displays warnings when there are issues with your docs
# (e.g. if a component's parent is not found, if the _header.html and/or
#  _footer.html files aren't found)
# If you want Hologram to exit on these warnings, set the value to 'true'
# (Default value is 'false')
exit_on_warnings: false
  • source
    .css.scss.sass.less.styl などのスタイルガイドを作成する元になるファイルが置かれているディレクトリを指定します。
  • destination
    作成されたスタイルガイド(HTML ファイル)を出力するディレクトリを指定します。
  • documentation_assets
    出力されるスタイルガイドのテンプレートを置くディレクトリを指定します。ここで指定したディレクトに置かれた _header.html_footer.html を使用して HTML ファイルが作成されるので、独自のテンプレートを作成したい場合は、_header.html_footer.html を編集するようなかたちになります。
  • code_example_templates
    CSS などでスタイルガイド用にコードを記述する時にフォーマットを指定できるのですが、例えば markup_example と指定した場合はここで指定したディレクトリの markup_example_template.html.erb を元にスタイルガイドを出力します。
    指定したファーマットのファイルが存在しない場合はデフォルトのテンプレートが使用されます。
  • code_example_renderers
    coffee_example など code_example_templates で指定できるフォーマット以外のフォーマットを使用したい場合は、ここで指定したディレクトリに coffee_example_template.html.erb などというかたちでファイルを作成します。
  • dependencies
    ここで指定したディレクトリのファイルはスタイルガイドを作成する際に documentation_assets で指定したディレクトリにコピーされます。
  • index
    スタイルガイドの TOP に表示するカテゴリーを指定することができます。
  • nav_level
    section または all を指定することでナビゲーションのレベルを変更することができます。all を指定すると sub-section まで表示することができます。
  • exit_on_warnings
    documentation_assets で指定したディレクトリに _header.html がない時など、エラーが発生して Hologram が終了する時に Warning を表示したい場合は true を指定します。

Hologram のサンプルを動かしてみる

Hologram には公式のサンプルがあるので、今回はそちらを動かしてみます。

まずは先ほどの hologram init コマンドで自動生成されたファイルを削除します。

$ rm -rf ./*

公式のサンプルを git clone します。

$ git clone git@github.com:trulia/hologram-example.git .

ビルドします。

$ hologram config.yml
Adding renderer for haml examples
Adding renderer for html examples
Adding renderer for js examples
Adding renderer for jsx examples
Adding renderer for react examples
Adding renderer for slim examples
Build completed. (-:

これで docs ディレクトリに HTML 形式でスタイルガイドが出力されたのでブラウザから確認してみます。

f:id:enomotodev:20170519204221p:plain

スタイルガイドの TOP を変更する

Hologram では source で指定したディレクトリ(.css.scss ファイルなどが置いてあるディレクトリ)直下に index.md を置くと、それをスタイルガイドの TOP として表示するようです。

index.md を削除して、Base CSS カテゴリーを TOP に設定してみましょう。

まずは index.md と先ほど作成した docs ディレクトリを削除します。

$ rm -rf components/index.md docs/

次に config.yml に追記して、『Base CSS』カテゴリーを TOP にするよう宣言します。

  • config.yml
...(略)
index: base_css

再度、ビルドします。

$ hologram config.yml
Adding renderer for haml examples
Adding renderer for html examples
Adding renderer for js examples
Adding renderer for jsx examples
Adding renderer for react examples
Adding renderer for slim examples
Build completed. (-:

ブラウザから確認してみます。

f:id:enomotodev:20170519204223p:plain

TOP にアクセスすると『Base CSS』カテゴリーがきちんと表示されました。

まとめ

Hologram はテンプレートを編集することによってスタイルガイドを自由にカスタマイズすることが可能です。

Hologram.css.scss ファイル内のコメントから自動で HTML を出力するので、wiki でよく見られる更新が滞りがちになるといったことも回避できるのではないかと思います。

systemd を使って自作スクリプトをサービス化してみた

作業環境

systemd とは

systemd とは、Lennart PoetteringKay Sievers を中心に開発された、Linux の起動処理やシステム管理を行う仕組みのことです。

2011年5月にメジャー Linux ディストリビューションFedora に採用され、2014年12月にリリースされた CentOS 7 にも採用されました。

systemd はこれまで使われてきたデーモンごとの起動シェルスクリプトに代わり、『ユニットファイル』と呼ばれる設定ファイルに各デーモン用の初期化命令を記述します。

コマンドを作る

まずは systemd に登録して動作させるスクリプトを用意します。

今回は1秒ごとに現在時刻をログに追記していくスクリプトで試してみたいと思います。

  • /opt/date.sh
#!/bin/bash

while true
do
   date >> /tmp/date.log
   sleep 1
done

実行権限を与えます。

sudo chmod 0755 /opt/date.sh

ユニットファイルを作成する

  • /etc/systemd/system/date.service
[Unit]
Description = date log daemon

[Service]
ExecStart = /opt/date.sh
Restart = always
Type = simple

[Install]
WantedBy = multi-user.target

Service セクションの ExecStart に実行したいコマンドを記述します。

Restart はサービスのメインプロセスが停止した際の動作を指定することができ、always を指定することによって、常に再起動を試みます。

サービスとして認識されているか確認する

それでは、作成したユニットファイルがサービスとして認識されているか確かめます。

$ sudo systemctl list-unit-files --type=service | grep date.service
date.service                                disabled

Service として認識されているのが確認できました!

サービスを起動する

それではサービスを起動しましょう。

$ sudo systemctl start date

自動起動の設定も行っておきましょう。

$ sudo systemctl enable date

ステータスの確認を行ってみます。

$ sudo systemctl status date
● date.service - date daemon
   Loaded: loaded (/etc/systemd/system/date.service; enabled; vendor preset: disabled)
   Active: active (running) since 金 2016-09-23 14:45:09 UTC; 1h 49min ago
 Main PID: 4168 (date.sh)
   CGroup: /system.slice/date.service
           ├─ 4168 /bin/bash /opt/date.sh
           └─14162 sleep 1

 9月 23 14:45:09 localhost.localdomain systemd[1]: Started date daemon.
 9月 23 14:45:09 localhost.localdomain systemd[1]: Starting date daemon...

サービス起動の確認がとれたので、ログファイルへの書き込みがきちんと行われているかも確認してみます

$ tail -f /tmp/date.log
Fri Sep 23 16:37:31 UTC 2016
Fri Sep 23 16:37:32 UTC 2016
Fri Sep 23 16:37:33 UTC 2016
Fri Sep 23 16:37:34 UTC 2016
Fri Sep 23 16:37:35 UTC 2016
Fri Sep 23 16:37:36 UTC 2016
Fri Sep 23 16:37:37 UTC 2016
Fri Sep 23 16:37:38 UTC 2016
Fri Sep 23 16:37:39 UTC 2016
Fri Sep 23 16:37:40 UTC 2016
Fri Sep 23 16:37:41 UTC 2016
...

ログファイルにもきちんと書き込みが行われているのが確認できました。

まとめ

systemd を使うことによって簡単に自作スクリプトをサービス化して起動することができました。

これから、ユニットファイルの書き方であったり、systemd の概念的なところをもう少し詳しく勉強していきたいと思います。

CentOS 7 に Redash インストールして MySQL のデータをグラフ表示してみた

作業環境

Docker + Docker Compose のインストー

Re:dash は CentOS では Docker のコンテナ上で起動させるので、まずは Docker をインストールします。

Kernel のバージョンを確認する

CentOS 7 に Docker をインストールするには Kernel が 3.10 以上ではないといけないようなので Kernel のバージョンを確認します。

$ uname -r
3.10.0-327.el7.x86_64

3.10 以上なので、Docker のインストールを進めていきます。

Docker のインストー

まずは root ユーザに変更します。

$ sudo su -

ここからは root ユーザでの作業にになります。

次のコマンドで Docker のインストールができます。

# curl -fsSL https://get.docker.com/ | sh

インストールが完了したので、バージョンを確認します。

# docker --version
Docker version 1.12.1, build 23cf638

Docker を起動させます。

# service docker start
Redirecting to /bin/systemctl start  docker.service

自動起動の設定も行っておきましょう。

# chkconfig docker on
Note: Forwarding request to 'systemctl enable docker.service'.
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

これで Docker のインストールは完了です。

Docker Compose のインストー

Re:dash は Docker コンテナの管理を Docker Compose で行っているので、Docker Compose もインストールします。

GitHub のリリースページ から最新のコマンドをコピーして、実行します。

# curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose

これで Docker Compose のインストールが完了となりますので、バージョンを確認してみます。

# docker-compose --version
docker-compose version 1.8.0, build f3628c7

Re:dash のインストー

Docker + Docker Compose のインストールが完了したので、いよいよ Re:dash のインストールをしたいと思います。

まずは、git clone して、サンプルの設定ファイルを元に設定ファイルを作成します。

# git clone https://github.com/getredash/redash.git
# cd redash/
# cp docker-compose-example.yml docker-compose.yml

まずは PostgreSQL のコンテナを起動します。

# docker-compose up postgres

PostgreSQL のコンテナが起動したら、次のコマンドを実行していきます。

なお、PostgreSQL のコンテナ起動後、端末は操作できなくなるので、別タブを開いたりして、再度アクセスし、root ユーザに変更してください。

# ./setup/docker/create_database.sh
# docker-compose up

これで Re:dash が起動したので、ブラウザからアクセスしてみましょう。

f:id:enomotodev:20170519203657p:plain

無事ログインできました!

ログイン画面が表示されたので、ログインしてみましょう。

初期の Email、Password はこちらになります。

  • Email:admin
  • Password:admin

f:id:enomotodev:20170519203705p:plain

MySQL への接続

画面右上の『Data Sources』 → 『New Data Source』をクリックし、MySQL の設定を行っていきます。

ここで注意するのは、MySQL はコンテナのホスト側にあるので、MySQL の Host は Re:dash への接続元 IP になります。

Re:dash への接続元 IP はコンソールに出力されている Re:dash のアクセスログから判断することができます。

グラフ表示する

まず、画面上部の『Queries』 → 『New Query』から Query 入力画面に移動し、『Data Source』に先ほど登録した Data Source がきちんと設定されていることを確認します。

次に、入力フォームに SQL を記述し、『Execute』ボタンを押します。

そうすると下記のように結果が出力されます。

f:id:enomotodev:20170519203711p:plain

結果に問題ないようであれば、『Save』ボタンで今回の SQL を保存することができます。

結果をグラフ化するには『+ NEW VISUALIZATION』ボタンを押して、Visualization Editor に移動します。

画面に従って、グラフの種類や、縦軸・横軸に表示するカラムを設定していくと次のようなグラフが完成します。

f:id:enomotodev:20170519203717p:plain

まとめ

Re:dash を使うことによって、SQL の結果を簡単にグラフ化することができました。

Re:dash は一つひとつの SQL やグラフに固定の URL が割り振られるので、URL さえあれば、SQL での分析結果をみんなで共有することができ、分析結果の属人化を防ぐことができます。

導入自体もそれほど難しくはないので、今後積極的に活用していきたいと思います。

Embulk を使って CSV から MySQL へデータ投入してみた

今回は Embulk を使って、CSV から MySQL にデータを投入してみたいと思います。

Embulk とは

Embulk とはバルクデータローダーと呼ばれる、データ転送ツールです。

Fluentd を開発した Tresure Data によって開発され、Fluentd を知っている方は、Fluentd のバッチ版だと考えると理解しやすいと思います。

(Fluentd についてはこちらで記事にしています)

Fluentd のように入力・出力のプラグインは多数公開されており、例えば、MySQL の入力プラグインと、ElasticSearch の出力プラグインを組み合わせることによって、MySQL のデータを ElasticSearch に移したりなど、異なるデータストア間でのデータの交換が容易に行うことができます。

作業環境

※ Embulk の実行には Java が必須となるので、事前にインストールしておきましょう。

Embulk のインストー

GitHub に記載されている通りにコマンドを叩いていきます。

$ curl --create-dirs -o ~/.embulk/bin/embulk -L "http://dl.embulk.org/embulk-latest.jar"
$ chmod +x ~/.embulk/bin/embulk
$ echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
$ source ~/.bashrc

以上で完了となるので、バージョンを確認してみます。

$ embulk --version
embulk 0.8.13

seed.yml から設定ファイルを自動生成する

livedoor グルメの研究用データセットを使い、口コミのデータを MySQL に投入したいと思います。

まずは、口コミデータ CSV をダウンロードしてきます。

$ wget -O test.tar.gz https://github.com/livedoor/datasets/blob/master/ldgourmet.tar.gz?raw=true
$ tar xfvz test.tar.gz
areas.csv
categories.csv
prefs.csv
ratings.csv
rating_votes.csv
restaurants.csv
stations.csv

何個か CSV ファイルがありますが、この中から ratings.csv のみ使用していきます。

ratings.csv は次のような内容になっています。

id,restaurant_id,user_id,total,food,service,atmosphere,cost_performance,title,body,purpose,created_on
156445,310595,ee02f26a,5,0,0,0,0,,"...",0,"2006-10-07 05:06:09"
3842,10237,fcc21401,1,0,0,0,0,,"...",0,"2004-10-20 00:34:28"
144379,3334,06412af7,2,0,0,0,0,,"...",0,"2006-06-03 16:07:43"
...

Embulk は config.yml ファイルを元にデータの移行を行うのですが、ゼロから記述する場合、CSV ファイルの文字コード、改行コード、デリミタなどをいちいち指定していくのは大変なので、設定ファイルを自動生成してくれる embulk guess コマンドを使って、config.yml ファイルを作成したいと思います。

自動生成するにしても最低限の情報がなければいけないので、seed.yml ファイルに次のように記述します。

  • seed.yml
in:
  type: file
  path_prefix: "./ratings.csv"
out:
  type: stdout

出力ファイル名に config.yml を指定して embulk guess コマンドを実行します。

$ embulk guess seed.yml -o config.yml
2016-09-05 16:30:57.386 +0000: Embulk v0.8.13
2016-09-05 16:30:58.470 +0000 [INFO] (0001:guess): Listing local files at directory '.' filtering filename by prefix 'ratings.csv'
2016-09-05 16:30:58.474 +0000 [INFO] (0001:guess): Loading files [ratings.csv]
2016-09-05 16:30:58.620 +0000 [INFO] (0001:guess): Loaded plugin embulk/guess/gzip from a load path
2016-09-05 16:30:58.630 +0000 [INFO] (0001:guess): Loaded plugin embulk/guess/bzip2 from a load path
2016-09-05 16:30:58.645 +0000 [INFO] (0001:guess): Loaded plugin embulk/guess/json from a load path
2016-09-05 16:30:58.653 +0000 [INFO] (0001:guess): Loaded plugin embulk/guess/csv from a load path
in:
  type: file
  path_prefix: ./ratings.csv
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    delimiter: ','
    quote: '"'
    escape: '"'
    trim_if_not_quoted: false
    skip_header_lines: 1
    allow_extra_columns: false
    allow_optional_columns: false
    columns:
    - {name: id, type: long}
    - {name: restaurant_id, type: long}
    - {name: user_id, type: string}
    - {name: total, type: long}
    - {name: food, type: long}
    - {name: service, type: long}
    - {name: atmosphere, type: long}
    - {name: cost_performance, type: long}
    - {name: title, type: string}
    - {name: body, type: string}
    - {name: purpose, type: long}
    - {name: created_on, type: timestamp, format: '%Y-%m-%d %H:%M:%S'}
out: {type: stdout}
Created 'config.yml' file.

これで次のような config.yml が生成されました。

  • config.yml
in:
  type: file
  path_prefix: ./ratings.csv
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    delimiter: ','
    quote: '"'
    escape: '"'
    trim_if_not_quoted: false
    skip_header_lines: 1
    allow_extra_columns: false
    allow_optional_columns: false
    columns:
    - {name: id, type: long}
    - {name: restaurant_id, type: long}
    - {name: user_id, type: string}
    - {name: total, type: long}
    - {name: food, type: long}
    - {name: service, type: long}
    - {name: atmosphere, type: long}
    - {name: cost_performance, type: long}
    - {name: title, type: string}
    - {name: body, type: string}
    - {name: purpose, type: long}
    - {name: created_on, type: timestamp, format: '%Y-%m-%d %H:%M:%S'}
out: {type: stdout}

embulk-filter-column プラグイン

このまま MySQL にデータを取り込んでも良いのですが、今回は必要なカラムを絞り、id, restaurant_id, user_id, total, created_on の5つのみのデータを扱うことにしたいと思います。

カラムの絞り込みには embulk-filter-column という便利なプラグインがあるので、これを使ってみたいと思います。

まずは embulk gem install コマンドでインストールします。

$ embulk gem install embulk-filter-column
2016-09-05 16:37:50.601 +0000: Embulk v0.8.13
Fetching: embulk-filter-column-0.5.4.gem (100%)
Successfully installed embulk-filter-column-0.5.4
1 gem installed

インストールが終わったら config.ymlinout の間に、次のように必要なカラムのみ記述します。

  • config.yml
in:
(略)
filters:
  - type: column
    columns:
      - {name: 'id'}
      - {name: 'restaurant_id'}
      - {name: 'user_id'}
      - {name: 'total'}
      - {name: 'created_on'}
out: {type: stdout}

MySQL にデータを取り込む

いよいよ MySQL にデータを取り込んでみたいと思います。

embulk-filter-column プラグインの時と同じように、今度は MySQL の出力用のプラグインembulk-output-mysql をインストールします。

$ embulk gem install embulk-output-mysql
2016-09-05 16:50:54.513 +0000: Embulk v0.8.13
Fetching: embulk-output-mysql-0.6.3.gem (100%)
Successfully installed embulk-output-mysql-0.6.3
1 gem installed

プラグインのインストールが完了したら config.ymloutembulk-output-mysql プラグイン用の設定を記述していきます。

  • config.yml
out:
  type: mysql
  host: localhost
  user: root
  password: uhsd!Aid;3Zt
  database: testdb
  table: ratings
  mode: replace

mode という部分は insert も選択することができ、Embulk を繰り返した時に、insert だと追記、replace だと置き換えになります。今回は replace を選択しました。

データベースは事前に作成しておく必要がありますが、テーブルやスキーマの作成は Embulk 側で自動で作成してくれるので、事前に作成する必要はありません。

それでは embulk run コマンドでデータの取り込みを開始したいと思います。

$ embulk run config.yml

20万件以上のデータなので、少し時間がかかると思います。

※ 私の環境では完了するまで 5 分ほどかかりました。

データの取り込みが完了したので、MySQL のデータを確認してます。

mysql> select count(*) from ratings;
+----------+
| count(*) |
+----------+
|   205805 |
+----------+
1 row in set (0.04 sec)

mysql> select * from ratings limit 20;
+--------+---------------+----------+-------+---------------------+
| id     | restaurant_id | user_id  | total | created_on          |
+--------+---------------+----------+-------+---------------------+
| 156445 |        310595 | ee02f26a |     5 | 2006-10-07 05:06:09 |
|   3842 |         10237 | fcc21401 |     1 | 2004-10-20 00:34:28 |
| 144379 |          3334 | 06412af7 |     2 | 2006-06-03 16:07:43 |
| 144377 |         15163 | 06412af7 |     5 | 2006-06-03 15:14:45 |
|  75967 |           567 | 4ceec99d |     3 | 2004-12-01 23:12:29 |
| 104898 |          1026 | 4ceec99d |     5 | 2005-01-04 03:57:02 |
|  86073 |          1058 | 4ceec99d |     5 | 2004-11-09 00:34:17 |
|  13968 |          2569 | 4ceec99d |     3 | 2004-09-22 23:29:57 |
|  97833 |          3309 | 4ceec99d |     4 | 2005-05-28 23:17:16 |
|  13991 |          3648 | 4ceec99d |     4 | 2004-09-27 11:14:50 |
|  69284 |          4226 | 4ceec99d |     5 | 2004-10-31 16:32:43 |
|   5658 |          4659 | 4ceec99d |     4 | 2004-09-22 23:04:12 |
|  89226 |          5075 | 4ceec99d |     5 | 2005-03-21 22:56:45 |
|  15001 |          5099 | 4ceec99d |     3 | 2004-09-24 11:42:10 |
| 116898 |          5219 | 4ceec99d |     5 | 2005-09-20 00:53:40 |
|  21991 |          5449 | 4ceec99d |     5 | 2004-11-10 00:13:09 |
|  68974 |          6033 | 4ceec99d |     4 | 2004-11-03 23:45:02 |
|  15434 |          6899 | 4ceec99d |     5 | 2004-09-22 22:29:51 |
| 116890 |          8638 | 4ceec99d |     4 | 2005-09-20 00:34:25 |
|  13997 |          8895 | 4ceec99d |     5 | 2004-09-27 10:54:32 |
+--------+---------------+----------+-------+---------------------+
20 rows in set (0.00 sec)

mysql> select total, count(*) from ratings group by total;
+-------+----------+
| total | count(*) |
+-------+----------+
|     0 |     7159 |
|     1 |     4975 |
|     2 |    14565 |
|     3 |    64743 |
|     4 |    79593 |
|     5 |    34770 |
+-------+----------+
6 rows in set (0.10 sec)

まとめ

Embulk を使って CSV から MySQL へデータを投入してみました。

もう一度 Embulk を使うことによって、今度は MySQL から ElasticSearch などにデータを投入することもできるので、いろいろな使い方を考えていきたいと思います。

CentOS 7 に MySQL 5.7 を yum インストールして初期設定までやってみた

CentOS 7.2 上に MySQL 5.7 を yum インストールして、初期設定まで行ったので、その手順を記していきたいと思います。

はじめに

CentOS 7 よりデータベースサーバの MySQLMariaDB に置き換えられました。

もしすでに MariaDB がインストールされている場合はこれからインストールする MySQL と競合を起こさないように削除しましょう。

$ sudo yum remove mariadb-libs
$ sudo rm -rf /var/lib/mysql

これで MariaDB 本体とデータフォルダを削除できました。

yum リポジトリの追加

CentOS 7 に MySQL 公式の yum リポジトリを追加します。

$ sudo rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

MySQL のインストー

MySQL 公式の yum リポジトリが追加できたので、yum install コマンドでインストールしましょう。

$ sudo yum install mysql-community-server

バージョンを確認します。

$ mysqld --version
mysqld  Ver 5.7.14 for Linux on x86_64 (MySQL Community Server (GPL))

無事 MySQL 5.7 がインストールできました!

MySQL の起動

MySQL がインストールできたので、早速起動させましょう。

$ sudo systemctl start mysqld.service

自動起動の設定も行っておきます。

$ sudo systemctl enable mysqld.service

MySQL の初期パスワード確認

MySQL 5.7 では、初回起動時に初期パスワードが生成されるので、ログファイルから生成されたパスワードを確認する必要があります。

$ $ sudo cat /var/log/mysqld.log | grep password
2016-09-01T13:09:03.337119Z 1 [Note] A temporary password is generated for root@localhost: uhsd!Aid;3Zt

今回の場合、uhsd!Aid;3Zt の部分が初期パスワードになります。

MySQL のセキュリティ設定

mysql_secure_installation コマンドを実行して、MySQL のセキュリティ設定を行っていきます。

対話形式なので、比較的簡単に最低限必要と考えられるセキュリティの設定ができます。

$ mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root: # ログファイルから取得した初期パスワードを入力します

The existing password for the user account root has expired. Please set a new password.

New password: # root ユーザの新規パスワードを入力します

Re-enter new password: # 確認用にもう一度入力します
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y # 匿名ユーザーアカウントを削除
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y # ローカルホスト以外からアクセス可能な root アカウントを削除
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y # test データベースの削除
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

MySQL へのログイン確認

さきほど設定した新しいパスワードでログインできるかどうか確認します。

$ mysql -u root -p
Enter password: # 新しいパスワードを入力
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.14 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

設定変更

MySQL 5.7 からパスワードの有効期限がデフォルトで360日になり、360日を経過するとパスワードの変更を促されて MySQL にログインできなくなります。

default_password_lifetime の値を 0 に変更して、この有効期限の設定を無効にしたいと思います。

また、デフォルトの文字コードUTF-8 に変更します。

  • /etc/my.cnf
[mysqld]
.
.
.
character-set-server = utf8
default_password_lifetime = 0

MySQL を再起動させ、設定内容を反映させます。

$ sudo systemctl restart mysqld.service

以上で設定は完了となります。

まとめ

CentOS 7 に MySQL 5.7 を yum インストールし、最低限の設定を行いました。

本番環境で運用する際は、チューニングも含めて、さらに細かい設定が必要になってくると思いますが、サービスに合わせて適切な設定を考えていきたいと思います。