環境構築からWEBアプリ開発・スマホアプリ開発まで。ときには動画制作やゲームも。

supilog
すぴろぐ

AlmaLinux8にMySQL8をインストールする

AlmaLinux8にMySQL8をインストールする

実はずーっとMySQL5.7にお世話になっていてあまり触れていないので、MySQL Community Server8の最新版を導入してみたいと思います。

インストール

リポジトリをインストール

$ dnf install https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm

mysql-community-serverをインストール

$ dnf --disablerepo=appstream --enablerepo=mysql80-community install mysql-community-server
GPG-KEYでエラーになった場合は、最新のGPG-KEYをインストール
$ rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

KEYをインストールした後に、再度インストールコマンドを実行する

初期設定

初期化処理

$ mysqld --initialize --user=mysql --datadir=/var/lib/mysql

/etc/my.cnfの設定

$ cp -i /etc/my.cnf /etc/my.cnf.org
$ vi /etc/my.cnf
-----
[mysqld]
datadir=/var/lib/mysql
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/lib/mysql/mysql.sock

character_set_server = utf8mb4
collation_server = utf8mb4_ja_0900_as_cs

# timezone
default-time-zone = SYSTEM
log_timestamps = SYSTEM

# error log
log-error = /var/log/mysql/error.log

# slow query log
slow_query_log = 0
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 5.0
log_queries_not_using_indexes = 0

# general log
general_log = 0
general_log_file = /var/log/mysql/query.log

[mysql]
default-character-set = utf8mb4

[client]
default-character-set = utf8mb4
-----

collation_serverの値「utf8mb4_ja_0900_as_cs」がMySQL8からの導入みたいですね。collation_serverというのは文字照合順序で、大文字と小文字を区別するかどうかなど色々と順序の定義がありますが、新しいutf8mb4_ja_0900_as_csを指定してみました。

順序の比較など掲載してくれているサイトなどもあるので、調べてみてください。

ディレクトリ作成

$ mkdir /var/log/mysql
$ chown mysql:mysql /var/log/mysql

サービス起動・自動起動設定

$ systemctl start mysqld.service
$ systemctl enable mysqld.service

mysql_secure_installation実行

rootのパスワードを確認

使用するので控えておく

$ grep password /var/log/mysqld.log 
実行
$ mysql_secure_installation
現在のrootパスワードを入力
Enter password for user root:

先程メモしたパスワードを入力する。

新しいrootパスワードを入力
The existing password for the user account root has expired. Please set a new password.

New password:

新しいrootパスワードをつけてあげます。

Re-enter new password:

確認用に再度入力を求められます。

「VALIDATE PASSWORD COMPONENT」をセットアップしますか?
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No:

「VALIDATE PASSWORD COMPONENT」というのは、ユーザー作成の際に設定されるパスワードの検証を行ってくれるものであり、そのセットアップをします。「y」を入力します。

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:

3つのパスワードポリシー(LOW,MEDIUM,STRONG)があるので、各々選びます。今回はSTRONGを選ぼうと思うので、「2」を入力します。

rootのパスワードを変更しますか?
Change the password for root ? ((Press y|Y for Yes, any other key for No) :

今回はすでに変更済みなので、ここでは実施しません。何も入力せずにEnter。

anonymous users を削除しますか?
Remove anonymous users? (Press y|Y for Yes, any other key for No) :

anonymous usersというのは匿名アカウントです。不要なので削除します。「y」を入力。

rootアカウントでのリモートログインを不許可にしますか?
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :

仮にリモートログインをしたい場合でもrootでさせる必要はないので、許可しないことにします。「y」を入力します。

テストDBの削除
Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

テストDBは不要なので削除します。「y」を入力します。

特権テーブルのリロード
Reload privilege tables now? (Press y|Y for Yes, any other key for No) :

特権テーブルをリロードするかきかれるので「y」を選びます。

これで設定完了です。

DB作成と接続

まずはログイン

$ mysql -uroot -p

パスワードを入力してログインする

DB作成とユーザー作成

  • DB名「supilog」
  • 接続ユーザー名「supiloguser」
  • パスワード「7Ed686ce34F0efa31D02b@07223b74b2」

として作成してみます。

# mysql> create database supilog;
# mysql> CREATE USER supiloguser@localhost IDENTIFIED WITH mysql_native_password BY '7Ed686ce34F0efa31D02b@07223b74b2';
# mysql> grant all privileges on supilog.* to supiloguser@localhost;
# mysql> exit;

パスワードには、先程決めたパスワードポリシーに沿った強度のパスワードを入力してくださいね!これでDBと接続ユーザーが出来たので接続確認をしてみましょう。

$ mysql -usupiloguser -p supilog
※パスワードを入力して、ログインできればOK

まとめ

導入にいたっては、以前(5.7)とほぼ同じ手順で導入できますね。

バージョンが上がって、単純に性能も上がっているので、ぼちぼち使いはじめようかなと思っております。・・・・と思っていたんですが、デフォルト設定で実際にパフォーマンス比較してみると、MySQL8の方がパフォーマンスは若干落ちました。EOLぎりぎりまで5.7かなぁ。