MySQL8.0の構築を自動化してみる

色々なマイナーバージョンの検証を行うなどMySQLの環境を作り直す機会があるので自動で構築を行うようにします。

構築の仕方はMySQL8.0構築で記載していますので今回はこちらをbashで構築を自動化します

自動化

mariadbの削除

mariadb=`rpm -qa mariadb-libs`

#mariadbがあるか確認して、あったら削除します
if [ "$mariadb" != "" ]; then
    yum remove mariadb-libs -y
fi
  • mysqlが既に入っている場合に削除します
  • 依存関係で先に削除されてエラーになるものもありますが、無視します
    • うまい方法がわかったら後日修正します
#mysql関連のパッケージを取得
mysql_packages=$(rpm -qa mysql-community-*)


if [ "$mysql_packages" != "" ]; then

  #動いている場合は止める
    systemctl stop mysqld.server
    rm -rf /var/lib/mysql
    rm /var/log/mysqld.log

  #mysql関連のパッケージを全て削除
    for mysql_pakage in $mysql_packages; do
        yum remove  -y $mysql_pakage
    done

fi

リポジトリの設定

#既に入っていても再度実行しても問題ない
rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
  • 鍵のimport
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

MySQLのインストール

yum install mysql-community-server -y
  • MySQLの起動
systemctl start mysqld.service

パスワードの変更

password=`grep "temporary password is generated for root@localhost" /var/log/mysqld.log | awk -F "localhost: " '{print $2}'`

#環境変数にすることで
export MYSQL_PWD=$password
  • ランダムなパスワードに変更してパスワードをファイルに保存する
  • ランダムなパスワードの生成方法はこちらを参考にしましたので仕組みが気になる方は見てみてください
new_password=`cat /dev/urandom | tr -dc 'a-zA-Z0-9!@#$%^&*()_+-=[]{}<>?' | fold -w 16 | head -n 1`
  • パスワードを変更して、ファイルにパスワードを保存
mysql -uroot --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '${new_password}';"

echo "${new_password}" > root_pass.txt

これでMySQL8.0構築が完了しました

追加

パッケージバージョンの指定

  • 古いバージョンとの比較など古いバージョンを入れるケースがあるのでバージョンを指定出来るようにする
#バージョンが引数にあった場合にversionをセット
if [ $1 != "" ]; then
    version="-$1"
else
    version=""
fi

yum install mysql-community-server$version -y

これでバージョン指定でインストールが可能になりました
今回作ったものは下記に置いておきます
https://github.com/swing-by/init_mysql

コメント

タイトルとURLをコピーしました