MariaDB講座 / UbuntuにMariaDBをインストールして起動する

UbuntuではAPTでMariaDB Serverとクライアントを導入し、サービスの状態と管理者接続を確認します。新規環境ではUnix socket認証が使われることが多く、この手順の管理者接続で必ずroot用のデータベースパスワードが必要になるわけではありません。

OSと既存環境を調べる

Ubuntu 24.04 LTS、systemd、リポジトリへの接続、sudoを使えるOSアカウントを前提とします。端末で現在の状態を確認します。

cat /etc/os-release
command -v mariadb
systemctl status mariadb --no-pager

/etc/os-releaseはOS、command -vはクライアント、systemctl statusはサービスを確認する命令です。未導入なら実行ファイルやサービスがないのは自然です。すでにサーバーがある場合は、用途・データ・設定を調べます。本番環境を空の実習環境として扱いません。サーバーとクライアントの違いを押さえると、何が不足しているかを判断しやすくなります。

APTでインストールしてサービスを確認する

端末で順番に実行します。

sudo apt update
apt-cache policy mariadb-server
sudo apt install mariadb-server mariadb-client

apt updateはパッケージ情報の更新、apt-cache policyは候補の版と配布元の確認です。確認画面の一覧を読んでから導入します。Ubuntu標準パッケージとベンダー配布版のバージョンは一致するとは限りません。基礎SQLのためだけに別リポジトリを追加する必要はありません。Galera関連の依存部品があっても、クラスタの構築が必須という意味ではありません。

mariadb --version
systemctl is-active mariadb
systemctl is-enabled mariadb

activeは現在稼働中、enabledは起動時に自動開始する設定です。別の状態なので分けて見ます。実習用サービスが停止している場合は起動します。

sudo systemctl start mariadb

再起動後も自動開始させたい場合に有効化します。

sudo systemctl enable mariadb

socket認証で管理者接続する

新規の標準構成では、OSの管理者権限とローカルUnix socketを使います。

sudo mariadb --protocol=socket

接続後、クライアントの中で次を実行します。

SELECT VERSION() AS server_version;
SELECT USER() AS connection_user, CURRENT_USER() AS privilege_account;
SELECT 1 + 1 AS result;

バージョン、接続時のユーザー、権限用アカウント、計算結果2を確認します。socket認証はOSの身元を使えるため、sudo mariadbが成功しても「空のrootパスワードでTCP接続できる」とは限りません。既存環境で別の認証を使っている場合は、その設定を優先します。Windowsのパスワード認証と見た目をそろえる目的で変更しないでください。

初期セキュリティ設定の質問を判断する

EXIT;で接続を終了してから、端末で必要に応じて実行します。

sudo mariadb-secure-installation

質問の順番や文面はパッケージによって変わります。すでに確認できた認証方式を保ちながら判断します。socket認証が有効な新規環境では、入力すべき現在のrootパスワードがない場合もあります。パスワード変更やsocket切り替えを機械的に承諾しません。

実習に不要な匿名アカウントは削除し、管理者の外部ログインは許可しない方針にします。testデータベースの削除は、導入時に作られた未使用のものが対象で、shopcourseを消す操作ではありません。既存データベースがあるパソコンでは、それぞれの影響を確認してから選びます。

TCPで使う実習用ユーザーを作る

sudo mariadb --protocol=socketで再接続し、同名アカウントを確認します。

SELECT User, Host FROM mysql.user WHERE User = 'course_user';

新規の実習アカウントを作る場合に限り、仮パスワードを置き換えて実行します。

CREATE USER 'course_user'@'127.0.0.1'
  IDENTIFIED BY 'CHANGE_THIS_TO_YOUR_OWN_PASSWORD';

GRANT ALL PRIVILEGES ON shopcourse.*
  TO 'course_user'@'127.0.0.1';

SHOW GRANTS FOR 'course_user'@'127.0.0.1';

権限はshopcourse.*だけです。Hostもユーザー識別の一部なので、127.0.0.1と別のHostを同一視しません。このGRANTはデータベース作成前でも実行でき、別途FLUSH PRIVILEGESは必要ありません。

EXIT;で切断し、端末でTCP接続します。

mariadb --protocol=tcp --host=127.0.0.1 --port=3306 --user=course_user --password --default-character-set=utf8mb4 --abort-source-on-error

接続先で実行します。

SELECT CURRENT_USER() AS privilege_account;

course_user@127.0.0.1であることを確認します。以後の共通SQL実習はrootではなく、このアカウントで行います。SQLファイルの実行手順に進む前に、管理者socket接続と実習用TCP接続が区別できているか確かめます。

ログを読み、変更を戻せるようにする

起動に失敗したらサービスの状態と最近の記録を確認します。

systemctl status mariadb --no-pager
sudo journalctl -u mariadb -n 80 --no-pager

接続拒否なら稼働状態、ポートと接続方式、Access deniedならユーザー・Host・パスワード・認証方法を調べます。想定外の版ならAPT候補、クライアント、接続中のサーバーを照合します。接続トラブルの切り分けも参照できます。

設定は一般に/etc/mysql/mariadb.conf.d/以下にありますが、その環境で読み込むファイルを確認します。変更前に保存し、対象インスタンスだけを再起動して確認します。失敗したら元に戻します。sudo systemctl stop mariadbは停止、sudo systemctl disable mariadbは自動起動の解除で、どちらもデータを削除しません。パッケージのpurgeやデータ領域の削除を通常の接続修復に使わないでください。

関連する公式リファレンス