Linux設定

MariaDBのインストール・設定方法&ベンチマーク結果

最終更新日: 2025/04/26

MariaDB(MySQL)とPostgreSQLのどちらを使うのかを決める

MariaDBとMySQLとPostgreSQLどれを選ぶべきか選択フローチャート」を参照して下さい。
その上でMariaDBをインストールすると決めたら読み進めて下さい。

そもそも自分でDBを設定・運用する事が妥当なのかの判断

データベースは、業務上ミッションクリティカルな部分であり、またサラリーマン的に働く場合には、その設定・運用・教育の人件費にもコストがかかると考えると、企業人として関わる場合には自分でインストール・設定・運用するよりも、サービス側にDB運用の多くを任せられる、DBAAS(Database As A Service)型のマネージドDBサービスを利用した方が、費用対効果的にも妥当となる事が多い。

ただ、個人の財布でサービスを運用する場合、月数千円でも節約したい、という気持ちになるのも妥当であり、その場合には、ようこそ、データベース運用者の道へ、という事になります。

MariaDBのインストール

OS付属のMariaDBをインストール

CentOSの公式からインストールするには以下の形で
dnfの部分はCentOS7以前ならyum、Ubuntu系ならapt-getに差し替え

sudo dnf -y install mariadb-server mariadb;

MariaDB公式の版をインストール

OS公式ではなく、MariaDB公式の方のを使う場合には、OSの他ソフトとの相性の問題が発生する可能性がありますが、MariaDB専用のサーバーにしようとしているのならば、問題はないでしょう。
又、一般的に、OS付属のMariaDBより、より新しい版が利用可能です。
MariaDb公式のmariadbをインストールするには
まず念の為にOS付属のmariadbが入っていたら削除するコマンドを打って

dnf remove mariadb*

加えて、CentOS8の場合は

dnf module disable mariadb;

CentOS7以下の場合は
/etc/yum.repos.d/CentOS-Base.repo

[base]と[updates]のセクションに

exclude=mariadb*

と加えて、CentOSのレポジトリの方からインストールされないようにする。

それからyumのレポジトリでmariadb公式を有効にする

curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash;

それからインストール

dnf -y install MariaDB*;

バージョンを

mariadb --version

で確認

MariaDBの最低限の設定

システム面の設定

自動起動&起動&セキュリティ設定を行うには

sudo systemctl start mariadb;
sudo systemctl enable mariadb.service;
sudo mariadb-secure-installation;

ローカルにmariadbをインストールした場合には

mariadb --user=root --host=localhost -p

と打ってログイン出来る事を確認しましょう。


MariaDBサーバーの文字コードをutf8mb4に変える(旧バージョンの場合)

以下はMariaDB11ではデフォルトでは問題ない状態なので、該当しない結果が出てきた場合はスキップして下さい。

サーバーにログインして

show variables like 'char%'; show variables like 'collation%';

と打つと

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+

という結果が出てきます。

絵文字が使えるUTF8を使いたい場合には
/etc/my.cnf.d/server.cnf
を編集して、以下の設定を書いて

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
collation-server = utf8mb4_unicode_ci
init-connect = 'SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci'
character-set-server = utf8mb4

MariaDBを

systemctl restart mariadb

で再起動させて変更を反映させます。

またサーバーにログインして

show variables like 'char%'; show variables like 'collation%';

と打ってみると

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

と表示される内容が変わった事を確認できます。

尚、昔はサーバーの規模等に応じたConfigのテンプレートが付属していましたが、今はデフォルトの設定で基本的に良いよという事で、そうした例が入ったConfigファイル例は付属していません。

データベース全体をバックアップ

mysqldump --all-databases --single-transaction --quick --lock-tables=false --master-data=2 > /tmp/full-backup-$(date +%F).sql -u root -p

データベース全体をダンプしたファイルからリストア

mysql -u root -p < $DUMPED.sql

ユーザーの権限の同期には

flush privileges;

を打つ

ファイアーウォールの設定

各VPSがファイアーウォールを提供しているのなら各VPSのファイアーウォールの機能を、そうでなければ firewall-cmd でLinux自体にfirewallを設定する。

DBのポートはWebサーバーに対してだけあけ、sshログインも自分の管理するサーバー等、特定のIPアドレスからのみログインできるようにするのがセキュリティ上良い。

なお、セキュリティとスペックの分離上、WebサーバーとDBサーバーを置くサーバーは出来るのなら分けた方が良いが、コストの削減考えてWebサーバーと同一の所に置くのもあるかと思います。
ただ、その場合でも、DBのポートをインターネットに公開しないように注意(Webサーバーからローカルアクセスでのみアクセスできるように設定すべき)。

mariadbのポートを許可するサービスとして追加するのなら

firewall-cmd --add-service=mysql --zone=public --permanent;
firewall-cmd --reload;

外部からアクセスできるようにする

vi /etc/my.cnf.d/server.cnf
をして
bind-address=0.0.0.0
と書く

ベンチマークを取得する

dnf install -y sysbench;

ログインしてから

create database sbtest;
GRANT ALL ON sbtest.* TO 'sbtest'@'localhost' IDENTIFIED BY 'sbtesT2020#desu';

下準備

sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --table-size=1000000 --mysql-host=localhost --mysql-password=sbtesT2020#desu --time=60 --db-ps-mode=disable prepare;

テストの実行

sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --table-size=100000 --mysql-host=localhost --mysql-password=sbtesT2020#desu --time=60 --db-ps-mode=disable --threads=8 run;

結果

ConoHa[解説]2CPU/メモリ1GBプラン

sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 8
Initializing random number generator from current time


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            1426376
        write:                           407536
        other:                           203768
        total:                           2037680
    transactions:                        101884 (1697.94 per sec.)
    queries:                             2037680 (33958.78 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          60.0032s
    total number of events:              101884

Latency (ms):
         min:                                    1.67
         avg:                                    4.71
         max:                                   44.74
         95th percentile:                        5.99
         sum:                               479849.55

Threads fairness:
    events (avg/stddev):           12735.5000/21.10
    execution time (avg/stddev):   59.9812/0.00

ConoHa[解説]3CPU/メモリ2GBプラン

sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 8
Initializing random number generator from current time


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            1745842
        write:                           498812
        other:                           249406
        total:                           2494060
    transactions:                        124703 (2078.17 per sec.)
    queries:                             2494060 (41563.41 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          60.0049s
    total number of events:              124703

Latency (ms):
         min:                                    1.38
         avg:                                    3.85
         max:                                   38.45
         95th percentile:                        5.18
         sum:                               479821.02

Threads fairness:
    events (avg/stddev):           15587.8750/161.55
    execution time (avg/stddev):   59.9776/0.00

レプリケーションの設定

マスターサーバの/etc/my.confに以下を追加

[mariadb]
log-bin
server_id=1
log-basename=master1
binlog-format=mixed

スレーブサーバの/etc/my.confに以下を追加

[mysqld]
server-id=2
read_only

マスターサーバ上にレプリケーション用ユーザを作る

CREATE USER 'replication_user'@'%' IDENTIFIED BY 'Sf4t9gfghM';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';

replication_user’@’%’の%の部分はIPを指定できるのならしましょう

DBをDUMP

mysqldump --all-databases --single-transaction --quick --lock-tables=false --master-data=2 > /tmp/full-backup-$(date +%F).sql -u root -p

スレーブサーバーでDUMPファイルを反映

mysql -u root -p < $DUMPED.sql

ダンプしたマスターDBの状態情報を調べる

 grep 'CHANGE MASTER TO MASTER_LOG_FILE=' /tmp/$DUMP.sql 

以下のような情報が出てくる

-- CHANGE MASTER TO MASTER_LOG_FILE='master1-bin.000001', MASTER_LOG_POS=2081809;

MASTER_LOG_FILEとMASTER_LOG_POSの情報をスレーブサーバー設定で使う。

スレーブサーバーで取り込んだマスターDBの情報を反映

CHANGE MASTER TO
  MASTER_HOST='...',
  MASTER_USER='replication_user',
  MASTER_PASSWORD='...',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master....',
  MASTER_LOG_POS=...,
  MASTER_CONNECT_RETRY=10;

スレーブサーバー上でスレーブサーバーとして開始

start slave;

状態を確認

show slave status \G;

マスターで何か変更をしてみて、slaveのテーブルにそのデータが反映されている事を確認して終了

スレーブサーバのマスターへの昇格

マスターにアクセスできるのならマスターをREAD ONLYに一旦変える

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

スレーブサーバで以下を打つ

show slave status \G;

STOP SLAVE IO_THREAD;
STOP SLAVE SQL_THREAD;
RESET MASTER;

my.confを編集

[mysqld]
server-id = 2
log-bin
# read_only

mariadbをリスタート

systemctl restart mariadb;

MariaDBでの開発


MariaDB(MySQL)の基本的なコマンド

一番最初のデータベースヘの接続

mysql --user=... --database=... --host=... -p

データベースの作成

CREATE DATABASE データベース名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

ユーザーの作成と指定データベースへの権限付与

GRANT ALL ON $DABASENAME.* TO '$DBUSER'@'localhost' identified by "$DBUSERPASSWORD";
GRANT ALL ON $DABASENAME.* TO '$DBUSER'@'10.%' identified by "$DBUSERPASSWORD";
GRANT ALL ON $DABASENAME.* TO '$DBUSER'@'172.%' identified by "$DBUSERPASSWORD";
GRANT ALL ON $DABASENAME.* TO '$DBUSER'@'192.%' identified by "$DBUSERPASSWORD";

データベースのリスト

SHOW DATABASES

使用データベースの切り替え

use データベース名

データベースのテーブルのリスト

SHOW TABLES

テーブルの作りの表示

SHOW CREATE TABLE テーブル名

サーバーで現在実行されているSQLの確認

SHOW PROCESSLIST

実行時間が長いSQLの実行の停止

kill プロセスID

サーバーとの接続の終了

exit

データの型

公式の説明が英語なので英語のままで
BIGINT / Large integer
BINARY / Fixed-length binary byte string.
BIT / Bit field type
BLOB / Binary large object up to 65,535 bytes.
BOOLEAN / Synonym for TINYINT(1)
CHAR / Fixed-length string.
CHAR BYTE / Alias for BINARY.
DATE / The date type YYYY-MM-DD
DATETIME / Date and time combination displayed as YYYY-MM-DD HH:MM:SS.
DEC, NUMERIC, FIXED / Synonyms for DECIMAL
DECIMAL / A packed “exact” fixed-point number.
DOUBLE / Normal-size (double-precision) floating-point number
DOUBLE PRECISION / REAL and DOUBLE PRECISION are synonyms for DOUBLE.
ENUM / Enumeration, or string object that can have one value chosen from a list of values.
FLOAT / Single-precision floating-point number
INT / Integer from -2147483648 to 2147483647 signed
INTEGER / Synonym for INT
JSON Data Type / Compatibility data type that is an alias for LONGTEXT.
LONGBLOB / Long BLOB holding up to 4GB.
LONGTEXT / A TEXT column with a maximum length of 4,294,967,295 characters.
MEDIUMBLOB / Medium binary large object up to 16,777,215 bytes.
MEDIUMINT / Medium integer from -8388608 to 8388607 signed
MEDIUMTEXT / A TEXT column with a maximum length of 16,777,215 characters.
ROW / Data type for stored procedure variables.
SMALLINT / Small integer from -32768 to 32767 signed
TEXT / A TEXT column with a maximum length of 65,535 characters.
TIME / Time format HH:MM:SS.ssssss
TIMESTAMP / YYYY-MM-DD HH:MM:SS
TINYBLOB / Tiny binary large object up to 255 bytes.
TINYINT / Tiny integer, -128 to 127 signed
TINYTEXT / A TEXT column with a maximum length of 255 characters.
VARBINARY / Variable-length binary byte string.
VARCHAR / Variable-length string.
YEAR / Data Type A four-digit year


VARCHARとTEXTが使うディスク容量についての考え方

VARCHARは255迄は長さ+1byteを使うだけだが256以上は長さ+2byteを使う。
TEXTは長さ+2byteを使うのと、インデックスを張れないという点で異なる。
また、VARCHARは初期値を決めれるが、TEXTは初期値を定める事は出来ない。
その辺りを考慮して型を決めていく。

VPS関連最新ニュース
2026/01/30 ConoHa[解説]のv3環境とConoHa for Gameが約30分ダウン(インシデント詳細)。SLA未達による10%料金補償の対象に。翌月末までに申請必要
2026/01/04 シンVPS[解説]の大容量メモリプラン対応 [更に読む]

申込数順上位VPS:おすすめ特徴&注意点1行まとめ ※毎月月初に申し込み数ベースで順位を更新
[日本発VPS] 安い&為替影響なしが最大の特徴
VPS名強み弱み
1Xserver VPS[解説]メモリ6,12,24GBで最安。Disk速度速いコンパネ共同管理非対応&LAN接続無
2WebArena Indigo[解説]メモリ1,16,32GBで最安、4GB以上高速回線。コンパネ共同管理対応CPU性能低め&LAN接続無
3ConoHa[解説]クラウド機能充実&SLA99.99%&下位プランへ変更可コンパネ共同管理非対応&上位プランで容量増えず
4KAGOYA[解説]メモリ2(年割),3,4(年割),8GB最安。性能コスパ高い&LAN接続/LB利用可コンパネ共同管理非対応
5シンVPS[解説]大容量メモリプランにてメモリ単価最安になる場合有り最低契約期間が3ヶ月

[海外発VPS] 日本語サポート無し、為替影響常時受ける。但し全てコンパネ複数人共同管理対応でクラウド機能高い
VPS名強み弱み
1Vultr[解説/無料券]国内DC複数有。高性能物理完全占有VPS初期費0で提供。毎月2TB無料転送枠有。SLA100%
2DigitalOcean[解説/無料券]クラウド機能最充実海外最大手VPS。LBで無料SSL自動更新可。無料DDoS防御提供海外DCのみ
3Linode[解説/無料券]国内DC複数有。クラウド機能充実。無料でDDoS防御。Akamaiと統合で機能向上
4UpCloud[解説/無料券]LBで無料SSL自動更新可。24時間チャットサポート嬉しい海外DCのみ&ユーロ建て
5AWS Lightsail[解説]クラウドの基本機能揃うCPU Credit使い切ると性能落ち