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