Help us understand the problem. What is going on with this article?

文系出身エンジニアが学ぶMySQLサーバーの構築(AWS)

記事を書く背景

『Amazon Web Services 基礎からのネットワーク&サーバー構築』を読み進める中で、AWSにMySQLサーバーを構築する際のつまずいたところとその対処方法を記載しようと思います。

環境

OS : Amazon Linux release 2 (Karoo)

つまずきポイント1:MySQLをインストールできない

下記コマンドを打つとエラーが発生。

$ sudo yum -y install mysql-server

原因

Amazon EC2のyumリポジトリにMySQLのリポジトリが存在していないため。
下記コマンドで確認できます。

$ yum list installed | grep mysql

対処方法

下記コマンドでAmazon EC2のyumリポジトリにMySQLのリポジトリを追加

$ sudo yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm

これでめでたくMySQLをインストールする準備が整いました。
そして、下記コマンドでMySQLをインストールします。

$ sudo yum -y install mysql-community-server

無事にインストールできていることを確認します。

$ mysqld --version
mysqld  Ver 5.7.29 for Linux on x86_64 (MySQL Community Server (GPL))

ちなみに、、、

Amazon EC2にはMySQL派生版のMariaDBがインストール済みだそうです。
こちらは使わないのでアンインストールしました。

// MariaDBがインストールされていることを確認
$ sudo yum list installed | grep mariadb

// MariaDBの削除
$ sudo yum remove mariadb-libs

つまずきポイント2:Passwordの設定ができない

passwordの変更をしようと下記コマンドを打つとエラーが出てしまい、ログインパスワードの変更ができない。

$ mysqladmin -u root password
ERROR 1045 (28000): Access denied for user 'ec2-user'@'localhost' (using password: NO)

原因

rootユーザの権限設定がされていない

対処方法

1. MySQLを停止させる

$ sudo systemctl stop mysqld

2. MySQLの環境変数にオプションを追加
→権限システムを使用しないで起動することが可能になる

$ sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"

3. MySQLの起動

$ sudo systemctl start mysqld

4. MySQLにログイン

$ mysql -u root

5. rootユーザーのPasswordを設定

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('設定したいPassword') WHERE User = 'root' AND Host = 'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit

以下は環境変数にオプションを追加したのを戻す作業
6. MySQLを停止させる

$ sudo systemctl stop mysqld

7. MySQLの環境変数にオプションを元に戻す

$ sudo systemctl unset-environment MYSQLD_OPTS

8. MySQLの起動

$ sudo systemctl start mysqld

つまずきポイント3:Passwordを設定したと思ったらALTER USER statementが使えない

これでようやくPasswordも設定できたと思い、ログインしてCREATE DATABASEしたところまたもエラー発生。

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

原因

rootのパスワードを初回設定から変えていないときに表示される

対処方法

下記コマンドで新しいパスワードを設定する

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

つまずきポイント4:MySQLのパスワードポリシーに怒られる

新しいパスワードを設定する際に例えばpassなどの小文字4字で設定しようとするとデフォルトの設定ではMySQLのパスワードポリシーに違反してしまいます。

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

原因

ポリシー Passwordに必要な条件
0 または LOW 長さ
1 または MEDIUM 長さ; 数字、小文字/大文字、および特殊文字
2 または STRONG 長さ; 数字、小文字/大文字、および特殊文字。辞書ファイル

現在のポリシーは以下のコマンドで確認できます。

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | OFF   |
| 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.00 sec)

対処方法

1. Passwordをポリシーに合わせる。
おとなしくMySQLに従う。。

2. ポリシーを変更する

-- 最低限の長さの変更
mysql> SET GLOBAL validate_password_length=4;

-- ポリシーの変更
mysql> SET GLOBAL validate_password_policy=LOW;

-- 変更の確認
SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | OFF   |
| validate_password_dictionary_file    |       |
| validate_password_length             | 4     |
| validate_password_mixed_case_count   | 1     |
| validate_password_number_count       | 1     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.00 sec)

参考文献

AWSのEC2で行うAmazon Linux2(MySQL5.7)環境構築
AWS Amazon Linux2にMySQL5.7を構築する
Change mysql root password on Centos7
MySQL 5.7.16 でERROR 1820 (HY000): You must reset your passwordの対処法(windows用)
Mysql 5.7* パスワードをPolicyに合わせるとめんどくさい件について

yuki-yuki
文系出身のエンジニアです。 エンジニア歴2年目になったため、アウトプットもかねてQiitaはじめました。 現在、Webエンジニアになるため、修行中。 最近はインフラ関係に興味があります。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした