🔖

MySQL初期設定時に必要な処理の自動化

2024/01/07に公開

概要

  • Wordpressブログ構築&管理用のIaCを書いている。
  • MySQLに関して導入〜設定を一気に実行できるようにしたい。

本記事

  • MySQLを構築するには、以下の作業を実施する必要がある。
    • インストール
    • ROOTユーザー設定
    • DBの作成
    • 個人ユーザー作成と権限設定
  • 正直手作業だと再現性がないため、自動化してしまいたいという意図があった。

環境

  • MySQL:8.0.32
  • IaC:Itamae
  • OS:AlmaLinux

目指すべき姿

  • 導入からDB・ユーザー作成までを全て自動化。
  • 導入時と運用時に使用するCookbookを分けたい。
    • 全てのCookbookを実行する時は導入時のみで良いのでは?
    • MySQLの設定をこまめに修正するときは、一部のCookbookを指定して流す。
  • パラメータ管理は/etc/my.cnf.d配下のファイルで管理。
    • 初期導入用のCookbook
      • MySQL初期化も含んでいる
    • 継続運用時にパラメータ流し込み用のCookbook
      • パラメータを変更して再起動するだけ
  • ROOTユーザー・各ユーザーのパスワードはGit管理外の.envで管理する。
.env
DB_ROOT_PASSWORD=
DB_0_PASSWORD=
DB_1_PASSWORD=
  • 作成するデータベース名はWordpressとする。
    • テーブルはWordpress導入時に作成してくれる。
  • 作成するユーザーは将来的に拡張できるようにする。
    • 一旦は↓
ユーザー 権限 用途
monitor すべてのDBに対して閲覧権限のみを付与 DBの中身を見に行きたい時
wp_user WordPress DBに対して全ての権限を付与 Wordpressに与えるユーザー

Cookbook〜install.rb

インストール

  • バージョンを指定してインストールできるようにした。
    • Yumでインストールできるようにした。
      • 依存関係のあるパッケージを考慮して、関連パッケージを取得してくれる。
  • 以下のパッケージをインストール
    • mysql
    • mysql-server

my.cnfの設定

mysqldを初期化

mysqldを起動/自動起動有効化

  • 自動起動は有効化。
    • 今のところMySQLの起動はsystemdを用いる想定であるため
    • Pacemakerなど冗長構成を組むとなると、systemdを用いて起動しないので無効化する必要はある。

Cookbook〜root-user.rb

初期パスワードを取得

ROOTパスワード書き換え

  • 次にALTER USERコマンドでROOTパスワードを書き換える。
  • 既にDBやテーブルが作成されている場合は↑の処理をスキップする。

権限変更

  • 新パスワードを/etc/my.cnf.d/mysql-admin.cnfに書き込む。
    • 権限は所有者のみが読み込み/書き込みできる600

Cookbook〜create-db.rb

WordPress用DBを作成する

  • YMLにて指定したデータベースを作成する。
    • 下記のユーザー作成前にデータベースを作成することで、ユーザー作成と権限付与を同タイミングで実施できる。

Cookbook〜other-users.rb

各ユーザーを作成する

  • ユーザーの作成と権限付与を実施する。
    • どうやって?
    • 複数のユーザー作成/権限付与は/tmp/grants.sqlこちらに記載したクエリを流し込む。
    • この時点ではMySQLは起動しているためクエリの実行も可能である。
  • /tmp/grants.sqlにはパスワードが記載されているため、クエリの流し込みが完了すれば、ファイルを削除する。

最後に

MySQL導入時のCookbookを書いた。
正直まだまだ対応しないといけないポイントがある。
適宜Cookbookを修正したら、こちらのZenn記事も修正するようにする。

  • my.cnf関連のパラメータ設定
  • データディレクトリを削除するのではなく名前変更で対応
  • 導入用と定期運用用でCookbookを分ける

Discussion