EC2上にmysqlをインストールする
【注意】 2022/01/20 現在、(たぶんmysql本家のポカ?で)うまく mysql をインストールできなくなっています。 install.sh を実行する前に、次の呪文を唱えて、公開鍵暗号を最新のものにする必要があります
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
【補足】 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