Debian 11 (bullseye) - MariaDB 10.5 サーバ構築(ソースビルド)!

Updated:


Debian GNU/Linux 11 (bullseye) 上に DB サーバ MariaDB(10.5系)を構築する方法についての記録です。

以前古いバージョンでの作業時に残していた記録を参考に作業を行い、今回更新した作業記録を貼付する形式の内容となっています。
(当然ながら、興味がなければスルーしてください)

0. 前提条件

  • Debian GNU/Linux 11.0.0 (bullseye; 64bit) での作業を想定。
  • 接続元のマシンも Debian GNU/Linux 11 (bullseye; 64bit) を想定。
  • インストールする MariaDB は、当記事執筆時点で 10.5 系最新の 10.5.12 とする。
    (当記事執筆時点、 10.6 系は全文検索エンジン Mroonga 最新版が未対応)
  • MariaDB とは言っても中身は MySQL が元になっているので、各所で mysql のキーワードが出現する。
  • データディレクトリは /var/lib/mysql ディレクトリ配下とする。
  • root ユーザでの作業を想定。

1. sources.list ファイルの編集

今回は MariaDB をソースをビルドしてインストールするので、本来は sources.list の編集は必要ないが、 MariaDB のビルドに依存するパッケージをインストールすために使用するので、編集する。
/etc/apt/sources.list に直接記述してもよいが、今回は /etc/apt/sources.list.d/mariadb.list に新規作成する。
記述する内容は「こちら(Setting up MariaDB Repositories)」で確認可能。(ミラーサイトは隣国を適当に選択する)

File: /etc/apt/sources.list.d/mariadb.list

# MariaDB 10.5 repository list - created 2021-09-08 00:56 UTC
# http://downloads.mariadb.org/mariadb/repositories/
deb [arch=amd64,arm64,ppc64el] https://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/repo/10.5/debian bullseye main
deb-src https://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/repo/10.5/debian bullseye main

sources.list を使用しない方法等については「こちら」を参照。

2. パッケージリストの更新

sources.list を編集したので、パッケージリストを更新する。

# apt -y update
      :
===< 中略 >===
      :

Err:5 https://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/repo/10.5/debian bullseye InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F1656F24C74CD1D8
Reading package lists... Done
W: GPG error: https://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/repo/10.5/debian bullseye InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F1656F24C74CD1D8
E: The repository 'https://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/repo/10.5/debian bullseye InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

上記のように、 GPG 公開鍵に関するエラーが出力される場合は、以下のようにした後に再試行する。

# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F1656F24C74CD1D8
  • これまで GPG 公開鍵の登録に apt-key コマンドを使用してきたが、このコマンドは近い将来廃止される予定。(Debian は 12 bookworm で廃止)
    廃止後は GnuPG を使用する方法となるが、今から GnuPG を使用する方法で登録することも可能。

3. 依存パッケージのインストール

# apt install -y build-essential bison
# apt build-dep mariadb-server

または、「こちら」を参考に、ビルドに必要なパッケージをインストールしてもよい。(但し、インストール漏れに注意)

4. sources.list ファイルの削除

1 で作成した MariaDB 用 sources.list ファイル /etc/apt/sources.list.d/mariadb.list はもう不要なので削除しておく。(/etc/apt/sources.list を直接編集したのなら、 MariaDB に関する記述を削除する)

# rm -f /etc/apt/sources.list.d/mariadb.list

5. アーカイブの取得

こちら」から MariaDB の最新 Stable 版をダウンロードし、適当なディレクトリに配置する。(今回、当方はダウンロードした mariadb-10.5.12.tar.gz/usr/local/src ディレクトリ配下に配置した)

そして、展開する。

# cd /usr/local/src
# tar xvf mariadb-10.5.12.tar.gz

6. ソースのビルド&インストール

先ほど展開したディレクトリと同じ階層にビルド用のディレクトリを作成し、そのディレクトリ内で cmake する。(以下の各種ビルドオプションは当方の例)

# mkdir build-mariadb
# cd build-mariadb
# cmake ../mariadb-10.5.12 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
 -DMYSQL_DATADIR=/var/lib/mysql \
 -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \
 -DENABLED_LOCAL_INFILE=1 \
 -DDEFAULT_CHARSET=utf8_mb4 \
 -DDEFAULT_COLLATION=utf8_general_ci \
 -DWITH_EXTRA_CHARSETS=all \
 -DWITH_INNOBASE_STORAGE_ENGINE=1

そして、 make 後、インストールする。

# make -j$(grep '^processor' /proc/cpuinfo | wc -l)
# make install
  • make コマンドの -j はなくても問題ない。(並列ビルド(高速化)しないなら)

以下のようなエラーで make が中断した場合、それは swap メモリが不足しているからのようだ。 swap を増やした後、 make clean してから make し直してみる。(どれくらい swap を増やせべよいのかは不明)
(参考「Linux - スワップ領域の作成! - mk-mode BLOG」)
※もしくは、物理メモリを増設することも検討。(今さら無理なので、今後、サーバ構築する際にでも)

[ 61%] Building C object storage/mroonga/vendor/groonga/lib/CMakeFiles/libgroonga.dir/expr.c.o
cc: fatal error: Killed signal terminated program cc1
compilation terminated.
make[2]: *** [storage/mroonga/vendor/groonga/lib/CMakeFiles/libgroonga.dir/build.make:251: storage/mroonga/vendor/groonga/lib/CMakeFiles/libgroonga.dir/expr.c.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:7037: storage/mroonga/vendor/groonga/lib/CMakeFiles/libgroonga.dir/all] Error 2
make: *** [Makefile:182: all] Error 2

7. ユーザ・グループ作成

MySQL 用のユーザとグループを作成する。

# groupadd mysql
# useradd -r -g mysql mysql

8. データディレクトリ作成

データディレクトリが無ければ作成し、所有者・グループを設定しておく。

# mkdir /var/lib/mysql
# chown -R mysql. /var/lib/mysql

9. ログディレクトリ作成

ログ用ディレクトリを作成し、所有者・グループを設定しておく。

# mkdir /var/log/mysql
# chown -R mysql. /var/log/mysql/

10. ソケット・PIDディレクトリ作成

ソケット・プロセスID用ディレクトリの所有者・グループを設定する。

# mkdir /var/run/mysqld
# chown -R mysql. /var/run/mysqld

11. 設定ファイルの編集

/etc/mysql ディレクトリ内の設定ファイルを適宜編集する。
もしくは、 /etc/my.cnf を別途作成する。

【注意】
/etc/my.cnf より後に /etc/mysql/my.cnf が読み込まれる(/etc/my.cnf の内容よりも /etc/mysql/my.cnf の内容が優先される)ので、 /etc/my.cnf のみを使用したければ /etc/mysql/my.cnf を削除するか、(拡張子が .cnf で終わらないよう)リネームするなどする。
/etc/my.cnf を作成せず、最初から /etc/mysql/my.cnf を編集する方法でも良いだろう。

12. 初期 DB の生成

# cd /usr/local/mysql
# scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql --defaults-file=/etc/my.cnf

13. 起動スクリプト(SysV, SystemD)の準備

SysV(init スクリプト)でも、 SystemD(systemctl) でも起動できるようにしている。
mariadb の他、 mysqld でも起動できるようシンボリックリンクを張っている。

# cp support-files/mysql.server /etc/init.d/mysqld
# chmod +x /etc/init.d/mysqld
# ln -fns /etc/init.d/{mysqld,mariadb}

# cp support-files/systemd/mariadb.service /lib/systemd/system/
# ln -fns /lib/systemd/system/{mariadb,mysqld}.service
# systemctl daemon-reload

14. PID ディレクトリの自動生成

前項の方法で起動スクリプトを用意した場合、 /var/run(/run) 配下のディレクトリは自動で生成してくれないので、自動で生成するよう、 /usr/lib/tmpfiles.d/var.conf に以下の1行を追加する。(/var/run(/run) ディレクトリは tmpfs を使用しているため、 OS 再起動後には消滅する。通常は、起動スクリプト内で生成するよう設定されていることが多いが、今回使用したスクリプト内では設定されていなかった。)
(当方ブログ過去記事「Linux - マシン起動時にディレクトリ・ファイルを自動作成!」も参照)

File: /usr/lib/tmpfiles.d/var.conf

d /var/run/mysqld 0755 mysql mysql -

もしくは、 mysqld_save コマンド実行直前に以下のような記述を追加してもよいだろう。(当方、未確認)

File: /etc/init.d/mysqld

test -e /var/run/mysqld || install -m 755 -o mysql -g root -d /var/run/mysqld

15. 環境変数 PATH の設定

mysql コマンドへのパスを設定するために /etc/profile の最終行に以下の記述を追加する。

File: /etc/profile

PATH=/usr/local/mysql/bin:$PATH
export PATH

そして、即時有効化。(マシン再起動でもよい)

# source /etc/profile

16. 起動・再起動・ステータス確認・停止のテスト

起動・再起動・ステータス確認・停止ができるか確認する。(SystemD)

# systemctl start mariadb
# systemctl restart mariadb
# systemctl status mariadb
# systemctl stop mariadb

また、 init スクリプトでも起動・再起動・ステータス確認・停止ができるはず。

# /etc/init.d/mysqld start
# /etc/init.d/mysqld restart
# /etc/init.d/mysqld status
# /etc/init.d/mysqld stop

もちろん、 service コマンドでも起動・再起動・ステータス確認・停止ができるはず。

17. セキュリティ設定

MariaDB サーバが起動していることを確認し、root のバスワード設定、テストDB削除等を行う。 (Unix socket authentication では n 応答。 root のパスワードを設定。後はデフォルト(エンター押下)。但し、 root によるリモート接続を行いたければ Disallow root login remotely?n 応答)

# cd /usr/local/mysql/bin
# ./mysql_secure_installation

18. 動作確認

MariaDB サーバにログインしてみる。

# mariadb -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.5.12-MariaDB Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

root@localhost:(none) 16:24:29> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.096 sec)

root@localhost:(none) 16:24:34> exit
Bye
  • mariadb コマンドは mysql でも OK.
  • 上記の(やや複雑な)プロンプトは当方の設定によるもの。

19. 自動起動の設定

OS 起動時に自動で起動するように設定するには次のようにする。

# systemctl is-enabled mariadb
disabled

# systemctl enable mariadb
Synchronizing state of mariadb.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable mariadb
insserv: script mysqld: service mysql already provided!
insserv: script mysqld: service mysql already provided!
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /lib/systemd/system/mariadb.service.

# systemctl is-enabled mariadb
enabled

20. ファイアウォール(ufw)の設定

リモートで MariaDB サーバにアクセスする場合(GUI ツールを使用する場合等)は、TCP ポート 3306 を開放する必要がある。

# ufw allow 3306/tcp
Rule added

# ufw status
    :
3306/tcp                   ALLOW       Anywhere
    :

以上。





 

Sponsored Link

 

Comments