【Ubuntu】MariaDBをインストールする:初期設定(セキュリティ、データベース)

時計 2022.04.02 / 時計

【Ubuntu】MariaDBをインストールする:初期設定(セキュリティ、データベース)

本記事ではUbuntuMariaDBインストールする方法について解説していきます。

MariaDBはMySQLから派生したデータベースであり、とても人気の高いデータベースの一つです。それをLinux系OSのUbuntuにインストールしていきます。

インストール後のセキュリティ設定やデータベース作成などの初期設定についても解説しています。

本記事を通して、UbuntuとMariaDBについて理解を深めましょう。

MariaDB

MariaDBとは

mariaDBは2009年にリリースされた、MySQLから派生したデータベースです。mariaDBはMySQLの元開発メンバーが開発を行っています。

mariaDBはMySQLと同様の機能をサポートしており、使用方法も大きな違いはないです。またスペックや機能面でもmariaDBの方が優れています。

そこで本記事ではデータベースソフトウェアとしてmariaDBをインストールします。

データベースについて詳しくは以下記事をご参照ください。

mariaDBのインストール

以下コマンドを実行してUbuntuにMariaDBをインストールします。

$ sudo apt update
$ sudo apt install mariadb-server mariadb-client

上記コマンドでMariaDBはインストールされましたがセキュリティ面では安全ではないです。必ずこの後で紹介するセキュリティスクリプトを実行するようにしましょう。

本記事でのMariaDBのバージョンは次の通りです。

$ mysql --version
mysql  Ver 15.1 Distrib 10.3.31-MariaDB, for debian-linux-gnu (aarch64) using readline 5.2

またPythonからmariaDBにアクセスするために以下のライブラリもインストールしておきます。

$ sudo apt install libmysqlclient-dev

ステータスの確認

以下コマンドを実行することでMariaDBのステータスを確認できます。

$ sudo systemctl status mariadb

すでにMariaDBは起動されているはずです。もし実行されていない場合は以下コマンドで起動できます。

$ sudo systemctl start mariadb

MariaDBの設定

照会順序(collation)の変更:utf8mb4_bin

照会順序(collation)を変更するために、設定ファイル50-server.cnfを編集します。

$ sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
IT用語の確認

照会順序(collation)とは、データの文字を比較するときのルールです。「文字コード_言語名_比較方法」という形で表記します

MySQLは文字コードと照会順序(collation)を持っていて、文字コードはutf8mb4が設定されています。

照会順序には次の値が指定可能です。

  • utf8mb4_general_ci(デフォルト値)
  • utf8mb4_unicode_ci
  • utf8mb4_unicode_520_ci
  • utf8mb4_bin

デフォルトの「utf8mb4_general_ci」では大文字と小文字を区別しませんので、セキュリティホールになる可能性があります。
ここでは大文字と小文字を区別可能なutf8mb4_binを設定します。

設定ファイル(50-server.cnf)では文字コードと照会順序は次の設定値に指定します。

character-set-server = 文字コード
collation-server = 照会順序

これより50-server.cnfを次のように変更します。

character-set-server = utf8mb4
collation-server = utf8mb4_bin

セキュリティスクリプトの実行

MariaDBはデフォルト設定(インストール直後)では管理パスワードなどが設定されていないため安全ではないです。

以下コマンドを実行しセキュリティスクリプトを実行します。

$ sudo mysql_secure_installation

セキュリティスクリプトを実行すると一連のプロンプトが表示され、各種設定を変更できます。

最初のプロンプトではMariaDBのroot(管理者ユーザー)パスワードの入力を求められます。まだrootパスワードは設定していないため「Enter」キーを押します。

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):

Enterキーを押すと、次にrootのパスワード設定をするか確認が入ります。

OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n]

パスワードを設定するために「Y」を入力し、root用のパスワードを設定してください。

その後はanonymousユーザーの削除や、リモートからのruootログインの拒否といった一連のプロンプトが表示されます。
その都度、「Y」または「n」で答えてください。基本的にはすべて「Y」で問題ないです。

ファイヤウォールの設定

MariaDBを外部から接続する場合、ファイヤウォールでポート3306を解放しておく必要があります。

以下コマンドでポート3306を解放しましょう。

$ sudo ufw allow 3306
Rule added
Rule added(v6)

データベースの作成

MySQLにログインしてデータベースを作成します。

sudo mysql -u root -p

上記コマンドを実行したら、先ほど設定したrootパスワードを入力してログインをします。

データベースの作成にはコマンドCREATE DATABASEを使用します。

CREATE DATABASE データベース名 CHARACTER SET UTF8;

ここではweb_appというデータベースを作成してみます。

MariaDB> CREATE DATABASE web_app CHARACTER SET UTF8

ユーザーの追加

以下のようにコマンドCREATE USERを利用して、新しいユーザーを作成します。

構文

CREATE USER "ユーザー名"@"localhost" IDENTIFIED BY "パスワード"

次に作成したユーザーに対してデータベースへのアクセス権限を与えます。

構文

GRANT ALL ON データベース名.* TO "ユーザー名"@"localhost";

文字コードの設定

MySQLの文字コードを設定するために、my.cnfファイルを編集します。

my.cnfファイルとはMySQLの設定ファイルであり、様々なパラメータの設定を指定できます。ここでは日本語の文字化けをなくすためにすべてUTF-8に統一します。

my.cnfは/etc/mysql内にあり、vimコマンドを利用して以下の設定を追記します。

[mysqld]
character-set-server=utf8

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8

再起動して設定を反映させます。

$ service mysql restart

MySQLに再度ログインを行い、文字コードの設定を以下コマンドで確認します。

$ show variables like “chara%”;

これで基本的なMariaDBの設定は完了です。あとはUbuntuサーバーで動くWebアプリケーションなどとMariaDBを連携させて使ってみてください。

MariaDBとDjangoの連携

本サイトOFFICE54ではPythonやDjangoを主に解説している技術サイトです。

そこでUbuntuにインストールしたMariaDBとDjangoを連携させる方法を本項では解説していきます。

MariaDBの接続ドライバ

DjangoでMariaDBを利用するためにはドライバをインストールする必要があります。

MariaDB(MySQL)を利用するためのドライバには以下4種類があります。

  • PyMySQL
  • mysql-connector-python
  • MySQL-Python
  • mysqlclient

DjangoではPython3に対応しているmysqlclientが推奨されています。mysqlclientは以下pipコマンドでインストールできます。

(venv) $ pip3 install mysqlclient

Djangoのsettings.pyを変更

ドライバをインストールしたら次にDjangoの設定ファイルであるsettings.pyにMariaDBに接続する設定を記述します。

settings.pyについて詳しくは以下記事をご参照ください。

デフォルトではsqlite3と接続する設定になっています。MariaDB(MySQL)と接続するためには以下のように設定を変更します。

# MariaDBの接続設定
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': データベース名,
        'USER': ユーザー名,
        'PASSWORD': パスワード,
        'HOST': 'localhost',
        'PORT': '',
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
	    'charset': 'utf8mb4',
        },
    }
}

上記によってDjangoのデータベースとしてMariaDBが利用できるようになります。