Ansible による MariaDB 10 のデータベース・ユーザー設定
Ansible の playbook を使って MariaDB 10.5 をインストールして MariaDB のデータベースとユーザーを作成する方法です。
Alma Linux 10.4 で確認しました。Alma Linux の AppStream からは MariaDB 10.5 をインストールできます。
1 2 3 4 5 6 7 8 9 10 11 |
- name: Install MariaDB packages from AppStream yum: name: ['mariadb', 'mariadb-common', 'mariadb-server', 'mariadb-server-utils', 'mariadb-backup'] - name: Start and enable MariaDB Service service: name: mariadb state: started enabled: true |
データベースの作成
MariaDB 10.4 からはデフォルトでローカルからアクセスする場合の root パスワードは要求されていません。そこで playbook にもパスワードの記載をしないでもアクセスできると思い、何も記載しないでやってみます。
1 2 3 4 5 6 7 8 |
- name: Create Database mysql_db: name: "{{ db_name }}" state: present encoding: utf8mb4 collation: utf8mb4_general_ci |
しかし、実行するとエラーになります。
unable to find /root/.my.cnf. Exception message: (1698, Access denied for user) エラー
回避策として、login_host, login_user, login_password を追加してみます。
1 2 3 4 5 6 7 8 9 10 11 |
- name: Create Database mysql_db: login_host: localhost login_user: root login_password: "{{ mysql_root_password }}" name: "{{ db_name }}" state: present encoding: utf8mb4 collation: utf8mb4_general_ci |
ちなみに mysql_root_password は空に設定してあります。しかしこれでもうまくいきません。
そもそもローカルアクセスとはいっても、パスワードが要求されないのは socket 接続の場合です。(これはサーバーの root 権限を持っているのに root パスワードを求めることがセキュリティ的に無意味という考えからデフォルトでこのような動作になっているようです。もちろんパスワードを設定することもできます。)
そのためソケット接続したいので login_host ではなく、login_unix_socket を使えば良さそうです。
1 2 3 4 5 6 7 8 9 10 11 |
- name: Create Database mysql_db: login_unix_socket: /var/lib/mysql/mysql.sock login_user: root login_password: "{{ mysql_root_password }}" name: "{{ db_name }}" state: present encoding: utf8mb4 collation: utf8mb4_general_ci |
これでうまくいきました。
ユーザーの作成
こちらも同様に login_unix_socket を使った設定をします。
1 2 3 4 5 6 7 8 9 10 11 12 |
- name: Create Database User mysql_user: login_unix_socket: /var/lib/mysql/mysql.sock login_user: root login_password: "{{ mysql_root_password }}" name: "{{ db_user_name }}" password: "{{ db_user_password }}" host: "{{ db_hostname }}" priv: '*.*:ALL' state: present |
root のパスワード設定
最後に root のパスワードを設定するのも Ansible でやってみます。
db_root_password に新しいパスワード、mysql_root_password は古いパスワード(空)です。
1 2 3 4 5 6 7 8 9 10 |
- name: Set mariadb root password mysql_user: login_unix_socket: /var/lib/mysql/mysql.sock login_user: root login_password: "{{ mysql_root_password }}" name: root password: "{{db_root_password}}" host_all: yes |
ITエンジニア募集中!
キュアコード株式会社はITエンジニアを募集しております。少人数の職場なので、上流・下流やサーバー・クライアント対応の垣根なく、あなたの強みを活かしながら いろいろなことにチャレンジ可能です。エンジニアとしての未経験の方、経験が少ない方も歓迎しています。
下記よりITエンジニア募集の採用情報をご覧いただけます。