【本】「100%集中法」読んだ

100%集中法

100%集中法

SNSやスマホの通知がどれだけ集中力を阻害するかっていうお話が書いてあって、もうホントそれはすごいわかるという同意と、そりゃサクッとSNSやめてあらゆる通知をOFFにできれば苦労はしないんだな、というお気持ちになれる。
その辺りをうまくコントロールすることについても言及はしているが、その辺りをどうコントロールすれば良いかについて一度でも向き合って色々試したことがある人にとっては、特別、斬新な方法ではないと思う。

メインは、集中力を高めるための簡単なエクササイズの紹介で、それを毎日意識的にやることで集中力を高める、あるいはすぐに集中状態に持っていくコツを掴もうというお話。

で、最後にポモドーロ・テクニックの紹介なんだけど、ホント一般的なポモドーロ・テクニックなので、ググればすぐに出てくる。
強いて言えば、紹介したエクササイズと組み合わせるとより良いよ、という感じ。

スマホをいつも眺めててそれに無自覚な人ととか、瞑想とかポモドーロとか、なにそれ聞いたことないやったことないっていう方が読むと何かしら得られるかもしれない。
けどそうじゃない人は「そだねー」という気持ちになる、そんな本。

あ、最後のQ&Aは読んでて面白かった。

エクササイズ、試しにやってみようかなという気持ちと、とりあえず、スマホの中のSNSアプリ全部削除するしかないか(何度目や)、、、という気持ちにはなった。
不便さを感じて再インストールする未来まで見えてる。

【MySQL】実行された全てのクエリを出力する「一般クエリログ」について

更新系・参照系問わずすべてのログが記録される。
ユーザーの接続・切断情報も記録される。
有効にするとすぐにログが肥大化するため、基本的にデバッグなどのときのみ有効にすると良い。
MySQL 5.6.3以降ではデフォルトでパスワードは平文で保存されることはないが、それより前の場合は書き換えないため、ログを保護する必要がある。
本番環境では要注意。

以下、一般クエリログに関連する設定値。
SHOW VARIABLES LIKE '%log%'; などで確認する。

  • general_log
    • ONにすると一般クエリログが有効になる
  • general_log_file
    • ログの出力先を指定

一般クエリログを有効にする。

SET GLOBAL general_log = 'ON';

SET GLOBALなので、全ての接続について影響を受ける。
再起動不要。

SET sql_log_off = 'ON';

セッション変数の変更なので、現在の接続についてのみ影響を受ける。
他の接続については影響を受けない。
再起動不要。

ログの出力先を変更する。

SET GLOBAL general_log_file = '/var/lib/mysql/hogefuga.log'

MySQL :: MySQL 5.6 リファレンスマニュアル :: 5.2.3 一般クエリーログ

【入門・初心者向け】AnsibleでMariaDB(MySQL)をインストールして起動するところまで

こちらの続きです。

www.tomcky.net

簡単なプレイブックを作成して、実行するところまでやってみました。
今回はもう少し実践寄りで、MariaDBをインストールして起動するところまでの最低限を、Ansibleを使ってやってみます。

ロール(Role)を利用する

前回は dev.yml にタスクを記述していましたが、例えば今後、データベース、Webサーバー、OSの構成管理など様々なタスクが増えたときに、1つのファイルにすべてのタスクを記述すると、見通しが悪く、管理が煩雑になってしまいます。

そこでAnsibleのロールという仕組みを利用して、設定する内容別にプレイブックを分割します。

まず以下のようにディレクトリ・ファイルを作成します。

$ mkdir -p roles/mariadb/tasks
$ touch roles/mariadb/tasks/main.yml

このように roles ディレクトリの下に、それぞれの設定内容別にディレクトリを分け、さらにその下に必要なプレイブックを作成していくような形になります。
今回は roles/ の下に tasks/ しか作りませんが、設定する内容が増えてくると、 defaults/templates/files/ などのディレクトリが増えていきます。
tasks/ にはタスクを記述したyamlファイルを置くことになり、 main.yml が固定で読み込まれるようになっているため、必ず配置するようにしましょう。

ロールを作成したら、そのロールを利用するために dev.yml に次のように記述します。

- hosts: dev
  become: true
  roles:
    - mariadb

roles というディレクティブを使用して、作成した mariadb ロールを参照しています。
これで roles/mariadb/tasks/main.yml に記述したタスクが実行されるようになります。

なお、 become: true とすることで、特権ユーザー(sudo)でタスク実行を行うようになります。
Become (Privilege Escalation) — Ansible Documentation

では、実際にタスクを記述していきましょう。

リポジトリの追加

まずは、MariaDB公式のリポジトリを追加します(Amazon Linux 2を想定)。

roles/mariadb/tasks/main.yml に以下のように記述します。

---
- name: Add repository
  yum_repository:
      name: MariaDB
      description: MariaDB repo
      baseurl: http://yum.mariadb.org/10.3/rhel7-amd64
      gpgkey: https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
      gpgcheck: true

このタスクはyum_repositoryモジュールを使用して、/etc/yum.repos.d/ 配下にリポジトリ定義ファイル MariaDB.repo を追加するといったものになります。

このようにAnsibleでは、目的の設定を行うために、用意された数多くのモジュールを使用してタスクを記述していくことになります。
大抵のものはモジュールとして提供されていますので、Ansibleの公式ドキュメントを参照し、モジュールを適切に活用して、タスクを記述していきます。

さて、記述が終わったら実行すれば良いわけですが、その前にできるだけチェックを行うべきです。
チェックするコマンドは主に以下のようなものがあります。

# シンタックスチェック。構文エラーがあればその内容を出力する。
$ ansible-playbook -i inventory/dev --connection=local dev.yml --syntax-check

# タスク一覧チェック。実行予定のタスク一覧を表示する。
$ ansible-playbook -i inventory/dev --connection=local dev.yml --list-tasks

# 実行時変更点チェック。実行したときの変更点を表示する。いわゆるDry Run。--check忘れに注意。
$ ansible-playbook -i inventory/dev --connection=local dev.yml --diff --check

特に三番目の --diff --check を使った実行時変更点のチェックは行った方が良いでしょう。
ただ、注意して欲しいのは --check をつけ忘れるとタスク実行になってしまうということです。
--diff は変更内容の差分を表示するためだけのオプションのため、Dry Runにはなりません。

--diff --check を実行すると、以下のように差分が表示されます。

(省略)...
TASK [mariadb : Add repository] 
--- before: /etc/yum.repos.d/MariaDB.repo
+++ after: /etc/yum.repos.d/MariaDB.repo
@@ -0,0 +1,6 @@
+[MariaDB]
+baseurl = http://yum.mariadb.org/10.3/rhel7-amd64
+gpgcheck = 1
+gpgkey = https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
+name = MariaDB repo
+
...(省略)

変更点が事前に確認できたら実行します。

$ ansible-playbook -i inventory/dev --connection=local dev.yml --diff

うまくいけば /etc/yum.repos.d/MariaDB.repo が作成されているはずです。

$ cat /etc/yum.repos.d/MariaDB.repo
[MariaDB]
baseurl = http://yum.mariadb.org/10.3/rhel7-amd64
gpgcheck = 1
gpgkey = https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
name = MariaDB repo

MariaDBのインストールから起動まで

まだリポジトリを追加しただけです。
MariaDBのインストールから起動までのタスクを記述してしまいます。

---
- name: Add repository
  yum_repository:
    name: MariaDB
    description: MariaDB repo
    baseurl: http://yum.mariadb.org/10.3/rhel7-amd64
    gpgkey: https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck: true

# MariaDBのインストール
- name: Install MariaDB server
  yum:
    name: MariaDB-server
    state: present

# 起動および自動起動設定
- name: Start MariaDB service
  systemd:
    name: mariadb
    state: started
    enabled: yes

インストールはyumモジュール、起動は systemdモジュールを使用しています。

記述できたら、実行前チェックで差分を確認し、実行します。

$ ansible-playbook -i inventory/dev --connection=local dev.yml --diff --check
$ ansible-playbook -i inventory/dev --connection=local dev.yml --diff

完了すると systemctl status mysql でactiveになっていることが確認でき、 mysql -uroot でログインもできるかと思います。

無事、MariaDBを起動するところまでできましたが、実際に利用するにはこれではまだ不十分です。
rootはデフォルトのままですし、ユーザーの作成もしていなければ、設定ファイルも準備できていません。

次はこの辺りのタスクを記述する必要がありそうです。