Linux
 Computer >> コンピューター >  >> システム >> Linux

MariaDB入門:CentOS 7へのインストール手順とパフォーマンス最適化の完全ガイド

本記事では、Linux CentOS 7環境におけるデータベースサーバー「MariaDB」のインストール方法、基本設定、そしてパフォーマンス最適化の手順を詳しく解説します。記事の後半では実際の設定ファイルのサンプルも紹介するので、ご自身のDBサーバーに最適なパラメータを選ぶ際の参考にしてください。

※なお、CentOS 7はすでにサポート終了(EOL)を迎えていますが、本記事の手順はRHEL系の他のOSにも幅広く応用できます。

CentOSへのMariaDBのインストール

近年のCentOS 7では、標準ベースリポジトリにMariaDBが追加されています。ただし、リポジトリに収録されているバージョンは5.5とやや古く、パフォーマンス面での課題があり、InnoDBでの全文検索機能にも対応していません。最新版のMariaDBを導入するには、まずmariadb.orgの公式リポジトリを追加する必要があります。

はじめに、nanoエディタをyumでインストールします。

yum install nano -y

次に、リポジトリ設定ファイルを作成して編集します。

nano /etc/yum.repos.d/mariadb.repo

以下の内容を追記してください。

[mariadb]
name = MariaDB
baseurl = https://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

mariadb.repoファイルを保存したら、MariaDBサーバーとクライアントをインストールします。

yum --disablerepo=AppStream install MariaDB-server MariaDB-client -y

インストールが完了したら、mariadbサービスを起動し、自動起動を有効にします。

systemctl start mariadb
systemctl enable mariadb

サービスの状態を確認しましょう。

systemctl status mariadb

mariadbサービスが「active (running)」と表示されていれば、設定作業に進めます。

MariaDBサーバーのセキュリティ設定

MariaDBサーバーのインストールと起動が完了したら、セキュリティ設定に移りましょう。組み込みのスクリプトを実行します。

/usr/bin/mysql_secure_installation

最初にrootパスワードの入力を求められますが、初期インストール直後はパスワードが未設定のため、そのままENTERキーを押します。続くステップで複雑なパスワードを設定しましょう。その後はシナリオが完了するまでENTERキーを押して進めるだけでOKです。これにより、匿名ユーザーやrootのリモートログイン、テスト用テーブルが削除され、権限情報が更新されます。

MariaDBサーバーへリモート接続できるようにするには、iptablesを使ってLinuxファイアウォールのルールを追加する必要があります。

iptables -I INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables-save > /etc/sysconfig/iptables

必要に応じて、リモートのMariaDBデータベースへの送信接続も許可できます。

iptables -I OUTPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

MariaDBの接続テスト

MariaDBが正しくインストールされたことを確認しましょう。

組み込みツールのmysqladminを使ってDBサーバーに接続します。

mysqladmin version

コマンドを実行すると、次のような出力が返されます。

mysqladmin Ver 9.1 Distrib 10.4.7-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Server version 10.4.7-MariaDB
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/lib/mysql/mysql.sock
Uptime: 59 min 35 sec
Threads: 10 Questions: 24 Slow queries: 0 Opens: 28 Flush tables: 1 Open tab

これはMariaDBが正常にインストールされ、データベースが稼働中であることを示しています。

SQLコマンドを対話的に実行したい場合は、MariaDBサーバーのコンソールに接続できます。

mysql -u root -p

MariaDBの設定ファイル(my.cnf)

筆者は通常、MariaDBのインストール後に、ほとんどのサーバーで問題なく動作する標準的な設定を/etc/my.cnfに追記しています。my.cnfの中身を一度空にして、以下の内容を記述してください。

[mysqld]
local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
max_allowed_packet = 128M
sql_mode = ""
log-error = /var/log/mysql-error.log
# Cache parameters
query_cache_size = 16M
table_open_cache = 4096
thread_cache_size = 16
key_buffer_size = 8M
thread_stack = 256K
join_buffer_size = 2M
sort_buffer_size = 2M
# Parameters for temporary tables
tmpdir = /tmp
max_heap_table_size = 32M
tmp_table_size = 32M
# InnoDB parameters
innodb_file_per_table
innodb_buffer_pool_size = 32M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_use_native_aio = 0
transaction-isolation = READ-COMMITTED
character-set-server = utf8
collation-server = utf8_unicode_ci
init-connect = "SET NAMES utf8 COLLATE utf8_unicode_ci"
skip-name-resolve
[mysqldump]
quick
quote-names
max_allowed_packet = 128M
default-character-set = utf8
[mysql]
[isamchk]
key_buffer = 16M
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

ここで、my.cnfの主要なパラメータについて詳しく見ていきましょう。

  • datadir:データベースファイルを格納するディレクトリです。
  • tmpdir:一時ファイルを保存するディレクトリです。
  • skip-name-resolve:DNSによる名前解決を無効化します。
  • max_allowed_packet:許容される最大パケットサイズです。BLOB型フィールドを使用している場合、この値は最大フィールドサイズ未満にできません。
  • max_connections:同時に開ける最大接続数です。何個のクライアントがMariaDBサーバーに同時接続できるかを決定します。
  • # Cache parametersセクション:クエリキャッシュ関連の設定です。値を大きくしすぎるとDBサーバーが多くのリソースを消費するため、過度に高い値は推奨されません。
  • # InnoDB parametersセクション:InnoDBテーブルに関わる設定です。
  • innodb_buffer_pool_size:データとインデックス用のキャッシュバッファです。サーバー上に1〜2プロジェクトしかない場合は、利用可能RAMの70〜80%程度に設定するとよいでしょう。
  • innodb_flush_method:LinuxではO_DIRECTを指定します。OSレベルのキャッシュが無効になります。
  • innodb_flush_log_at_trx_commit:InnoDBテーブルの書き込み速度に影響する重要なパラメータです。0に設定するとパフォーマンスは向上しますが、データ損失のリスクが高まります。筆者は2を推奨しています。顕著な性能向上は期待できない一方で、安全性を優先すべきだからです。

MariaDBのパフォーマンス最適化とチューニング

強調しておきたいのは、筆者の設定ファイルをそのままコピーする必要はないという点です。サーバーやプロジェクトごとに最適なパラメータは異なります。MariaDBの設定を自動的にチェックし、最適化の提案をしてくれるスクリプトの活用をおすすめします。

MariaDBのパラメータを最適化するには、Tuning-Primer.shスクリプトが便利です。まず、必要な追加ツールをインストールします。

yum install bc net-tools -y

最適化スクリプトをダウンロードします。

wget https://launchpadlibrarian.net/78745738/tuning-primer.sh

.shファイルに実行権限を付与します。

chmod +x tuning-primer.sh

スクリプトを実行します。

./tuning-primer.sh

実行後、スクリプトは知っておくべき有用な情報を表示してくれます。特に重要な項目は赤色で強調表示され、修正が推奨される箇所を示しています。

たとえば、スクリプトを実行したところ、設定した接続数に対して実際の接続数がはるかに少ないことが判明しました。

MariaDB入門:CentOS 7へのインストール手順とパフォーマンス最適化の完全ガイド

このパラメータはmy.cnfファイルでもコンソールからでも変更可能です。より低い値(10)に設定したところ、スクリプトもそれを承認しました。

MariaDB入門:CentOS 7へのインストール手順とパフォーマンス最適化の完全ガイド

こうしたチェックを繰り返すことで、MariaDBサーバーのパフォーマンスを理想的な状態に仕上げることができます。

なお、DBサーバーは最低48時間以上連続稼働させてからチューニングすることをおすすめします。十分な稼働時間を確保したほうが統計情報が正確になり、的確な調整が可能になるからです。

スロークエリログを有効化するセクションを追加すると、プロジェクトのパフォーマンス分析に役立ちます。mysqldセクションに以下を追記してください。

slow_query_log = 1 # スロークエリログを有効化
long_query_time = 5 # 閾値となる時間(秒)を設定
slow_query_log_file = /var/log/slow-query.log # ログファイル名と保存先パス
log_queries_not_using_indexes # インデックスを使用しないクエリをログに記録するかどうか

また、MariaDBのエラーログおよびスロークエリログ用のファイルを作成する必要があります。

touch /var/log/mysql-error.log
touch /var/log/slow-query.log

DBサービスを再起動します。

systemctl restart mariadb

/var/log/slow-query.log を開けばスロークエリログを確認でき、リアルタイムで監視することも可能です。

tail -f /var/log/slow-query.log

これにより、プロジェクトがDBに発行しているクエリを分析し、監査することができます。

DB設定を変更したら、必ず設定にエラーがないか確認してください。my.cnfを編集した後は、次のコマンドで設定をチェックします。

systemctl status mariadb -l

MariaDBの基本的なシェルコマンド

管理者がMariaDBコンソールで頻繁に使用する主なCLIコマンドを紹介します。

ローカルからMariaDBコンソールにログインするには、次のコマンドを実行します。

mysql -u root -p

リモートからMariaDBサーバーに接続するには:

mysql -u root -p -h 192.168.1.20

覚えておくと便利なMariaDB(MySQL)コマンド一覧:

  • create database db1; — db1という名前のデータベースを作成
  • show databases; — サーバー上のデータベース一覧を表示
  • use db1; — db1というデータベースに切り替え
  • show tables; — 現在のデータベース内の全テーブルを一覧表示
  • create user 'project'@'localhost' identified by '$sup#erP@ss1'; — ユーザーprojectを作成し、パスワードを$sup#erP@ss1に設定
  • grant all privileges on database_name.* to project@'localhost'; — ユーザーprojectに全権限を付与
  • flush privileges; — 権限情報を更新
  • show processlist; — アクティブなDB接続を表示。次のコマンドでも確認可能:
    show status where `variable_name` = 'Threads_connected';

mysqlコンソールでは、変数の確認や変更もできます。たとえば:

SHOW VARIABLES LIKE 'max_error_count';

MariaDB入門:CentOS 7へのインストール手順とパフォーマンス最適化の完全ガイド

変更するには:

SET max_error_count=256;

MariaDB入門:CentOS 7へのインストール手順とパフォーマンス最適化の完全ガイド

まとめ

最後にひとつ。DBサーバーを構成する際は、そのサーバー上で稼働させるプロジェクトの規模を必ず考慮してください。小規模プロジェクト向けの設定は、大規模プロジェクトには決して向いていません。試行錯誤を重ねながら、常にログを確認する習慣をつけましょう。次回の記事では、MariaDBデータベースサーバー間のレプリケーションを活用して高可用性を実現し、アプリケーションのパフォーマンスを向上させる方法を紹介します。

  1. Meltdown・Spectreパッチを6台の実機で検証 ― 性能への影響はあるのか?

    先日、アンチウイルスソフトをインストールしていない環境でもWindows向け2018年1月のMeltdown(メルトダウン)パッチを導入する方法を紹介しました。Microsoftは互換性のない一部のアンチウイルス製品を一時的にブラックリスト化し、その結果として「アンチウイルスを一切入れていないユーザー」まで更新対象から外れてしまったのです。この点についてMicrosoftは何も説明してくれませんでした。「羊の群れ」とは違う発想をすることなど、想定外なのでしょう。さて、パッチのインストールが完了したので、次に確認すべきは性能と安定性です。私は合計6台のシステムでテストを行いました。Microso

  2. Windows 11を高速化する7つの効果的な方法|動作が重い・遅いと感じたら試したいパフォーマンス改善術

    MicrosoftがリリースしたWindows 11は、刷新されたデザインや機能向上など、多くの新要素を備えたOSです。従来のWindows 10と比べて高速かつ最適化されているものの、「Windows 11にしたらパソコンが遅くなった」と感じるユーザーも少なくありません。特にスペックの低い古いハードウェアでは、動作のもっさり感やラグを経験しやすい傾向があります。本記事では、Windows 11を快適に高速化するための効果的な対処法をわかりやすく解説します。 Windows 11が遅くなる原因とは? Windows 11のパフォーマンス低下には、さまざまな要因が考えられます。主な原因としては