実践1:データベースサーバーの構築

実践1:データベースサーバーの構築

作成手順

① MySQLパッケージのインストール

MariaDB(既存DBサーバー)の削除

MySQL(新DBサーバー)のインストール

② MySQL(データベースサーバー)の起動

データベースサーバーを起動します。

③ データベースのセキュリティ(ログイン)の設定

パスワードなどの設定をします。

④ データベースの文字コードの設定

データベースで使用する文字コードを設定します。

①MySQLパッケージのインストール

1. MariaDB(既存DBサーバー)の削除

CentOSでは、デフォルトで別のデータベースサーバーのMariaDBが、インストールされています。

データベースサーバーとしてMySQLを利用するために、MaraDBを削除します。

実践1:MariaDBのインストール状況を確認する

[root@localhost ~]#yum list installed | grep maria
mariadb-libs.x86_64 1:5.5.44-2.el7.centos @base
※ yum list installed | grep パッケージ名

yum list installedでは、インストール済みのパッケージの情報が全て表示されてしまいます。

grepコマンドを「|(パイプ)」でつなぐことにより、出力結果(インストール済みのパッケージ一覧)の中から、検索値(maria)に該当するものだけを表示します。

実践2:MariaDBを削除する
[root@localhost ~]#yum -y remove mariadb-libs.x86_64
実践3: MariaDBのフォルダを削除する

MariaDB専用のフォルダを削除します。

※MariaDBはMySQLの流れを組むものなのでディレクトリ名も同じものが設定されています。

[root@localhost ~]#rm -rf /var/lib/mysql/

2. MySQL(新DBサーバー)のインストール

続いてMySQLをインストールしますが、

特定のバージョン(MySQL5.7)のMySQLをインストールするための専用のリポジトリをインストールします。

実践1:MySQLのリポジトリを追加する

MySQL5.7のリポジトリをインストール(追加)するために、

(特定のバージョンのリポジトリの)インストール用のURL(拡張子はRPMファイル)を指定します。

[root@localhost ~]#yum -y localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
※ localinstall

RPMファイルを取得(リポジトリを追加)するために使用します。

実践2: インストール可能なMySQLのバージョンを確認する

MySQL5.7のリポジトリを追加した結果、インストール可能なMySQLのバージョン(5.7)を確認します。

[root@localhost ~]#yum info mysql-community-server
利用可能なパッケージ
名前 : mysql-community-server
アーキテクチャー : x86_64
バージョン  : 5.7.29
実践3: MySQLをインストール

MySQL5.7がインストールできることが確認できたため、MySQL5.7をインストールします。

[root@localhost ~]#yum -y install mysql-community-server
実践4: インストールしたMySQLのバージョン確認
[root@localhost ~]#mysql --version 
mysql  Ver 14.14 Distrib 5.7.29, for Linux (x86_64) using  EditLine wrapper

※ インストールが上手くいかない場合の対処法

以下のような内容のメッセージが最後の方に表示されるため、上手くインストールできないことがあります。

  • 『証明書の確認に失敗しました。アプリケーションは実行されません。』
  • 『Failing package is: mysql-community-libs-5.7.37-1.el7.x86_64
  • GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql』

その場合は、次の手順を参考に、 認証設定の解除をお試しください。

1. viエディタの起動(「 mysql-community.repo 」を開く)
[root@localhost ~]#vi /etc/yum.repos.d/mysql-community.repo
2. インサートモードを起動(「i」のキーを入力してください。)
3. 次の内容を修正する(認証(GPG)の設定を解除する)
[mysql57-community]の項目にある gpgcheck=1をgpgcheck=0に変更してください。

4. インサートモードを終了する

([Esc]キー をクリック)

5. 上書き保存をする

「:wq」をタイプして、「Enter」キーをクリックします)

6. 再度、MySQLのインストール

再度、「2. MySQL(新DBサーバー)のインストール」の手順に戻り、MySQLのインストールを試してください。

参考
https://docs.oracle.com/cd/E39368_01/adminsg/ol_yum_config.html

作成手順

② MySQL(データベースサーバー)の起動

1. データベースサーバーの起動

実践1:データベースサーバーの起動
[root@localhost ~]♯systemctl start mysqld.service
実践2:起動状態を確認する

起動を試した結果、データーベースサーバーが起動しているか確認します。

※ 起動していなければ再度、起動を試みましょう。

[root@localhost ~]#systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; vendor preset: disabled)
   Active: active (running) since 月 2020-01-27 20:26:31 JST; 5s ago
     Docs: man:mysqld(8)

2. 自動起動の設定

実践1:自動起動の設定

サーバー(CentOS)を起動した際に、データベースサーバー(MySQL)が自動で起動するように設定します。

[root@localhost ~]♯systemctl enable mysqld.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
実践2:自動起動の状態を確認する
[root@localhost ~]#systemctl is-enabled mysqld.service
enabled

作成手順

③ データベースのセキュリティ(ログイン)の設定

データベースのセキュリティの設定を、次の二つの手順に分けて行います。

1. パスワードのポリシー変更

データベースへのログインで使用するパスワードを、練習のため簡単なもの(root123)に変更します。

2. セキュリティ・ログインの設定(mysql_secure_installationの利用)

「mysql_secure_installation」コマンドを使って、セキュリティの設定をします。

具体的には以下の内容を設定します。

  • rootユーザー(管理者)のパスワードの変更
  • 匿名ユーザーの削除
  • リモート接続からのrootユーザー(管理者として)での ログインの禁止
  • テスト用のデータベースの削除
  • 設定した権限の内容を反映する(ユーザー権限に関するテーブルをリロード)

1. パスワードのポリシー変更

データベースへのログインで使用するパスワードを、練習のため簡単なもの(root123)に変更します。

しかし、現在、パスワード規約(※)が有効のため簡単なパスワードに変更できません。

そのため規約を変更するために以下の2つのことを実施します。

  • ① パスワードのチェックレベルを下げる(設定ファイルの編集)
  • ② パスワードの最低文字数の設定(MySQLへのログイン)
※ 規約について

大文字・小文字・数字・特殊文字の4種類の文字を含み、8文字以上です。

セキュリティが低下するため、実際の運用環境では、簡単なこの作業は行いません。

具体的には、次の手順で実施します。

実践1:パスワードのチェックレベルを下げる(設定ファイルの編集)

MySQL専用の設定ファイル(/etc/my.cnf)にて設定をします。

実践2:パスワードの最低文字数の設定(MySQLへのログイン)

データベースサーバー(MySQL)にログインし、簡易的なパスワードを設定できるよう、パスワードの最低文字数を低く設定します。

実践3:パスワードポリシーの変更状況の確認

実際に変更されたかどうかを確認するため、変更後のポリシーの確認と、パスワードの変更を行います。

実践1:パスワードのチェックレベルを下げる(設定ファイルの編集)

パスワードのチェックレベルを下げるため、 MySQL専用の設定ファイル(/etc/my.cnf )を編集します。

1) 設定ファイル(/etc/my.cnf )をバックアップを取る

その前に、編集内容に間違いがあった時に備えファイルをコピーします。

[root@localhost ~]#cp -p /etc/my.cnf /etc/my.cnf.org
2) 無事にバックアップできたか確認する
[root@localhost ~]#diff /etc/my.cnf /etc/my.cnf.org
3) viエディタの起動(「/etc/my.cnf 」を開く)
[root@localhost ~]#vi /etc/my.cnf
4) インサートモードを起動(「i」のキーを入力してください。)
5) 最終行に以下の内容を記述
validate_password_policy=LOW
6) インサートモードを終了する([Esc]キー をクリック)
7) 上書き保存をする(「:wq」をタイプして、「Enter」キーをクリックします)

vi エディタが終了します。

8) 設定内容を反映させるため、MySQLを再起動
[root@localhost ~]#systemctl restart mysqld.service
実践2:パスワードの最低文字数の設定(MySQLへのログイン)

データベースサーバー(MySQL)にログインし、簡易的なパスワードを設定できるよう、パスワードの最低文字数を低く設定します。

1) 現在のログインのパスワードを確認する

MySQLへログインするため、パスワードを確認します。

[root@localhost ~]#cat /var/log/mysqld.log | grep root
2020-01-27T11:26:28.538824Z 1 [Note] A temporary password is generated for root@localhost: hx1rxlh5_Zvy
2) MySQL(データベースサーバー)へログイン
[root@localhost ~]#mysql -u root -p
 *****
3) パスワードの最低文字数を変更する

設定できるパスワードの最低文字数を4文字に設定します。

mysql> set global validate_password_length=4;
実践3:パスワードポリシーの変更状況の確認

実際にパスワードのポリシーが変更できたことを確認します。

1) パスワードを変更する

まずは、パスワードが変更できるか確認します。

mysql> set password for root@localhost=password('passwordPASSWORD@999');
2) 現状のパスワードのポリシー確認する

次にパスワードのポリシーの内容を確認します。

mysql> show variables like 'validate_password%';
3) MySQLをログアウトする
mysql> exit;

2. セキュリティ・ログインの設定(mysql_secure_installationの利用

続いて「mysql_secure_installation」コマンドを使って、セキュリティの設定をします。

対話形式で、以下のようなMySQLに関するセキュリティに関する設定ができます。

Mysql_secure_installationコマンドで設定できる内容
  1. rootユーザー(管理者)のパスワードの変更
  2. 匿名ユーザーの削除
  3. リモート接続からのrootユーザー(管理者として)での ログインの禁止
  4. テスト用のデータベースの削除
  5. 設定した権限の内容を反映する(ユーザー権限に関するテーブルをリロード)

※ 前項のパスワードの規約解除を行っていないと 新しく設定するパスワードは「 8 文字以上かつ英大文字・小文字・数字・記号」を含んでいないというエラーになります。気をつけてください。

1. rootユーザー(管理者)のパスワードの変更
[root@localhost ~]#mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:passwordPASSWORD@999
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y
The existing password for the user account root has expired. Please set a new password.
New password: root123
Re-enter new password:root123
Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) ::y
2. 匿名ユーザーの削除

匿名ユーザー( anonymous users)削除確認にy(=Yes)を入力し、匿名ユーザーを削除する

By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother.
You should remove them before moving into a production environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) :y

Success.
3) リモート接続からのrootユーザー(管理者として)での ログインの禁止

リモートホストからrootログイン禁止確認にy(=Yes)を入力し、リモートホストからのrootログインを禁止する

Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :y
Success.
4) テスト用のデータベースの削除
By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for N : y
Success.
Success.
5) 設定した権限の内容を反映する(ユーザー権限に関するテーブルをリロード)

ユーザー権限が保存されているテーブルのリロード確認にy(=Yes)を入力

Reloading the privilege tables will ensure that all changes made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) :y
Success.
All done!

作成手順

④ データベースの文字コードの設定

データベースで使用する文字コードを「UTF-8」に設定します。

具体的には次の手順で文字コードを変更します。

1. 文字コードの変更(設定ファイルの編集)

先ほどと同様、 MySQL専用の設定ファイル「/etc/my.cnf」を編集することで、文字コードを変更します。

2. 変更状況の確認

実際に、文字コードが変更されたかをMySQL(データベースサーバー)にログインすることで確認します。

1. 文字コードの変更(設定ファイルの編集)

MySQL専用の設定ファイルを編集することで、文字コードを変更します。

1) viエディタの起動(「/etc/my.cnf 」を開く)
[root@localhost ~]#vi /etc/my.cnf
2) インサートモードを起動(「i」のキーを入力してください。)
3) 最終行に以下の2行を追記
character_set_server=utf8
skip-character-set-client-handshake
4) インサートモードを終了する([Esc]キー をクリック)
5) 上書き保存をする(「:wq」をタイプして、「Enter」キーをクリックします)

vi エディタが終了します。

6) 設定内容を反映させるため、MySQLを再起動
[root@localhost ~]#systemctl restart mysqld.service

2. 変更状況の確認

実際に、文字コードが変更されたかをMySQL(データベースサーバー)にログインすることで確認します。

1) MySQLへログインする
[root@localhost ~]#mysql -u root -p
*****
2) 文字コードを確認する
mysql> show variables like 'char%’;
3) 再度パスワードのポリシーを確認する
mysql> show variables like 'validate_password%';
4) MySQLをログアウトする
mysql> exit;

NEXT>> 実践2:データベースの作成とWebアプリの連携