MariaDBの設定ファイルの場所とデフォルト設定

develop/MariaDB
概要

MariaDBをパッケージマネージャーなどでインストール後、デフォルトのユーザー名、DB、設定ファイルの場所が何かわからなくて、困ってしまいました。そこで情報を記録します。

Configuring MariaDB with Option Files – MariaDB Knowledge Base」を参考にしました。

Debian 11+MariaDB v15.1で確認しました。MariaDBは以下のコマンドでインストールしました。

sudo apt install -y mariadb-server
場所

まず、MariaDBの設定ファイルはUNIX系OSだとmy.cnf、Windowsだとmy.iniファイルとなっています。

これらのファイルの読込場所はビルド方法などで異なっています。現在インストールされているMariaDBのファイルの読込場所の確認には以下のコマンドを実行します。

mysql --help
mysql  Ver 15.1 Distrib 10.5.18-MariaDB, for debian-linux-gnu (x86_64) using  EditLine wrapper
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Usage: mysql [OPTIONS] [database]

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf 

今回は上記のように、/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnfがこの順番で読み込まれる設定ファイルとなっていました。

実際にファイルを確認すると、/etc/mysql/my.cnfのみ存在していました。

# Import all .cnf files from configuration directory
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/

ファイルを確認すると、上記のようにさらに/etc/mysql/conf.d/と/etc/mysql/mariadb.conf.d/配下の設定ファイルを読み込むようになっていました。それぞれ以下のファイルが存在しました。

ls /etc/mysql/conf.d/ /etc/mysql/mariadb.conf.d/
/etc/mysql/conf.d/:
mysql.cnf  mysqldump.cnf

/etc/mysql/mariadb.conf.d/:
50-client.cnf  50-mysql-clients.cnf  50-mysqld_safe.cnf  50-server.cnf  60-galera.cnf
設定

この内50-sever.cnfに以下の記載がありました。

# this is only for the mysqld standalone daemon
[mysqld]

#
# * Basic Settings
#

user                    = mysql
pid-file                = /run/mysqld/mysqld.pid
basedir                 = /usr
datadir                 = /var/lib/mysql
tmpdir                  = /tmp
lc-messages-dir         = /usr/share/mysql
lc-messages             = en_US
skip-external-locking
#
# * Character sets
#

# MySQL/MariaDB default is Latin1, but in Debian we rather default to the full
# utf8 4-byte character set. See also client.cnf
character-set-server  = utf8mb4
collation-server      = utf8mb4_general_ci

MariaDBのサーバー設定はオプショングループで別れており、[mysqld] のグループはMySQLとMariaDBの共通設定です。

mysqld Options – MariaDB Knowledge Base」がmysqldのオプションリストです。

その他、MariaDBのインストール時に、mysql_install_dbコマンドが実行されており、これで以下のユーザーとDBが作成された状態になっています (mysql_install_db – MariaDB Knowledge Base)。

mysqlデータベースは、システムデータベースとなっており、システム情報などの重要なテーブルが格納されているので、他の用途には使ってはいけません (The mysql Database Tables – MariaDB Knowledge Base)。

rootとmysqlユーザーは以下の定義になっています。

CREATE USER 'root'@'localhost' IDENTIFIED VIA unix_socket 
  OR mysql_native_password USING 'invalid';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION;
CREATE USER 'mysql'@'localhost' IDENTIFIED VIA unix_socket 
  OR mysql_native_password USING 'invalid';
GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'localhost' WITH GRANT OPTION;

デフォルトのパスワードはinvalidで無効になっています。unix_socket認証が有効になっているので、OSの同一名のユーザーであればパスワードなしでログインできるようです。つまり、sudo mysqlコマンドでそのままrootユーザーにログインできます。

PHPなど外部からDBに接続する際に、ユーザーを新規作成せずに流用する場合は、これらの2ユーザーにパスワードを設定して使うことになります。rootユーザーは何かと危なそうなので、通常作業にはmysqlユーザーを使うとよさそうです。

デフォルトではrootもmysqlも無効なパスワードが設定されているので、以下のSQLで最初にパスワードを設定するとよいそうです。

sudo mysql
SET PASSWORD FOR 'mysql'@'localhost' = PASSWORD('password')

これらの情報を使って、以下のコマンドでMariaDBにログインできます。

sudo mysql -u root

以下のコマンドでデフォルトのDBを確認可能です。

show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+

ネット上でよくきく、MariaDBのデフォルトのユーザーとDBを公式文書からも確認できました。

結論

MariaDBの設定ファイルとデフォルト設定でした。

ネット上でこれらの情報がデフォルトだとかの情報を確認することはできますが、その根拠がなくて不安でした。公式文書から根拠を確認できて、安心して利用できます。

my.cnfの設定で重要なデフォルト設定があれば、必要なタイミングで追記します。

Comments

  1. This Article was mentioned on web.gnusocial.jp

Copied title and URL