MariaDB とは

MariaDB は、Oracle よって買収された MySQL のフォーク版です。

MariaDB は、RHEL と CentOS みたいなもので、MySQL のフォーク版であるため、使い方も MySQL と同じです。

CentOS 7 では、この MariaDB がデフォルト DB として採用されました。

今回は、MariaDB のインストール方法、そして、最小構成で動かすための初期設定、及び mysql_secure_installation を用いたセキュリティ設定を実施します。

MariaDB インストール、及び初期設定

Step 1. 古いバージョンの MariaDB 削除

MariaDB は、yum でインストールするので、インストール自体は簡単ですが、OS インストール時にデフォルトで mariadb-5.5 のように結構古いバージョンがインストールされている場合があるので、rpm リストを出してみて見つかったらキレイに消しておきます。

既存の MariaDB 削除
1
2
3
4
5
6
7
8
9
# rpm -qa | grep -i "mariadb"
mariadb-libs-5.5.44-1.el7_1.x86_64
mariadb-5.5.44-1.el7_1.x86_64
mariadb-server-5.5.44-1.el7_1.x86_64

# yum remove mariadb mariadb-libs

# rpm -qa | grep -i "mariadb"
※何も表示されなかったら OK

mariadb-libs を削除すると postfix も削除されます

一点注意しないといけないのは、mariadb-libs を削除すると 依存関係により postfix も削除されてしまうことです。

そのため、自分で postfix 設定をいじってる方は、事前に postfix 設定をバックアップしてください。

Conaha とか VPS の場合は、普通に消されたとしても postfix を入れ直すだけでメール送信できるようになります。 (が、念のためバックアップは取っておいた方が良いと思います)

# yum remove mariadb-libs
・・・
削除しました:
  mariadb-libs.x86_64 1:5.5.56-2.el7

依存性の削除をしました:
  postfix.x86_64 2:2.10.1-6.el7

# yum -y install postfix

# systemctl enable postfix.service
# systemctl start postfix.service

# systemctl list-unit-files --type service | grep "postfix"
postfix.service                enabled

Step 2. MariaDB リポジトリの追加 (二通り)

MariaDB のリポジトリを追加・作成する方法としては、以下の二通りあります。

  • リポジトリゼネレータを使ってコードを生成し、直接リポジトリファイルを作成する方法
  • リポジトリ自動追加用のシェルスクリプト mariadb_repo_setup を実行する方法

MariaDB リポジトリの追加 その1. リポジトリゼネレータを使ってコードを生成し、直接リポジトリファイルを作成する方法

MariaDB 用のリポジトリを追加する一番目の方法は、本家サイトのリポジトリジェネレータを使う方法です。

リポジトリコードはリポジトリジェネレータから取得できますが、OS 内のリポジトリファイルは自分で作成する必要があります。

以下に本家サイトのリンクを記載しますので、ご興味のある方は、一読してみてください。 CentOS、RHEL、Fedora など、各ディストリビューション向けのリポジトリジェネレータを提供しており、OS のバージョンに合わせてリポジトリを自動生成・取得できるので便利です。

特に、自分でディストリビューションと OS のバージョンを指定してリポジトリコードを生成できます。

日本語の URL がリンク切れが続いていたため、英語の URL のみ記載しています。

以下の例では、CentOS 7 用のリポジトリ (MariaDB 安定版 10.1) を追加します。

Vi エディタで以下のファイルをルートユーザで新規作成します。

/etc/yum.repos.d/MariaDB.repo
1
2
3
4
5
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

MariaDB リポジトリの追加 その2. リポジトリ自動追加用のシェルスクリプト mariadb_repo_setup を実行する方法

MariaDB のリポジトリを追加するもう一つの方法は、curl でリポジトリ自動作成・追加用のシェルスクリプト (mariadb_repo_setup) を読込むと同時に bash で実行することです。

コマンド一発で自動的にリポジトリを追加してくれるので、シンプルで速いです。

最新のリポジトリを追加することも、特定のバージョンを指定してリポジトリを自動作成することも出来ます。

基本的な使い方については、以下の URL をご確認ください。

MariaDB : パッケージ・リポジトリ セットアップと使用方法 (英語)

まずは、どんなオプションが使えるか軽く目を通しておきます。

mariadb_repo_setup オプション確認
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash -s -- --help
Usage: curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash -s -- [OPTIONS]

    https://mariadb.com/kb/en/mariadb/mariadb-package-repository-setup-and-usage/

The MariaDB Repository supports these Linux OSs, on x86-64 only:
    * RHEL/CentOS 6 & 7
    * Ubuntu 14.04 LTS (trusty), 16.04 LTS (xenial), & 18.04 LTS (bionic)
    * Debian 7 (wheezy) & 8 (jessie)
    * SLES 12

Options:
    --help                  Display this help and exit.

    --mariadb-server-version=<version>
                            Override the default MariaDB Server version.
                            By default, the script will use 'mariadb-10.3'.
    --mariadb-maxscale-version=<version>
                            Override the default MariaDB MaxScale version.
                            By default, the script will use '2.2'.

    --os-type=<type>        Override detection of OS type. Acceptable values include
                            'debian', 'ubuntu', 'rhel', and 'sles'.
    --os-version=<version>  Override detection of OS version. Acceptable values depend
                            on the OS type you specify.

    --skip-key-import       Skip importing GPG signing keys.

    --skip-maxscale         Skip the 'MaxScale' repository.
    --skip-server           Skip the 'MariaDB Server' repository.
    --skip-tools            Skip the 'Tools' repository.

    --write-to-stdout       Write output to stdout instead of to the OS's
                            repository configuration. This will also skip
                            importing GPG keys and updating the package
                            cache on platforms where that behavior exists.

まずは、最新安定版の MariaDB リポジトリを自動作成する方法です。

特にバージョン指定がなければ、デフォルトでコマンドを実行した時点での最新バージョンが指定されます。

このコマンドを実行した時点で最新安定版は、MariaDB 10.3 です。

最新安定版 MariaDB のリポジトリ自動追加・作成
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# ls -l /etc/yum.repos.d/
・・・

# curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash
[info] Repository file successfully written to /etc/yum.repos.d/mariadb.repo.
[info] Adding trusted package signing keys...
[info] Succeessfully added trusted package signing keys.

# ls -l /etc/yum.repos.d/
・・・
-rw-r--r-- 1 root root  794  7月 22 14:02 mariadb.repo

# cat /etc/yum.repos.d/mariadb.repo
[mariadb-main]
name = MariaDB Server
baseurl = https://downloads.mariadb.com/MariaDB/mariadb-10.3/yum/rhel/$releasever/$basearch
gpgkey = file:///etc/pki/rpm-gpg/MariaDB-Server-GPG-KEY
gpgcheck = 1
enabled = 1

[mariadb-maxscale]
# To use the latest stable release of MaxScale, use "latest" as the version
# To use the latest beta (or stable if no current beta) release of MaxScale, use "beta" as the version
name = MariaDB MaxScale
baseurl = https://downloads.mariadb.com/MaxScale/2.2/centos/$releasever/$basearch
gpgkey = file:///etc/pki/rpm-gpg/MariaDB-MaxScale-GPG-KEY
gpgcheck = 1
enabled = 1

[mariadb-tools]
name = MariaDB Tools
baseurl = https://downloads.mariadb.com/Tools/rhel/$releasever/$basearch
gpgkey = file:///etc/pki/rpm-gpg/MariaDB-Enterprise-GPG-KEY
gpgcheck = 1
enabled = 1

また、特定バージョンの MariaDB リポジトリを自動作成したい場合は、以下のようにします。

この例では、MariaDB 10.1 がインストールされるようにバージョンを指定してコマンドを実行しています。

ちなみに、既に mariadb.repo が存在する場合は、mariadb.repo_NN みたいな感じで自動的にバックアップされるようになっています。

特定バージョンの MariaDB リポジトリ自動追加・作成
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# ls -l /etc/yum.repos.d/
・・・
-rw-r--r-- 1 root root  794  7月 22 14:02 mariadb.repo         #### 既存のリポジトリ

# curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash -s -- --mariadb-server-version=mariadb-10.1
[warning] Found existing file at /etc/yum.repos.d/mariadb.repo. Moving to /etc/yum.repos.d/mariadb.repo.old_1.
[info] Repository file successfully written to /etc/yum.repos.d/mariadb.repo.
[info] Adding trusted package signing keys...
[info] Succeessfully added trusted package signing keys.

# ls -l /etc/yum.repos.d/
・・・
-rw-r--r-- 1 root root  794  7月 22 14:09 mariadb.repo         #### 新規で作成されたリポジトリ
-rw-r--r-- 1 root root  794  7月 22 14:02 mariadb.repo.old_1   #### バックアップされた既存のリポジトリ

# cat /etc/yum.repos.d/mariadb.repo
[mariadb-main]
name = MariaDB Server
baseurl = https://downloads.mariadb.com/MariaDB/mariadb-10.1/yum/rhel/$releasever/$basearch
gpgkey = file:///etc/pki/rpm-gpg/MariaDB-Server-GPG-KEY
gpgcheck = 1
enabled = 1

[mariadb-maxscale]
# To use the latest stable release of MaxScale, use "latest" as the version
# To use the latest beta (or stable if no current beta) release of MaxScale, use "beta" as the version
name = MariaDB MaxScale
baseurl = https://downloads.mariadb.com/MaxScale/2.2/centos/$releasever/$basearch
gpgkey = file:///etc/pki/rpm-gpg/MariaDB-MaxScale-GPG-KEY
gpgcheck = 1
enabled = 1

[mariadb-tools]
name = MariaDB Tools
baseurl = https://downloads.mariadb.com/Tools/rhel/$releasever/$basearch
gpgkey = file:///etc/pki/rpm-gpg/MariaDB-Enterprise-GPG-KEY
gpgcheck = 1
enabled = 1

Step 3. MariaDB インストール

yum の実行結果は長いので省略しますが、700MB くらいで少しボリューム感がありました。

先ほどリポジトリを追加したので、--enablerepo=mariadb オプション付きで MariaDB をインストールします。

MariaDB インストール
1
2
3
4
5
6
7
8
9
# yum -y install --enablerepo=mariadb MariaDB-common MariaDB-devel MariaDB-shared MariaDB-compat MariaDB-server MariaDB-client

# rpm -qa | grep "MariaDB"
MariaDB-client-10.1.14-1.el7.centos.x86_64
MariaDB-devel-10.1.14-1.el7.centos.x86_64
MariaDB-shared-10.1.14-1.el7.centos.x86_64
MariaDB-common-10.1.14-1.el7.centos.x86_64
MariaDB-server-10.1.14-1.el7.centos.x86_64
MariaDB-compat-10.1.14-1.el7.centos.x86_64

Step 4. MariaDB 初期設定

デフォルト設定ファイルは、/etc/my.cnf ですが、中身は空っぽで /etc/my.cnf.d/ 配下の設定ファイルをインクルードするようになっています。

/etc/my.cnf 確認
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# ls -l /etc/my.cnf
-rw-r--r-- 1 root root 202  5月  8 19:49 /etc/my.cnf

# cat /etc/my.cnf
-------------------- ここから --------------------
#
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
-------------------- ここまで --------------------

# ls -l /etc/my.cnf.d/
合計 20
-rw-r--r-- 1 root root  295  5月  8 19:49 client.cnf
-rw-r--r-- 1 root root  763  5月  8 19:49 enable_encryption.preset
-rw-r--r-- 1 root root  232  5月  8 19:49 mysql-clients.cnf
-rw-r--r-- 1 root root 1080  5月  8 19:49 server.cnf
-rw-r--r-- 1 root root  285  5月  8 19:49 tokudb.cnf

と言いながら /etc/my.cnf.d/ ディレクトリ内にあるファイルの中身も同じくほとんど設定が入ってないので、結局、MySQL のサンプル設定が入っているディレクトリ /usr/share/mysql/ から設定ファイルを持ってくる必要があります。

/usr/share/mysql/ 内には、データベースの規模に応じて使えるように各種設定ファイルが用意されています。

この例では、my-small.cnf を流用し、MariaDB を最小構成で設定します。

最小構成用のコンフィグ用意
1
2
3
4
5
6
7
8
9
# ls -l /usr/share/mysql/my-*.cnf
-rw-r--r-- 1 root root  4920  5月  8 19:58 /usr/share/mysql/my-huge.cnf
-rw-r--r-- 1 root root 20438  5月  8 19:58 /usr/share/mysql/my-innodb-heavy-4G.cnf
-rw-r--r-- 1 root root  4907  5月  8 19:58 /usr/share/mysql/my-large.cnf
-rw-r--r-- 1 root root  4920  5月  8 19:58 /usr/share/mysql/my-medium.cnf
-rw-r--r-- 1 root root  2846  5月  8 19:58 /usr/share/mysql/my-small.cnf

# cp -p /usr/share/mysql/my-small.cnf /etc/my.cnf.d/server.cnf
cp: `/etc/my.cnf.d/server.cnf' を上書きしますか? y

後は、文字化けしないように [client][mysqld] に UTF-8 を設定します。

この例では、データベースの保存先 (データが格納される場所) として datadir=/var/lib/mysql を明示的に設定しています。

ちなみに、MariaDB をインストールするとデフォルトで /var/lib/mysql が作成されますが、もしディレクトリが存在しなかったら作成してください。

/etc/my.cnf.d/server.cnf
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[client]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
default-character-set = utf8    #### 追加

[mysqld]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
skip-external-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 240K
datadir=/var/lib/mysql          #### 追加
character-set-server = utf8     #### 追加

server-id       = 1

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M

[mysqlhotcopy]
interactive-timeout

utf8 設定時の注意点

[client] セクションと [mysqld] セクション側の utf8 の設定パラメータ名が違うので、間違えないように注意してください。

[client]

default-character-set = utf8

[mysqld]

character-set-server = utf8

pid-file 設定時の注意点

pid-file を設定しなかった場合、基本的には、/var/run ディレクトリの直下に生成されますが、明示的に pid-file を設定する場合は、以下のように [mysqld] セクションに設定してくだささい。

[mysqld]

pid-file = /var/run/mysqld/mysqld.pid

特に、/var/run 直下に pid 専用のディレクトリを掘る際には、注意が必要なので、以下をご一読ください。

CentOS 7 : /var/run 直下に作ったディレクトリが消えないようにする

また、念のためですが、pid は基本的にプロセス名に合わせるため、mariadb.pid ではなく、mysqld.pid にしています。

MariaDB のインストールと初期設定はこれで完了です。

mysql_secure_installation を用いたセキュリティ設定

初期状態だと テスト用のデータベースアノニマスユーザ (匿名のログインユーザ) 等。 不要なものが入っているため、キレイな状態にしておく必要があります。

また、ルートユーザのパスワード設定遠隔からのルートユーザのログインを許可するかどうか 等。 一連の作業を対話形式で簡単に設定できるように、 mysql_secure_installation というツールが用意されています。

Step 1. MariaDB サービス有効化、及びサービス開始

mysql_secure_installation は、サービスが開始状態でないと使えないので、まずは、サービスを起動します。

mariadb.service サービスを起動すると mysqld プロセスが起動することが分かります。

MariaDB サービス登録・起動
1
2
3
4
5
# systemctl enable mariadb.service
# systemctl start mariadb.service

# ps -ef | grep "mysql" | grep -v "grep"
mysql    22979     1  0 16:21 ?        00:00:02 /usr/sbin/mysqld

systemctl enable がエラーで失敗した場合には

失敗した場合は、無効なリンクが張られている、または systemctl 実行時に有効なサービス名が指定されてない可能性が高いので、以下を試して見てください。 (unlink はリンクを消すコマンドです)

# systemctl enable mysqld.service
Failed to execute operation: Too many levels of symbolic links

# ls -l /etc/systemd/system/mysql*
lrwxrwxrwx 1 root root 39  5月  8 19:49 /etc/systemd/system/mysql.service -> /usr/lib/systemd/system/mariadb.service
lrwxrwxrwx 1 root root 39  5月  8 19:49 /etc/systemd/system/mysqld.service -> /usr/lib/systemd/system/mariadb.service

# unlink /etc/systemd/system/mysql.service
# unlink /etc/systemd/system/mysqld.service

# ls -l /usr/lib/systemd/system | egrep "(mysql|mariadb)"
-rw-r--r--  1 root root 4511  6月 16 10:23 mariadb.service

# systemctl enable mariadb.service
Created symlink from /etc/systemd/system/mysql.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/mysqld.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.

systemctl が使えない場合には

CentOS 7 だと普通に systemctl が使えると思いますが、もし使えなかったら以下のように古典的なやり方でも構いません。

# /etc/init.d/mysql start

Step 2. MariaDB セキュリティ設定 (推奨)

後は、mysql_secure_installation を実行し、一連のセキュリティ設定を実施します。

公式ページにも記載がありますが、本番環境の場合は、必ず実行することが推奨されています。

  • 現在の root パスワード入力 : 最初は Enter で良い
  • root パスワード設定
  • root パスワード設定 (再入力)
  • 匿名ユーザ削除
  • root ユーザのリモートログインをブロック
  • テストデータベース削除
  • ユーザ権限が保存されている privilege テーブルのリロード

ちなみに、mysql_secure_installation は、/usr/bin に入っています。

mysql_secure_installation を用いたセキュリティ設定
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# whereis mysql_secure_installation
mysql_secure_installation: /usr/bin/mysql_secure_installation /usr/share/man/man1/mysql_secure_installation.1.gz

# mysql_secure_installation

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
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 パスワードを設定するか
New password:                 #### root パスワード入力
Re-enter new password:        #### root パスワード再入力
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB 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? [Y/n] Y        #### 匿名ユーザを削除するか
 ... 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? [Y/n] Y  #### root ユーザのリモートログインをブロックするか
 ... Success!

By default, MariaDB 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? [Y/n] Y    #### テスト DB を削除するか
 - 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? [Y/n] Y   #### ユーザ権限テーブルをリロードするか
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Step 3. MariaDB へログイン

最後に、MariaDB へログイン出来ることを確認します。

MariaDB へログイン
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
# mysql -uroot -p
Enter password:    #### root パスワード入力
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.1.14-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>
MariaDB [(none)]>
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+

終わりに

これで MariaDB を使用する準備ができました。

データベース内のプロンプトが MariaDB [(none)]> になっているだけで、動いているプロセスも mysqld デーモンです。

今までの MySQL とほとんど変わらないので、後は、普通にデータベースとして使ってください。

以上、CentOS 7 MariaDB インストール、及び初期設定 でした。