🔖
MySQL初期設定時に必要な処理の自動化
概要
- 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
- パラメータを変更して再起動するだけ
- 初期導入用のCookbook
- ROOTユーザー・各ユーザーのパスワードはGit管理外の
.env
で管理する。
.env
DB_ROOT_PASSWORD=
DB_0_PASSWORD=
DB_1_PASSWORD=
- 作成するデータベース名は
Wordpress
とする。- テーブルはWordpress導入時に作成してくれる。
- 作成するユーザーは将来的に拡張できるようにする。
- 一旦は↓
ユーザー | 権限 | 用途 |
---|---|---|
monitor |
すべてのDBに対して閲覧権限のみを付与 | DBの中身を見に行きたい時 |
wp_user |
WordPress DBに対して全ての権限を付与 | Wordpressに与えるユーザー |
install.rb
〜
Cookbook〜- MySQLインストール用Cookbook
- この章ではインストール〜mysqldが起動するところまでを目指した。
インストール
- バージョンを指定してインストールできるようにした。
- Yumでインストールできるようにした。
- 依存関係のあるパッケージを考慮して、関連パッケージを取得してくれる。
- Yumでインストールできるようにした。
- 以下のパッケージをインストール
mysql
mysql-server
my.cnfの設定
- MySQLに関するグローバルオプション設定が記載されている。
-
/etc/my.cnf
は/etc/my.cnf.d
配下のファイルをすべて読み込むように設定されていた。-
!includedir /etc/my.cnf.d/
の記載があり明らか。
-
- 以下二点のテンプレファイルを用意。
- 変更箇所が多いため、テンプレファイルを用いた差し替えが楽。
- MySQLのROOTアカウントを書き換える用のファイル
-
MySQLのパラメータを設定する用のファイル
- 今後パラメータチューニングとかできるようにする。
mysqldを初期化
- MySQLユーザーでmysqldを初期化する
- ここで事前に不要なデータディレクトリを削除する!!!(ので注意)
- データディレクトリである
/var/lib/mysql
が残っている状態でmysqldを初期化できないため。参照 - 追記:再実行の時全て消えてしまうため、削除ではなく→別ディレクトリに移動とかにした方が良さそう
- データディレクトリである
mysqldを起動/自動起動有効化
- 自動起動は有効化。
- 今のところMySQLの起動は
systemd
を用いる想定であるため - Pacemakerなど冗長構成を組むとなると、
systemd
を用いて起動しないので無効化する必要はある。
- 今のところMySQLの起動は
root-user.rb
〜
Cookbook〜
初期パスワードを取得
- まず初期パスワードを取得する。
- ROOTアカウントに対して設定したいパスワードへ変更する際に、既存の初期パスワードが必要となる。
- どうやって?
- mysqldを起動後、
/var/log/mysql/mysqld.log
に初期パスワードが記載される。 -
sudo grep 'temporary password' /var/log/mysqld.log
で検索すると良い。
- mysqldを起動後、
ROOTパスワード書き換え
- 次に
ALTER USER
コマンドでROOTパスワードを書き換える。 - 既にDBやテーブルが作成されている場合は↑の処理をスキップする。
権限変更
- 新パスワードを
/etc/my.cnf.d/mysql-admin.cnf
に書き込む。- 権限は所有者のみが読み込み/書き込みできる
600
- 権限は所有者のみが読み込み/書き込みできる
create-db.rb
〜
Cookbook〜
WordPress用DBを作成する
- YMLにて指定したデータベースを作成する。
- 下記のユーザー作成前にデータベースを作成することで、ユーザー作成と権限付与を同タイミングで実施できる。
other-users.rb
〜
Cookbook〜
各ユーザーを作成する
- ユーザーの作成と権限付与を実施する。
- どうやって?
- 複数のユーザー作成/権限付与は
/tmp/grants.sql
こちらに記載したクエリを流し込む。 - この時点ではMySQLは起動しているためクエリの実行も可能である。
-
/tmp/grants.sql
にはパスワードが記載されているため、クエリの流し込みが完了すれば、ファイルを削除する。
最後に
MySQL導入時のCookbookを書いた。
正直まだまだ対応しないといけないポイントがある。
適宜Cookbookを修正したら、こちらのZenn記事も修正するようにする。
-
my.cnf
関連のパラメータ設定 - データディレクトリを削除するのではなく名前変更で対応
- 導入用と定期運用用でCookbookを分ける
Discussion