CentOS7にMySQL(MariaDB)をインストールしてみる

MariaDBの場合

CentOS7から、MySQLではなくMariaDBが標準になったみたいで、 MySQLをインストールしようとすると、MariaDBがインストールされる。

$ sudo yum install mysql
・・・
===================================================================================================================================
 Package                           Arch                        Version                             Repository                 Size
===================================================================================================================================
Installing:
 mariadb                           x86_64                      1:5.5.68-1.el7                      base                      8.8 M
・・・

mysql-serverは無い。

$ sudo yum install mysql-server
・・・
No package mysql-server available.
Error: Nothing to do

MariaDBをインストールしてみる。
バージョン「5.5」はサポートが終了してるみたいだが、開発で試しに使うだけなので、気にしない。

$ sudo yum -y install mariadb mariadb-server
・・・
===================================================================================================================================
 Package                                   Arch                     Version                           Repository              Size
===================================================================================================================================
Installing:
 mariadb                                   x86_64                   1:5.5.68-1.el7                    base                   8.8 M
 mariadb-server                            x86_64                   1:5.5.68-1.el7                    base                    11 M
・・・

バージョン確認。
mysqldコマンドは使えないみたい。

$ mysqld --version
-bash: mysqld: command not found

$ mysql --version
mysql  Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1

起動して、自動起動の設定もしておく。

$ sudo systemctl start mariadb
$ sudo systemctl enable mariadb

$ sudo systemctl status mariadb
・・・
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2020-11-13 07:02:36 UTC; 6s ago
・・・

接続してバージョン確認してみる。

$ mysql -u root

MariaDB [(none)]> select version();
+----------------+
| version()      |
+----------------+
| 5.5.68-MariaDB |
+----------------+
・・・

MySQLの場合

MySQLをインストールする場合は、リポジトリを追加してインストール。
今回は、バージョン「5.7」をインストールしてみる。

$ sudo yum -y localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
$ sudo yum -y install mysql-community-server

バージョン確認。

$ mysqld --version
mysqld  Ver 5.7.32 for Linux on x86_64 (MySQL Community Server (GPL))

$ mysql --version
mysql  Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using  EditLine wrapper

自動起動の設定は既に有効みたいなので、

$ sudo systemctl is-enabled mysqld
enabled

起動だけする。

$ sudo systemctl start mysqld
$ sudo systemctl status mysqld
・・・
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
・・・

接続してバージョンを確認しようとするが、エラーになる。

$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

MySQL5.7からはインストール時に勝手に初期パスワードが設定されるみたいなので、 ログをgrepしてパスワードを確認。

$ sudo cat /var/log/mysqld.log | grep "temporary password"
2020-11-13T07:12:10.973965Z 1 [Note] A temporary password is generated for root@localhost:(ここにパスワードが書かれている)

パスワードを入力すれば、接続はできるが、パスワードを変えろ、と怒られる。

$ mysql -u root -p
Enter password:(ログファイルに書かているパスワードを入力)

> select version();
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

mysql_secure_installationでrootのパスワードを変更。

$ mysql_secure_installation
聞かれる内容 入力する値
Enter password for user root ログに書かれているパスワード
New password 新しいパスワード
Re-enter new password 新しいパスワード
Change the password for root ? なんかrootのパスワードの変更を聞かれるが、さっき入力したばかりなので「n」
Remove anonymous users? お好みで
Disallow root login remotely? お好みで
Remove test database and access to it? お好みで
Reload privilege tables now? すぐに反映させたいので「y」

これで、接続してバージョンが確認できた。

$ mysql -u root -p
Enter password:(新しく設定したパスワード)

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.32    |
+-----------+

文字コードの設定

デフォルトでは、character_set_databaseやcharacter_set_serverがlatin1になっており、 UTF-8にしておいたほうがいいみたいなので、

MariaDB [(none)]> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

設定ファイルに下記のような感じで追記する。
MySQLの場合は「/etc/my.cnf」

$ sudo vi /etc/my.cnf.d/server.cnf
$ sudo vi /etc/my.cnf
・・・
[mysqld]
・・・
character-set-server=utf8

[client]
default-character-set=utf8

再起動するとUTF-8になる。

$ sudo systemctl restart mariadb
MariaDB [(none)]> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

ただ、MariaDBの公式(https://mariadb.com/ja/resources/blog/install-mariadb-server-centos7/) には、[mariadb]のセクションに書くように書かれてたり、

[mariadb]
character-set-server=utf8

文字コードは「utf8」ではなく「utf8mb4」のほうがいい、 みたいな記事も見かけるので、

文字コード周りはもう少し勉強が必要。