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のインストールと初期設定完了後
運用で使うコマンドなどのまとめ