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 削除Raw Code(S)Raw Code(T)
# 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

Step 2. MariaDB yum リポジトリの追加

MariaDB は、本家サイトのリポジトリを追加することをオススメします。

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

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

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

/etc/yum.repos.d/MariaDB.repoRaw Code(S)Raw Code(T)
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Step 3. MariaDB インストール

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

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

MariaDB インストールRaw Code(S)Raw Code(T)
# 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 確認Raw Code(S)Raw Code(T)
# 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 を最小構成で設定します。

最小構成用のコンフィグ用意Raw Code(S)Raw Code(T)
# 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.cnfRaw Code(S)Raw Code(T)
[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

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

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

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

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

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

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

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

MariaDB サービス登録・起動Raw Code(S)Raw Code(T)
# 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 が使えない場合には

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 を用いたセキュリティ設定Raw Code(S)Raw Code(T)
# 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 へログインRaw Code(S)Raw Code(T)
# 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 インストール、及び初期設定 でした。