MariaDBをインストール・設定する方法
MariaDBがインストール済みか確認する方法
yum list installed | grep mariadb
- 実行結果
MariaDB-client.x86_64 10.3.28-1.el7.centos @mariadb MariaDB-common.x86_64 10.3.28-1.el7.centos @mariadb MariaDB-compat.x86_64 10.3.28-1.el7.centos @mariadb MariaDB-devel.x86_64 10.3.28-1.el7.centos @mariadb MariaDB-server.x86_64 10.3.28-1.el7.centos @mariadb galera.x86_64 25.3.32-1.el7.centos @mariadb
MariaDB-server.x86_64
がMariaDBの本体
mariadb-libs.x86_64
のようなものだけが表示されて、
MariaDB-server.x86_64
が表示されない場合は、MariaDBがインストールされていない
MariaDB用のリポジトリを追加する方法
MariaDB用のリポジトリの有無を確認
mariadb.repo
(mariadbのリポジトリ)がcentos上にあるかを確認する
ls -l /etc/yum.repos.d | egrep 'mariadb'
上記のコマンドで何も表示されなければリポジトリが存在しない
MariaDB用リポジトリを作成
MariaDB公式・MariaDB Server Repositories
vi /etc/yum.repos.d/mariadb.repo
/etc/yum.repos.d
ディレクトリに
mariadb.repo
というファイルを新規作成
- mariadb.repo
# MariaDB 10.11 CentOS repository list - created 2023-05-19 02:46 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/10.11/centos/$releasever/$basearch baseurl = https://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/yum/10.11/centos/$releasever/$basearch module_hotfixes = 1 # 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
mariadb.repo
の中に上記のようなものを書く
OSのバージョンや、インストールするMariaDBのバージョンによってリポジトリの書き方が違う
MariaDB公式・MariaDB Server Repositories
上記のサイトでは
Choose a distribution
でOSを選択し
Choose a MariaDB Server version
でMariaDBのバージョンを選択すれば
mariadb.repo
に書くべき内容を自動的に生成してくれる
MariaDB用リポジトリの内容を表示
cat /etc/yum.repos.d/mariadb.repo
MariaDB用リポジトリの情報を確認する
MariaDB関連のインストール可能なパッケージを一覧表示
yum list MariaDB*
MariaDBをインストールする方法
yum install mariadb-server -y
上記のコマンドでMariaDBをインストールできる
依存関係でエラーが出る場合
yum install mariadb-server -y
- 実行結果抜粋
--> Finished Dependency Resolution Error: Package: MariaDB-server-10.11.centos.x86_64 (mariadb-main) Requires: pv You could try using --skip-broken to work around the problem You could try running: rpm -Va --nofiles --nodigest
上記のようなエラーになる場合、MariaDB
の前提条件となるpv
というパッケージがないのでエラーになっている
EPELをインストールする
yum install epel-release yum update
上記のコマンドでepel-release
をインストールし、さらにupdate
をかけてやれば
依存関係が解決してMariaDB
のインストールができるようになるはず
MariaDBをアップデートする方法
すでにインストール済みのMariaDBをアップデートする場合は下記のコマンド
systemctl stop mariadb yum update mariadb-server
サービスを停止してからアップデートをする
MariaDBを起動する方法
systemctl enable mariadb systemctl start mariadb
MariaDBサービスを自動起動に設定
MariaDBサービスを起動
MariaDBのバージョンを確認する方法
MySQLクライアントのバージョンを確認
mysql --version
上記コマンドで確認できるのはmysql
というMySQLクライアント(コマンドラインツール)のバージョン
MySQL(MariaDB)本体のバージョンとは別物なので注意
MySQL本体のバージョンを確認
mysql
mysqlにログイン
mysqlにログイン後、下記のコマンドを実行
MariaDB [(none)]> status
- 実行結果
mysql Ver 15.1 Distrib 10.11.3-MariaDB, for Linux (x86_64) using readline 5.1 Connection id: 3 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server: MariaDB Server version: 10.11.3-MariaDB MariaDB Server Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: utf8mb3 Conn. characterset: utf8mb3 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 1 hour 9 min 22 sec
MySQLサーバーのバージョン、使用中のユーザー名、データベース名、文字コードなどが表示される
testデータベースを削除
mysqlにログイン
mysql
mysqlにログイン
データベース一覧を表示
MariaDB [(none)]> SHOW DATABASES;
- 実行結果
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test | +--------------------+ 5 rows in set (0.000 sec)
データベース一覧を表示
mysql
はユーザーのIDやパスワードなどが格納されているデータベース
test
というデーターベースは不要なので削除する
データベースを削除
MariaDB [(none)]> DROP DATABASE test;
mysqlのユーザーを確認する方法
MariaDB [(none)]> SELECT user, host, password FROM mysql.user;
- 実行結果
+-------------+-----------------------+----------+ | User | Host | Password | +-------------+-----------------------+----------+ | mariadb.sys | localhost | | | root | localhost | invalid | | mysql | localhost | invalid | | | localhost | | | | localhost.localdomain | | +-------------+-----------------------+----------+ 5 rows in set (0.001 sec)
デフォルトでは上記のようなユーザーが用意されている
root
のPassword
がinvalid
となっている
これは、root
のパスワードが設定されていないため
このままだと、誰でもmysqlにログインできてしまうので危険
パスワードの設定が必要
mysqlユーザーのパスワードを設定する方法
mysqlにログイン
mysql
mysqlにログイン
ユーザーを指定せずにログインすると
現在OSにログイン中のユーザーとなる
Current userを確認
MariaDB [(none)]> status
- 実行結果
mysql Ver 15.1 Distrib 10.6.3-MariaDB, for Linux (x86_64) using readline 5.1 Connection id: 6 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server: MariaDB Server version: 10.6.3-MariaDB MariaDB Server Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: utf8mb3 Conn. characterset: utf8mb3 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 14 min 46 sec
Current user
がroot@localhost
となっている
Current uesrのパスワードを変更する
MariaDB [(none)]> SET PASSWORD = PASSWORD('xxxxxxxx');
Current user
のパスワードをxxxxxxxx
に変更
PASSWORD('xxxxxxxx')
のようにすることで、平文のxxxxxxxx
ではなく、暗号化したものが保存される
xxxxxxxx
の部分は、実際には任意の文字列を入れる
mysqlユーザーの一覧を確認
MariaDB [(none)]> SELECT user, host, password FROM mysql.user;
+-------------+-----------------------+-------------------------------------------+ | User | Host | Password | +-------------+-----------------------+-------------------------------------------+ | mariadb.sys | localhost | | | root | localhost | *ZZZZZZZZZZZZZZZZZZZZZZZZZZ | | mysql | localhost | invalid | | | localhost | | | | localhost.localdomain | | +-------------+-----------------------+-------------------------------------------+ 5 rows in set (0.001 sec)
root
のPassword
が、invalid
から英数字の羅列に変わっていればOK
mysqlの匿名ユーザーを削除する方法
パスワードが設定されていない匿名ユーザーが存在すると
ユーザー名とパスワードがなくてもmysqlにログインできてしまう
セキュリティ的に好ましくないので、匿名ユーザーは削除する
匿名ユーザーを削除する
MariaDB [(none)]> DROP USER ''@localhost; MariaDB [(none)]> DROP USER ''@localhost.localdomain;
匿名ユーザーを削除
mysqlユーザーの一覧を表示
MariaDB [(none)]> SELECT user, host, password FROM mysql.user;
+-------------+-----------------------+-------------------------------------------+ | User | Host | Password | +-------------+-----------------------+-------------------------------------------+ | mariadb.sys | localhost | | | root | localhost | *ZZZZZZZZZZZZZZZZZZZZZZZZZZ | | mysql | localhost | invalid | +-------------+-----------------------+-------------------------------------------+ 3 rows in set (0.001 sec)
User
が空欄の2つのユーザーが消えたことを確認
mysqlにユーザーとパスワードを入力してログインする
mysql -u root -p
-u
オプションでユーザーroot
を指定している
-p
オプションを付けると、コマンド実行後に
Enter password:
と表示され、パスワード入力が必要になる
mysqlへのログインでパスワードの入力を必須にする方法
MariaDB10.4以降の機能で、unix_socket
というものがある
デフォルトでは、root@localhost
ユーザーのauthentication_plugin
にunix_socket
が設定されている
これが設定してあると、CentOSへログイン中のユーザー名とmysqlに作成済のユーザー名が一致すると、パスワード入力なしでmysqlにログインできてしまう
mysqlへログイン
mysql
suでrootユーザになっているときなど、パスワード入力なしでmysqlにログインできてしまう
authentication_pluginを確認1
MariaDB [(none)]> SELECT user,host,password,plugin FROM mysql.user; +-------------+-----------+-------------------------------------------+-----------------------+ | User | Host | Password | plugin | +-------------+-----------+-------------------------------------------+-----------------------+ | mariadb.sys | localhost | | mysql_native_password | | root | localhost | *xxxxxxxxxx | mysql_native_password | | mysql | localhost | invalid | mysql_native_password | +-------------+-----------+-------------------------------------------+-----------------------+
plugin
にmysql_native_password
と表示されている
このplugin
はauthentication_plugin
のこと
authentication_plugin
には複数の値を設定できるが、ここでは1つしか表示されない
authentication_pluginを確認2
MariaDB [(none)]> SHOW GRANTS FOR root@localhost; Grants for root@localhost GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED VIA mysql_native_password USING '*xxxxxxxxxx' OR unix_socket WITH GRANT OPTION GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION
SHOW GRANTS
を確認すると
authentication_plugin
として、mysql_native_password
だけでなくunix_socket
も設定されている
unix_socket
があると
CentOSにroot
でログイン済みの場合
mysqlのroot@localhost
へは、パスワード入力なしでログインできる
mysqlユーザーのauthentication_pluginを変更する
ALTER USER user@host IDENTIFIED BY 'password'
の形式でパスワードを再設定するとauthentication_plugin
からunix_socket
が削除される
MariaDB [(none)]> ALTER USER root@localhost IDENTIFIED BY 'xxxx';
ALTER USER
でユーザーの設定を変更するときに
IDENTIFIED BY
でパスワードを設定することで
authentication_plugin
がmysql_native_password
のみになる
つまり
mysql_native_password
or unix_socket
という状態から
mysql_native_password
という状態になる
(unix_socket
が消える)
GRANTSを確認する
MariaDB [(none)]> SHOW GRANTS FOR root@localhost; +--------------------------------------------------------------------------------------------------------+ | Grants for root@localhost | +--------------------------------------------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED BY PASSWORD '*xxxxxxxx' WITH GRANT OPTION | | GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION | +--------------------------------------------------------------------------------------------------------+ 2 rows in set (0.000 sec)
OR unix_socket
の表示が消えている
mysql_native_password
の表示も消えているが
IDENTIFIED BY PASSWORD
というのは、暗黙的にauthentication_plugin
がmysql_native_password
であることを意味する
mysqlへパスワードなしでログインする方法
authentication_pluginにunix_socketを追加する
MariaDB [(none)]> ALTER USER root@localhost IDENTIFIED VIA mysql_native_password USING PASSWORD('xxxxxxxx') OR unix_socket;
ALTER USER
のときにOR
を使うと複数のauthentication_plugin
を指定できる
また、
IDENTIFIED BY xxx
ではなく、
IDENTIFIED VIA yyy USING xxx
のような形式になっていることに注意
IDENTIFIED BY xxx
では、authentication_plugin
が暗黙的にmysql_native_password
となる
IDENTIFIED VIA yyy USING xxx
では、yyy
の部分がauthentication_plugin
の種類(mysql_native_password
)、xxx
の部分がパスワード
GRANTSを確認する
MariaDB [(none)]> SHOW GRANTS FOR root@localhost; Grants for root@localhost GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED VIA mysql_native_password USING '*xxxxxxxxxx' OR unix_socket WITH GRANT OPTION GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION
unix_socket
の効果により
CentOSへログイン済みのユーザーは
mysqlへ同名のユーザーとしてパスワード入力なしでログインできる
(mysqlで同名のユーザーが作成済みの場合)
MariaDB公式・ALTER USER
MariaDB公式・Authentication Plugin - Unix Socket
mysqlの文字コードをutf8mb4に設定する
文字コードのシステム変数を表示する1
SHOW VARIABLES LIKE "char%";
- 実行結果
+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8mb3 | | character_set_connection | utf8mb3 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8mb3 | | character_set_server | latin1 | | character_set_system | utf8mb3 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.001 sec)
char
で始まるシステム変数の値を表示
デフォルトでは
- utf8mb3
- latin1
などが混在している
これらをutf8mb4
で統一する
utf8bm3・utf8mb4・utfの違い
MySQLのutf8系文字コードには以下の3つがある
- utf8mb3(3バイト、疑似UTF-8)
- utf8mb4(4バイト、本物のUTF-8)
- utf8(utf8mb3の別名)
MySQLの文字コードが
utf8mb3
やutf8
となっていた場合
それらは疑似UTF-8
であり、本物のUTF-8
ではない
(utf8mb3
だと絵文字や常用外漢字などが文字化けする)
utf8mb4
というのが本物のUTF-8
に相当する
昔はutf8
しかなくて、中身は3バイトの疑似UTF-8
だった
後からutf8mb4
が登場し、真正UTF-8
がMySQLで使えるようになった
utf8mb4
の登場に伴い、旧来のutf8
にutf8mb3
という別名が付けられた
my.cnfを設定
vi /etc/my.cnf
my.cnf
(mysqlの設定ファイル)を開く
- my.cnf抜粋
[mysqld] character-set-server=utf8mb4 [mysql] default-character-set=utf8mb4
my.cnf
というファイルに上記を追加
[mysqld]
というのは、mysqlサーバーへの設定
[mysql]
というのは、mysqlクライアントへの設定
- my.cnf(変更前)
# # This group is read both by the client and the server # use it for options that affect everything # [client-server] # # include *.cnf from the config directory # !includedir /etc/my.cnf.d
- my.cnf(変更後)
# # This group is read both by the client and the server # use it for options that affect everything # [client-server] [mysqld] character-set-server=utf8mb4 [mysql] default-character-set=utf8mb4 # # include *.cnf from the config directory # !includedir /etc/my.cnf.d
mysqlサービスを再起動
systemctl restart mysql
my.cnf
への変更を反映させるために、mysqlを再起動
文字コードのシステム変数を表示する2
MariaDB [(none)]> SHOW VARIABLES LIKE "char%";
- 実行結果
+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8mb3 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
character_set_filesystem
は、binary
のままでOK
character_set_system
は、utf8
またはutf8mb3
のままでOK
それ以外のものがutf8mb4
となっていることを確認する
MySQLのエラーログを設定
server.cnfにエラーログのパスを設定
cd /etc/my.cnf.d vi server.cnf
server.cnf
(MySQLの設定ファイル)を開く
- server.cnf
[mariadb] log_error = /var/log/mysql/mariadb_error.log
[mariadb]
の部分はもともとあるはずなので、その下に
log_error = /var/log/mysql/mariadb_error.log
の1行を追加
エラーログのディレクトリとファイルを作成
mkdir -p /var/log/mysql cd /var/log/mysql touch mariadb_error.log chown -R mysql:mysql .
/var/log/mysql
というディレクトリを新規作成
(もともと/var/log
というディレクトリは存在するが、その中にmysql
というディレクトリはないので作成している)
mariadb_error.log
というファイルを新規作成
mysql
ディレクトリとmariadb_error.log
ファイルの所有者をmysql:mysql
に設定
mysqlサービスを再起動
systemctl restart mysql
ログを確認
mysqlを再起動後
/var/log/mysqlmariadb_error.log
に起動ログが記録されることを確認する
tail -n 10 /var/log/mysqlmariadb_error.log
- 実行結果
2023-05-19 14:02:00 0 [Note] /usr/sbin/mariadbd: ready for connections.
のようなログが記録されていればOK
MySQLの使い方
MariaDBのインストールと初期設定完了後
運用で使うコマンドなどのまとめ