MariaDBの初期設定を自動化するスクリプトを作ってみた

MariaDBの初期設定を自動化するスクリプトを作ってみたアイキャッチ

LinuxでDBのインストールに加えてDBの初期設定(パスワードの設定)やテーブル作成までを自動化したいことがあると思います。特にPipelineやJenkinsで環境構築を自動化するときにニーズがあります。
しかしDBの初期設定は対話モードなので通常のシェルコマンドでは難しそうです。expectコマンドを使用すると実現できたのでサンプルとともに紹介します。

動作確認環境
・AmazonLinux2(EC2)
・CodeDeployでも動作することを確認済み

目次

MariaDBインストール・初期パスワード設定

冒頭9行目まででmariadbをインストールしています。
14行目からがbashのexpectを使用して対話モードのコマンドをスクリプト化しています。expect、sendでこう来たらこう入力するというのを定義できます。

#!/bin/bash

# 対話モードをスクリプト化するexpectをインストール(すでに導入済みの場合不要)
sudo yum install expect -y

# mariadbのインストールおよび起動
sudo yum install mariadb mariadb-server -y
sudo systemctl start mariadb
sudo systemctl enable mariadb

# パスワード指定
MysqlRootPasswd=Password@123

# mysql_secure_installationの対話モードをスクリプト化
expect -c '
    set timeout 1;
    spawn sudo mysql_secure_installation;
    expect "Enter current password for root (enter for none): ";
    send -- "\n";
    expect "Set root password?";
    send -- "'Y'\n";
    expect "New password:";
    send -- "'"${MysqlRootPasswd}"'\n";
    expect "Re-enter new password:";
    send -- "'"${MysqlRootPasswd}"'\n";
    expect "Remove anonymous users?";
    send "Y\n";
    expect "Disallow root login remotely?";
    send "Y\n";
    expect "Remove test database and access to it?";
    send "Y\n";
    expect "Reload privilege tables now?";
    send "Y\n";
    interact;'

ユーザ作成・DB作成・権限付与

つくりは初期パスワード設定と同じようにexpectでスクリプト化しています。
地味にハマったのがSQLの場合は(シングルクォーテーション)を使用するのですがexpectの一番外側でシングルクォーテーションを使ってしまっているのでネストする必要があります。
しかし、bashの仕様上、シングルクォーテーションのネストは不可能です。そこで動作させるためにはネストさせる予定だったシングルクォーテーションをシングルクォーテーションの外に出し、外に出したシングルクォーテーションをエスケープする必要があります。16行目のCREATE USERでその小細工を行っています。

#!/bin/bash
 
# 対話モードをスクリプト化するexpectをインストール(すでに導入済みの場合不要)
sudo yum install expect -y
 
# パスワード指定
MysqlRootPasswd=Password@123
 
# mysqlユーザ作成、テーブル作成スクリプト化
expect -c '
    set timeout 1;
    spawn mysql -u root -p;
    expect "Enter password:";
    send -- "'"${MysqlRootPasswd}"'\n";
    expect "MariaDB \[\(none\)\]>";
    send -- "CREATE USER '\''user01'\''@'\''localhost'\'' IDENTIFIED BY '\''my_password'\'';\n"
    expect "MariaDB \[\(none\)\]>";
    send -- "CREATE DATABASE `db01`;\n"
    expect "MariaDB \[\(none\)\]>";
    send -- "GRANT ALL PRIVILEGES ON `db01`.* TO \"user01\"@\"localhost\";\n"
    expect "MariaDB \[\(none\)\]>";
    send -- "FLUSH PRIVILEGES;\n"
    expect "MariaDB \[\(none\)\]>";
    send -- "exit;\n"
    interact;'

同じようにexpectを使用すればテーブルの作成もスクリプト化できるかと思います。
環境構築を自動化したい場合はぜひ参考にしてください!

PR
当ブログはWordPressテーマSWELLを使用しています。非常に使いやすく、簡単にプロのようなデザインを使えるのでお勧めです!!

SWELL – シンプル美と機能性両立を両立させた、圧巻のWordPressテーマ

ランキング

ランキングに参加しています。クリックして応援いただけると嬉しいです。
にほんブログ村 IT技術ブログ クラウドコンピューティングへ
にほんブログ村
AWSランキング
AWSランキング

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次