さくらのVPSを使ってシステム開発に必要な知識を学ぶ 〜第9回〜

はじめに

本連載は、システム開発に必要な知識を得るために、一通りの流れを学ぶことを目指しています。

前々回(第7回)から、実際の業務を想定したメモアプリを例に、開発の流れを解説しています。今回はDB(データベース)サーバーの構築を解説します。

データベースとは?

データベース(英: database)は、電子的に保存され、アクセスできる組織化されたデータの集合です。表形式で保存するデータベースをリレーショナルデータベースと言います。

データベース構築には以下のようなメリットがあります。

  • データ管理が一元化できます。
  • 情報が探しやすくなります。
  • 情報の共有ができます。

参考

代表的なデータベース

データベース名開発元/開発者
Microsoft SQL Serverマイクロソフト
MySQLオラクル
Oracle Databaseオラクル
PostgreSQLPostgreSQL Global Development Group
SQLiteD. Richard Hipp

今回は個人開発や学習用途としても使用されているMySQLを使ってDBサーバーを構築します。

事前準備

さくらのVPSにSSHで接続

PC(macOS/Windows/Linux)で、下記コマンドを実行します。host-name.vs.sakura.ne.jpはさくらのVPSにおけるホスト名です。ホスト名を知る方法は前回の記事を参照してください。

$ ssh ubuntu@host-name.vs.sakura.ne.jp
ubuntu@host-name.vs.sakura.ne.jp's password:

ログインできたら成功です。下図はmacOSでの実行例です。

システムアップデート

ログインしたら、まずシステムパッケージを最新の状態に更新します。

$ sudo apt update -y
$ sudo apt upgrade -y

アップデート内容にカーネルが含まれる場合、下記の画面が表示されます。Enterキーを入力します。

続いて、再起動するデーモンを選択します。特に変更がなければ、TABキーを押してOKボタンまで移動し、Enterキーを入力します。

Enterキーを入力するとアップデート作業が続行され、完了します。

MySQLのインストールと設定

MySQLのインストール

下記のコマンドでMySQLをインストールします。

$ sudo apt install mysql-server -y

セキュリティ設定

MySQLインストール後、セキュリティ設定を行います。mysql_secure_installationコマンドを実行して、セキュリティ設定ウィザードを起動します。ウィザードに従い、パスワードの設定、不要なユーザーアカウントの削除、リモートアクセスの無効化などを行います。

mysql_secure_installationコマンドで実施できる設定としては、例えば以下のものがあります。

  • VALIDATE PASSWORDプラグインのインストール
    • ユーザーのパスワードとして設定できる文字列に一定の制限をかけることができます。
  • rootユーザーのパスワードポリシーの設定
    • 以下の3段階のレベルから設定できます。
      • LOW: 8文字以上
      • MEDIUM: 8文字以上、数字・大文字・小文字・記号を含む
      • STRONG: 8文字以上、数字・大文字・小文字・記号を含む、さらに辞書ファイルによるチェックあり
  • anonymousユーザーの削除
    • デフォルトではanonymousという匿名用ユーザーが設定してありますが、セキュリティリスクになるので削除します。
  • リモート接続におけるrootユーザーでのログインの禁止
    • リモートホストからrootユーザーでアクセスすることを禁止します。リモートホストからMySQLにアクセスすることを許可する場合は、専用のユーザーを作成して許可させます。
  • testデータベースの削除
    • デフォルトではテスト用のデータベースが存在しますが、不要なので削除します。

コマンドの実行例を以下に示します。

$ sudo mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y  ← VALIDATE PASSWORDプラグインをインストールします。

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0  ← パスワードポリシーとしてLOWを選択します。

Skipping password set for root as authentication with auth_socket is used by default.
If you would like to use password authentication instead, this can be done with the "ALTER_USER" command.
See https://dev.mysql.com/doc/refman/8.0/en/alter-user.html#alter-user-password-management for more information.

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  ← anonymousユーザーを削除します。
Success.


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  ← rootによるリモート接続を不許可に設定します。
Success.

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 No) : Y  ← testデータベースを削除します。
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

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!
$

動作確認

インストールと設定が完了したら、MySQLの動作を確認します。

MySQLにログイン

下記のコマンドでMySQLにログインします。

$ sudo mysql
mysql> 

ターミナルのプロンプトが「$」から「mysql>」に変わったら、MySQLのコマンドモードに移行しています。

新しいデータベースとユーザーの作成

新しいデータベースとユーザーを作成し、適切な権限を付与します。データベース名、ユーザー名、パスワードは必要に応じて変更してください。

なお、データベースの操作においては、SQL(Structured Query Language)という言語を使います。SQLの文法は基本的に同じですが、ソフトウェアごとに微妙に文法が違うので注意してください。今回はMySQL用のコマンドを使って解説します。

データベース作成

文法:CREATE DATABASE データベース名

mysql> CREATE DATABASE mydatabase;

ユーザー作成

文法:CREATE USER 'ユーザー名'@'ホスト名' IDENTIFIED BY 'パスワード';

mysql> CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'パスワード';

ユーザーに権限を付与

文法:GRANT ALL PRIVILEGES ON _ . _ TO 'ユーザー名'@'ホスト名';

mysql> GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

権限付与をデータベースに反映

文法:FLUSH PRIVILEGES;

mysql> FLUSH PRIVILEGES;

MySQLからログアウト

設定が終わったらMySQLからログアウトします。以下のコマンドを実行します。

mysql> exit
Bye
$

プロンプトが「mysql>」から「$」になったら、MySQLからのログアウト完了です。

MySQLを再起動

変更を反映させるためにMySQLを再起動します。

$ sudo systemctl restart mysql

実行例

ここまでに紹介した一連のコマンドの実行例を以下に示します。

これでMySQLがセットアップされ、データベースとユーザーが作成されました。

必要に応じて、外部からのリモートアクセスを許可するとか、ファイアウォールを設定することもできます。セキュリティに気を付けて設定してください。

MySQLをアンインストールするとき

もしMySQL環境を削除したくなった場合は、以下のコマンドを順に実行してください。

# MySQLサービス停止
$ sudo systemctl stop mysql

# mysql-serverと名の付くパッケージをアンインストール
$ sudo apt-get remove --purge mysql-server* mysql-common

# 不要になったパッケージを削除
$ sudo apt-get autoremove --purge

# MySQL関連ディレクトリ削除
$ sudo rm -r /etc/mysql
$ sudo rm -r /var/lib/mysql

まとめ

今回は、さくらのVPSにてDBサーバー(MySQL)を構築する手順を紹介しました。データベースやSQLに関しては他にも学ぶ事がたくさんありますが、今回は環境構築に最低限必要なコマンドの解説にとどめました。次回も引き続きサーバーを構築していきます。