Server Build Exercises on AWS (Amazon Web Services) 2022 edition

EC2上にmysqlをインストールする

【注意】 2022/01/20 現在、(たぶんmysql本家のポカ?で)うまく mysql をインストールできなくなっています。 install.sh を実行する前に、次の呪文を唱えて、公開鍵暗号を最新のものにする必要があります

sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

くわしくは以下の記事を参照してください。 https://support.cpanel.net/hc/en-us/articles/4419382481815-Installer-fails-due-to-The-GPG-keys-listed-for-the-MySQL-repository-are-already-installed-but-they-are-not-correct-for-this-package-

【補足】 yumコマンドを使って新しいソフトを入れる方法や systemctlコマンドとは何か? については付録を参照してください

03_ec2/03-02_mysql/scripts ディレクトリに移動して、インストールスクリプトを実行してください (注: mysqlは全部で500MBくらいあるので、そこそこ時間がかかります)

cd 03_ec2/03-02_mysql/scripts

sh install.sh

MySQLの動作確認

初回の接続は少し面倒です

MySQL 8.0 は初回起動時に、ユーザ root のパスワードをランダムな文字列に設定します。 あらかじめユーザがインストール時に指定することはできないようです。

生成されたランダムな文字列はログファイル /var/log/mysqld.log に記録されています。 ユーザrootでないとログファイルが読めないpermissionになっています (ファイルのモード、読み書きなどの権限設定の話です)。 sudoを使ってください

sudo cat /var/log/mysqld.log 

このファイルを下から10行くらい遡ったあたりに次のようなメッセージがあるはずです。 一番右にある文字列がランダムに生成されたパスワード(この例では h*v:n(ney2K2 のこと)になります

2021-11-26T04:34:54.903491Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: h*v:n(ney2K2

この文字列をコピーしてください。次の mysql クライアントの認証で使います

mysqld にアクセスするために、次のようにオプションをつけてmysqlクライアントを実行してください

mysql -u root -h 127.0.0.1 -p

Enter password: が表示され、パスワード入力を求められるので、 上でコピーしたランダム文字列をペーストしてください。 次のようなメッセージとプロンプト(mysql>)が表示されれば接続はOKです

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.27

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

MySQLのパスワード変更

初回には、パスワードの再設定が求められます。mysql クライアント(mysql> のところ)で

ALTER USER 'root'@'localhost' IDENTIFIED BY '新しいパスワード' REPLACE '現在のパスワード';

を実行してください

ところで、デフォルトのパスワードポリシー(MEDIUM)は、 「アルファベット大文字、アルファベット小文字、数字、記号の4種を含める」 と厳しめになっています。 仕方ない(おいおい;-)ので、パスワードは1qaz2wsx!Xにしましょう。

mysql クライアントに次のように入力し再設定してみます

ALTER USER 'root'@'localhost' IDENTIFIED BY '1qaz2wsx!X' REPLACE 'h*v:n(ney2K2';

このパスワード変更後は普通にクエリが可能になったはずです。 show databases; やパスワードポリシーの確認(SHOW VARIABLES LIKE 'validate_password%';)を試してみてください

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.01 sec)

ここまで無事に設定できていれば動作確認としては充分でしょう。

この先のアプリを使うための設定(データベースとテーブルの作成)は連携させる節で説明します

mysql クライアントの終了

ちなみに mysql クライアントから抜けるには quit です

mysql> quit

mysql サーバ (mysqld)の状態をみる

sudo systemctl status mysqld

つぎのような表示になると思います(注: 細部の日時やIPなどは毎回異なります)

● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2021-11-27 08:33:56 UTC; 1s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 4709 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 4732 (mysqld)
   Status: "Server is operational"
   CGroup: /system.slice/mysqld.service
           └─4732 /usr/sbin/mysqld

Nov 27 08:33:55 ip-172-31-93-133.ec2.internal systemd[1]: Starting MySQL Server...
Nov 27 08:33:56 ip-172-31-93-133.ec2.internal systemd[1]: Started MySQL Server.

停止していればActive:行がdeadになっています

   Active: inactive (dead) since Sat 2021-11-27 08:32:14 UTC; 13s ago

mysql サーバ (mysqld)を終了させる

sudo systemctl stop mysqld

mysql を削除する

sudo yum -y erase mysql-community-client mysql-community-server
Last updated on 20 Jan 2022
Published on 20 Jan 2022
Copyright (C) 2021-2022 Ken'ichi Fukamachi, All rights reserved. CC BY-NC-SA 4.0
We appreciate AWS Academy Japan for the offer of the learning environment.

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.