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;
結果
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
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は初期値を定める事は出来ない。
その辺りを考慮して型を決めていく。
2026/01/30 ConoHa[解説]のv3環境とConoHa for Gameが約30分ダウン(インシデント詳細)。SLA未達による10%料金補償の対象に。翌月末までに申請必要
2026/01/04 シンVPS[解説]の大容量メモリプラン対応 [更に読む]
[日本発VPS] 安い&為替影響なしが最大の特徴
| 順 | VPS名 | 強み | 弱み |
|---|---|---|---|
| 1 | Xserver VPS[解説] | メモリ6,12,24GBで最安。Disk速度速い | コンパネ共同管理非対応&LAN接続無 |
| 2 | WebArena Indigo[解説] | メモリ1,16,32GBで最安、4GB以上高速回線。コンパネ共同管理対応 | CPU性能低め&LAN接続無 |
| 3 | ConoHa[解説] | クラウド機能充実&SLA99.99%&下位プランへ変更可 | コンパネ共同管理非対応&上位プランで容量増えず |
| 4 | KAGOYA[解説] | メモリ2(年割),3,4(年割),8GB最安。性能コスパ高い&LAN接続/LB利用可 | コンパネ共同管理非対応 |
| 5 | シンVPS[解説] | 大容量メモリプランにてメモリ単価最安になる場合有り | 最低契約期間が3ヶ月 |
[海外発VPS] 日本語サポート無し、為替影響常時受ける。但し全てコンパネ複数人共同管理対応でクラウド機能高い
| 順 | VPS名 | 強み | 弱み |
|---|---|---|---|
| 1 | Vultr[解説/無料券] | 国内DC複数有。高性能物理完全占有VPS初期費0で提供。毎月2TB無料転送枠有。SLA100% | |
| 2 | DigitalOcean[解説/無料券] | クラウド機能最充実海外最大手VPS。LBで無料SSL自動更新可。無料DDoS防御提供 | 海外DCのみ |
| 3 | Linode[解説/無料券] | 国内DC複数有。クラウド機能充実。無料でDDoS防御。Akamaiと統合で機能向上 | |
| 4 | UpCloud[解説/無料券] | LBで無料SSL自動更新可。24時間チャットサポート嬉しい | 海外DCのみ&ユーロ建て |
| 5 | AWS Lightsail[解説] | クラウドの基本機能揃う | CPU Credit使い切ると性能落ち |