MariaDBのインストール【AlmaLinux 9】
MariaDBをインストールします。
1. MariaDBリポジトリの追加
MariaDB Foundationにリポジトリのジェネレータツールがあるので、それを利用します。
AlmaLinux固有のものはないので、ここでは、Redhat EL 9用のものを利用します。
なお、最終行に「enabled=0」を追加しておきます。
# vi /etc/yum.repos.d/MariaDB.repo
# MariaDB 11.2 RedHatEnterpriseLinux repository list - created 2024-02-06 04:25 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
# rpm.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
# baseurl = https://rpm.mariadb.org/11.2/rhel/$releasever/$basearch
baseurl = https://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/yum/11.2/rhel/$releasever/$basearch
# gpgkey = https://rpm.mariadb.org/RPM-GPG-KEY-MariaDB
gpgkey = https://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1
enabled = 0
2. インストール
MariaDBリポジトリからインストールします。
# dnf --enablerepo=mariadb install MariaDB-server MariaDB-client
3. 初期設定
(1) 設定ファイルの編集
※設定ひな型ファイルは、10.3.2以降なくなりました。
公式では、以下のように発表されています。
This is intentional. We set generally useful defaults in the server. Configuration files are for the end user to modify the defaults, not for us to set them.(これは意図的なものです。 一般的に便利なデフォルトをサーバーに設定します。 構成ファイルは、エンドユーザーがデフォルトを変更するためのものであり、設定するためのものではありません。)
# cp /etc/my.cnf.d/server.cnf{,.default}
# vi /etc/my.cnf.d/server.cnf
[mysqld]
innodb_data_home_dir = /var/lib/mysql/
innodb_log_group_home_dir = /var/lib/mysql/
#--------------------------------------------
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# InnoDBのデータとインデックスをキャッシュするバッファのサイズ(推奨は物理メモリの7割位)
#innodb_buffer_pool_size = 2.8GB
innodb_buffer_pool_size = 3006477107
# サーバおよびクライアント間で転送可能なパケットのサイズを設定
max_allowed_packet = 128MB
# キャッシュするクエリ結果の最大サイズ(1クエリの最大サイズ)
query_cache_limit = 128MB
# クエリキャッシュで使用するメモリサイズ
query_cache_size = 1024MB
# クエリキャッシュのタイプ(0:off, 1:ON SELECT SQL_NO_CACHE以外, 2:DEMAND SELECT SQL_CACHEのみ)
# 1=クエリに SELECT SQL_NO_CACHE と書いたクエリを除いてキャッシュ
query_cache_type = 1
# ソートを実行する各セッションは、この量のメモリを持つバッファを設定
sort_buffer_size = 20MB
# SQLモード(旧バージョン互換)
sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
#--------------------------------------------
expire_logs_days = 30
max_allowed_packet=128M
# Error log
log_error="mysqld.log"
log_warnings=1
# Query log
general_log = 0
general_log_file="sql.log"
# Slow Query log
slow_query_log = 0
slow_query_log_file="slow_query.log"
log_queries_not_using_indexes
log_slow_admin_statements
long_query_time=5
[client]
default-character-set=utf8mb4
general_log:「0」:ログを出力しない、「1」:ログを出力する
slow_query_log:「0」:ログを出力しない、「1」:ログを出力する
※「Query log」や「Slow Query log」を有効にすると、ファイルサイズがかなり大きくなる可能性がありますので、必要時のみ有効にして下さい。
■collation-server
utf8mb4_bin |
英字の大文字小文字を含めて、すべて区別。 |
utf8mb4_general_ci |
英字の大文字小文字は区別しない。他は全て区別。 |
utf8mb4_unicode_ci |
大文字小文字/全角半角を区別しない。 |
(2) MariaDBの起動
設定が完了したら、MariaDBのサービスを起動します。
# systemctl start mariadb.service
(3) タイムゾーンの変更
タイムゾーンを「Asia/Tokyo」にします。
[1] MariaDBの「mysql.time_zone」テーブルの調査
MariaDBにログインして「mysql」の「time_zone」テーブルにデータが入っているかどうかをチェックします。
※空の場合は「Asia/Tokyo」を設定するとエラーが出ます。
SQL文を実行します。
MariaDB [none]> use mysql;
MariaDB [mysql]> SELECT * FROM time_zone;
データが表示されれば登録済みです。
「Empty set」と表示されればデータが空の状態です。
MariaDB [mysql]> SELECT * FROM time_zone;
Empty set (0.001 sec)
MariaDBからログオフします。
[2] MariaDBの「mysql.time_zone」テーブルの調査
既にデータが登録されている場合はこの作業は必要ありません。
データが空の場合のみ行います。
zoneinfoからタイムゾーンを変換して「mysql」テーブルに登録します。
# /usr/bin/mariadb-tzinfo-to-sql /usr/share/zoneinfo | mariadb -u root mysql
[3] MariaDBの「mysql.time_zone」テーブルの調査
MariaDBにログインして「mysql」の「time_zone」テーブルにデータが入っているかどうかをチェックします。
MariaDB [none]> use mysql;
MariaDB [mysql]> SELECT * FROM time_zone;
データが表示されればOKです。
[4] 設定ファイルの編集
「/etc/my.cnf.d/server.cnf」にタイムゾーンを追加します。
[mysqld]
default-time-zone = 'Asia/Tokyo'
MariaDBを再起動します。
# systemctl restart mariadb.service
[5] タイムゾーンの確認
MariaDBにログインしてタイムゾーンを確認します。
MariaDB [(none)]> SHOW VARIABLES LIKE '%time_zone%';
+------------------+------------+
| Variable_name | Value |
+------------------+------------+
| system_time_zone | JST |
| time_zone | Asia/Tokyo |
+------------------+------------+
「time_zone」が「Asia/Tokyo」になっていればOKです。
(4) 自動起動設定
サーバを再起動した場合に自動的にサービスが起動するようにします。
# systemctl enable mariadb.service
(5) mariadb-secure-installationの実行
# /usr/bin/mariadb-secure-installation
※10.5までは「mysql_secure_installation」というコマンドでした。
■現在のrootパスワードの入力
現在のrootのパスワードを入力します。
Enter current password for root (enter for none):
インストール直後は空白なので、そのまま[Enter]キーを押します。
■unix_socket認証への切り替え
パスワード認証からUnix Socket認証に切り替えるかどうかの質問です。
Switch to unix_socket authentication [Y/n]
従来通りのパスワード認証にするので、「n」を入力します。
■rootパスワードの設定
rootパスワードを変更(設定)するかどうかの質問です。
Change the root password? [Y/n]
rootパスワードを設定するので、「Y」と入力します。
New password:
Re-enter new password:
新しいパスワード、および確認のため再度同じパスワードを入力します。
■匿名アカウントの削除
パスワードのない匿名アカウントを削除するかどうかの質問です。
Remove anonymous users? [Y/n]
削除するので「Y」を入力します。
■rootアカウントのリモートログインの不許可
Disallow root login remotely? [Y/n]
rootアカウントのリモートログインは許可しないので、「Y」と入力します。
■testデータベースの削除
どのユーザからでもアクセスできるtestデータベースを削除するかどうかの質問です。
Remove test database and access to it? [Y/n]
削除するので「Y」を入力します。
■特権テーブルのリロード
すぐに特権テーブルをリロードして反映させるかどうかの質問です。
Reload privilege tables now? [Y/n]
すぐにリロードするので「Y」を入力します。
4. ユーザの作成
CREATE USER '(ユーザID)'@'localhost' IDENTIFIED BY '(パスワード)';
GRANT ALL PRIVILEGES ON (DB名).* TO '(ユーザID)'@'localhost';
5. cronでの実行の場合
定期バックアップなどでコマンドラインからMySQLを実行する場合に、パスワードをコマンドラインに含めると警告が発生しますし、またセキュリティ上問題があります。
そこで、設定ファイルを作成して、コマンドラインから読込みます。
(1) 設定ファイルの作成
「/root/.mariadb_config」という設定ファイルを作成します。
# vi /root/.mariadb_config
内容は以下の通りです。
[client]
user = root
password = '(パスワード)'
host = localhost
「root」以外読めないようにします。
# chmod 400 /root/.mariadb_config
以下のようにログインできます。
# /usr/bin/mariadb --defaults-extra-file=/root/.mariadb_config
(2) コマンドラインでの実行
「--defaults-extra-file」オプションで設定ファイルを読み込みます。
【例1:DBがlocalhostの場合】
for DBNAME in `ls -p /var/lib/mysql | grep / | tr -d /`
do
# mariadb-dump
if [ "$DBNAME" = 'performance_schema' ]
then
/usr/bin/mariadb-dump --defaults-extra-file=/root/.mariadb_config --skip-lock-tables --skip-extended-insert $DBNAME > $DBNAME.dump
else
/usr/bin/mariadb-dump --defaults-extra-file=/root/.mariadb_config --events --skip-lock-tables --skip-extended-insert $DBNAME > $DBNAME.dump
fi
done
【例2:DBが外部の場合】
for DBNAME in $(/usr/bin/mariadb-dump --defaults-extra-file=/root/.mariadb_config -e "show databases;" | tr -d "|")
do
if [ "$DBNAME" != 'Database' ]
then
# mariadb-dump
if [ "$DBNAME" = 'performance_schema' ]
then
/usr/bin/mariadb-dump --defaults-extra-file=/root/.mariadb_config --skip-lock-tables --skip-extended-insert $DBNAME > $DBNAME.dump
else
/usr/bin/mariadb-dump --defaults-extra-file=/root/.mariadb_config --events --skip-lock-tables --skip-extended-insert $DBNAME > $DBNAME.dump
fi
fi
done
6.phpMyAdminのインストール
PHPがインストールされていない場合、もしくは必要とされているバージョンより低い場合には動作しませんので、注意して下さい。
(1) phpMyAdminのダウンロード
(2) ファイルの解凍
ダウンロードしたファイルを解凍します。
# tar xvfz phpMyAdmin-x.x.x-all-languages.tar.gz
(3) ファイルの移動(リネーム)
解凍したファイルをディレクトリごと「/usr/local/phpmyadmin」に移動します。
# mv phpMyAdmin-x.x.x-all-languages /usr/local/phpmyadmin
※ディレクトリ名は任意です。
(4) phpMyAdminの設定
「libraries/config.default.php」というファイルが設定ファイルのひな型です。これを親ディレクトリに「config.inc.php」というファイル名でコピーにします。
# cd /usr/local/phpmyadmin
# cp libraries/config.default.php config.inc.php
ファイルを編集します。
暗号化のためのパスフレーズ
$cfg['blowfish_secret'] = '(任意のパスフレーズ)';
非表示データベース名
$cfg['Servers'][$i]['hide_db'] = 'schema|sys|mysql';
※「schema」、「sys」、「mysql」という名前が含まれるデータベースを非表示にする。(部分一致)
テンポラリーディレクトリ名
/*
if (defined('TEMP_DIR')) {
$cfg['TempDir'] = TEMP_DIR;
} else {
$cfg['TempDir'] = './tmp/';
}
*/
$cfg['TempDir'] = '/tmp/';
※「/tmp」に変更しています。
編集が完了したら保存して終了します。
(5) 管理テーブルの作成
管理テーブルを作成すると、phpMyAdminで設定した値が保存できるようになります。
「sql」というディレクトリに移動し、「create_tables.sql」を実行します。
# cd /usr/local/phpmyadmin/sql
# mysql -u root -p < create_tables.sql
Enter password:
※「phpmyadmin」というデータベースが作成されます。
(6) Apacheの設定
「/usr/local/phpmyadmin」を「/pma」というURLでアクセスする場合の設定は、以下のようにします。
# vi /etc/httpd/conf.d/phpmyadmin.conf
Alias /pma "/usr/local/phpmyadmin"
<Directory "/usr/local/phpmyadmin">
SSLRequireSSL
Options FollowSymLinks
AllowOverride All
<RequireAny>
Require ip xxx.xxx.xxx.xxx
</RequireAny>
</Directory>
※「Reauire ip」にアクセス許可を行うIPアドレスを記載します。
Apacheを再起動します。
# systemctl restart httpd.service
以下のようにアクセスします。
https://www.example.jp/pma/
最終更新:2025年04月02日 08:25