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.repo
(mariadbのリポジトリ)がcentos上にあるかを確認する
ls -l /etc/yum.repos.d | egrep 'mariadb'
上記のコマンドで何も表示されなければリポジトリが存在しない
MariaDB公式・MariaDB Server Repositories
vi /etc/yum.repos.d/mariadb.repo
/etc/yum.repos.d
ディレクトリに
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
に書くべき内容を自動的に生成してくれる
cat /etc/yum.repos.d/mariadb.repo
MariaDB用リポジトリの情報を確認する
yum list 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
というパッケージがないのでエラーになっている
yum install epel-release yum update
上記のコマンドでepel-release
をインストールし、さらにupdate
をかけてやれば
依存関係が解決してMariaDB
のインストールができるようになるはず
すでにインストール済みのMariaDBをアップデートする場合は下記のコマンド
systemctl stop mariadb yum update mariadb-server
サービスを停止してからアップデートをする
systemctl enable mariadb systemctl start mariadb
MariaDBサービスを自動起動に設定
MariaDBサービスを起動
mysql --version
上記コマンドで確認できるのはmysql
というMySQLクライアント(コマンドラインツール)のバージョン
MySQL(MariaDB)本体のバージョンとは別物なので注意
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サーバーのバージョン、使用中のユーザー名、データベース名、文字コードなどが表示される
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;
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にログイン
ユーザーを指定せずにログインすると
現在OSにログイン中のユーザーとなる
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
となっている
MariaDB [(none)]> SET PASSWORD = PASSWORD('xxxxxxxx');
Current user
のパスワードをxxxxxxxx
に変更
PASSWORD('xxxxxxxx')
のようにすることで、平文のxxxxxxxx
ではなく、暗号化したものが保存される
xxxxxxxx
の部分は、実際には任意の文字列を入れる
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にログインできてしまう
セキュリティ的に好ましくないので、匿名ユーザーは削除する
MariaDB [(none)]> DROP USER ''@localhost; MariaDB [(none)]> DROP USER ''@localhost.localdomain;
匿名ユーザーを削除
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 -u root -p
-u
オプションでユーザーroot
を指定している
-p
オプションを付けると、コマンド実行後に
Enter password:
と表示され、パスワード入力が必要になる
MariaDB10.4以降の機能で、unix_socket
というものがある
デフォルトでは、root@localhost
ユーザーのauthentication_plugin
にunix_socket
が設定されている
これが設定してあると、CentOSへログイン中のユーザー名とmysqlに作成済のユーザー名が一致すると、パスワード入力なしでmysqlにログインできてしまう
mysql
suでrootユーザになっているときなど、パスワード入力なしでmysqlにログインできてしまう
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つしか表示されない
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
へは、パスワード入力なしでログインできる
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
が消える)
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
であることを意味する
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
の部分がパスワード
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
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
で始まるシステム変数の値を表示
デフォルトでは
などが混在している
これらをutf8mb4
で統一する
MySQLのutf8系文字コードには以下の3つがある
MySQLの文字コードが
utf8mb3
やutf8
となっていた場合
それらは疑似UTF-8
であり、本物のUTF-8
ではない
(utf8mb3
だと絵文字や常用外漢字などが文字化けする)
utf8mb4
というのが本物のUTF-8
に相当する
昔はutf8
しかなくて、中身は3バイトの疑似UTF-8
だった
後からutf8mb4
が登場し、真正UTF-8
がMySQLで使えるようになった
utf8mb4
の登場に伴い、旧来のutf8
にutf8mb3
という別名が付けられた
vi /etc/my.cnf
my.cnf
(mysqlの設定ファイル)を開く
[mysqld] character-set-server=utf8mb4 [mysql] default-character-set=utf8mb4
my.cnf
というファイルに上記を追加
[mysqld]
というのは、mysqlサーバーへの設定
[mysql]
というのは、mysqlクライアントへの設定
# # 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
# # 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
systemctl restart mysql
my.cnf
への変更を反映させるために、mysqlを再起動
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
となっていることを確認する
cd /etc/my.cnf.d vi server.cnf
server.cnf
(MySQLの設定ファイル)を開く
[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
に設定
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
MariaDBのインストールと初期設定完了後
運用で使うコマンドなどのまとめ