[CentOS] CentOS8.0にMySQL8.0をインストールする

CentOS8.0では、MariaDBというMySQL派生のDBと、本家MySQLの両方がインストールディスクに収められていますので、自分で選択できるようになりました。

MariaDBは、DBとしての機能はMySQLとほぼ同じなので、そのまま使っても特に問題はないのですが、うちの環境では普段MySQLを使っているので、MySQLをインストールしていきます。

インストール自体はそんなに大変ではありませんが、備忘録として手順をメモメモ。

MariaDBのアンインストール

もしMariaDBをインストールしてしまっていたら、まずはアンインストールします。

インストールディスクからインストールしている場合、MariaDBのバージョンは10.3.11。バージョン10からはMySQLとは少し違った方向へ進化しているため、機能的に同一とみられるMySQLは存在せず。

なので、MySQL5.6以降からの置き換えをするのであれば、動作検証は慎重に行った方がいいかもしれません。

話は脱線しましたが、ではまず、インストールされているパッケージの確認。

# dnf list installed | grep mariadb
mariadb.x86_64            3:10.3.11-2.module_el8.0.0+35+6f2527ed
mariadb-common.x86_64     3:10.3.11-2.module_el8.0.0+35+6f2527ed

MariaDBをアンインストールします。

# dnf remove mariadb

依存性関連のパッケージがあれば、一緒に削除されます。自分の環境では、MariaDB本体とcommonの2つが一緒に削除されました。

アンインストールではなく、無効化しておきたい場合はこちら。

# dnf module disable mariadb

MySQL8.0のインストール

インストールディスクにはMySQL8.0.13が収められていますが、せっかくなので最新版をインストールしましょう。

以下のコマンドで、最新版のバージョンが確認できます。

# dnf info mysql
名前         : mysql
バージョン   : 8.0.17
リリース     : 3.module_el8.0.0+181+899d6349
アーキテクチ : x86_64
サイズ       : 11 M
ソース       : mysql-8.0.17-3.module_el8.0.0+181+899d6349.src.rpm
Repo         : AppStream
:
:
:

2019年10月下旬時点での最新版は、8.0.17でした。ではインストールします。

# dnf install @mysql:8.0

依存関係のあるパッケージなども一緒にインストールしてくれます。

必要に応じて、このタイミングでPHP用のライブラリ群もインストールしておくといいかも。

# dnf install php-mysqlnd

インストール後、バージョンを確認します。

# mysql --version
mysql  Ver 8.0.17 for Linux on x86_64 (Source distribution)

以上でMySQL8.0のインストールが完了です。ついでに自動起動の設定をして、MySQLを起動させておきましょう。

# systemctl enable mysqld
# systemctl start mysqld

MySQLの初期設定

MySQLの初期設定は、いくつかの質問に答えていくだけで完了します。質問部分だけ抜粋してみました。
# mysql_secure_installation
Press y|Y for Yes, any other key for No: y
※VALIDATE PASSWORDを変更するのでy

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0
※社内なのでLOW、通常はSTRONGがいいかも

New password:(設定したいパスワードを入力)
Re-enter new password:(設定したいパスワードを再入力)

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
※設定したパスワードで続行するのでy

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
※匿名ユーザーは不要なのでy

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
※rootでリモートログインはしないのでy

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
※テスト用のデータベースは不要なのでy

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
※ここまでの設定を反映させたいのでy

続いて、文字コードの設定…ですが、MySQL8.0では、デフォルトでutf8mb4が指定されているようで、特に設定する必要はありませんでした。

mysql> show variables like "chara%";
+--------------------------+----------------------------+
| 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     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

MySQLユーザーの作成

いつもrootユーザーでDBを操作するわけにはいかないので、ユーザーを作成します。

まずはMySQLにログインします。

# mysql -u root -p
Enter password:(rootユーザーに設定したパスワード)

今回はローカル環境でしか使用しないサーバなので、全ての権限を持ったユーザーを作成します。通常は、こんなユーザーは作りませんよ!

mysql> CREATE USER 'ユーザー名'@'localhost' IDENTIFIED BY 'パスワード';
mysql> GRANT ALL ON *.* TO 'ユーザー名'@'localhost' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

MySQL8.0からは、GRANT構文だけでユーザーを作成することはできず、CREATE USER構文でまずユーザーを作成してから、GRANT構文で権限を与える、というように厳密になりました。考えてみれば当たり前の話ですね。

以降は、このユーザーで操作をするため、ログインしなおします。

mysql> exit
# mysql -u ユーザー名 -p
Enter password:(作成したユーザーに設定したパスワード)

phpMyAdminのインストール

いつもコマンドラインから操作するのは面倒なので、Webブラウザから操作できるphpMyAdminをインストールしたいのですが、dnfでインストールしようと思ったらパッケージが見当たらず。

無いものは仕方ないので、ソースを取得することにします。2019年10月下旬時点の最新版は4.9.1。

# wget https://files.phpmyadmin.net/phpMyAdmin/4.9.1/phpMyAdmin-4.9.1-all-languages.zip
# unzip phpMyAdmin-4.9.1-all-languages.zip
# mv phpMyAdmin-4.9.1-all-languages /usr/share/phpmyadmin

phpMyAdminの設定

設定ファイルの編集をします。

config.inc.php

まずはconfig.inc.phpに、暗号化用のパスフレーズを設定します。これをやらないと、phpMyAdmin上でエラーが表示されてしまいます。

設定ファイルはサンプルがあるので、それをコピーし、編集します。

# cd /usr/share/phpmyadmin
# cp -a config.sample.inc.php config.inc.php
# vi config.inc.php

ファイルの先頭のあたりに、以下の行があります。

/**
 * This is needed for cookie based authentication to encrypt password in
 * cookie. Needs to be 32 chars long.
 */
$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

「$cfg['blowfish_secret']」の値に、32桁以上のパスフレーズを入力します。英数字であれば何でもいいです。何なら、以下のコマンドでランダムな文字列を生成してしまいましょう。

# openssl rand -base64 100 | fold -w 32 | head -1

phpMyAdmin.conf

アクセス権に関する設定を行います。これをやらないと、phpMyAdminにアクセスできません。

# vi /etc/httpd/conf.d/phpMyAdmin.conf

Alias /phpMyAdmin /usr/share/phpmyadmin/
Alias /phpmyadmin /usr/share/phpmyadmin/

<Directory /usr/share/phpmyadmin/>
  AddDefaultCharset UTF-8

  <IfModule mod_authz_core.c>
    # Apache 2.4
    Require all granted
    Require ip 192.168.1.0/24 ← 自分の環境に合わせる
  </IfModule>
  <IfModule !mod_authz_core.c>
    # Apache 2.2
    Order Deny,Allow
    Deny from All
    Allow from 127.0.0.1
    Allow from ::1
  </IfModule>
</Directory>

Require ipの部分は、使う環境でのネットワークセグメントに書き換えてください。

保存したら、Webサーバを再起動します。

# systemctl restart httpd 

再起動したら、ブラウザからアクセス!

URL例:http://centos8/phpmyadmin/

ログイン画面が表示されればOKです。

もし、403 Forbiddenでページが表示されなかったら。おそらくwww.sockの権限がないため、エラーが出ているはずです。/var/log/httpd/error_logを確認してみてください。

[proxy:error] [pid 11324:tid 140585444779776] (13)Permission denied: AH02454: FCGI: attempt to connect to Unix domain socket /run/php-fpm/www.sock (*) failed
[proxy_fcgi:error] [pid 11324:tid 140585444779776] [client 192.168.xxx.xxx:xxxxx] AH01079: failed to make connection to backend: httpd-UDS

こんなエラーが出ていませんか?どうせ外に出ないローカル環境オンリーのサーバなので、ソケットの権限を変えてしまいましょう。

# chmod 777 /run/php-fpm/www.sock

さいごに

以上で、MySQLおよびphpMyAdminのインストールと設定が終わりました。ここまでやっておけば、WordpressをインストールしてWebサイトのテスト環境が作れます!

お疲れ様でした!

初稿:2019年10月29日
[CentOS] 不要PCにCentOS8.0をインストール
つい先日、CentOS7.6で環境を構築したばかりのような気がしますが、CentOS8.0がリリースされたので、さっそく使ってみることにしました。 まず事前情報として確認していたのが、TLS1.0と1.1がデフォルトで無効になること、ファイ...
[CentOS] CentOS8.0にPHP7.3をインストール
CentOS8.0では、デフォルトでPHP7.2がインストールされます。 そのままでも今は問題ないのですが、できれば最新のPHP7.3系を使いたいので、アップグレードを行います。 PHP7.3をインストールするためにはRemiリポジトリが必...
[CentOS] CentOS8.0にMariaDB10.3をインストールする
CentOS8.0では、MariaDBというMySQL派生のDBと、本家MySQLの両方がインストールディスクに収められていますので、自分で選択できるようになりました。 MariaDBは、DBとしての機能はもとより、MySQL向けの接続クラ...

コメント

タイトルとURLをコピーしました