CentOS7にMySQL8をインストールして初期設定するところまでをまとめました。
環境
- CentOS 7.6
- MySQL 8.0
MySQL 8のインストール
mariaDBを削除
CentOS7系ではmariaDBがデフォルトで入っている場合がある。 MySQLをインストールする際に競合するため、これを先に削除しておく。
$ sudo yum remove mariadb-libs
MySQL8 インストール
MySQLのyumリポジトリを追加する必要があります。
yumリポジトリは公式のこちらに置いてあり、yum localinstall http://dev.mysql.com/get/リポジトリ名
でインストールできます。
# yumリポジトリをインストール
$ sudo yum -y localinstall http://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
正しくyumリポジトリを追加できると、yum info mysql-community-server
でこれから導入するMySQLのバージョンが確認できます。
# インストールできるMySQLのバージョンを確認
$ sudo yum info mysql-community-server
...
Installed Packages
Name : mysql-community-server
Arch : x86_64
Version : 8.0.17
Release : 1.el7
Size : 1.8 G
Repo : installed
From repo : mysql80-community
Summary : A very fast and reliable SQL database server
...
バージョンは問題ないので、mysql-community-server
をインストールします。
# MySQLをインストール
$ sudo yum -y install mysql-community-server
# バージョン確認
$ sudo mysqld --version
/usr/sbin/mysqld Ver 8.0.17 for Linux on x86_64 (MySQL Community Server - GPL)
インストールはここまでです。
初期設定
MySQLの設定ファイルは/etc/my.cnf
です。
末尾に設定を加えます。
# 設定をバックアップ
$ sudo cp /etc/my.cnf /etc/my.cnf.org
$ sudo vi /etc/my.cnf
# 認証プラグインの設定
default_authentication_plugin=mysql_native_password
viがめんどくさい人は以下のコマンドで末行に追加できる。
# sudo suのあと
echo "default_authentication_plugin=mysql_native_password" >> /etc/my.cnf
この設定はなにか?は次で述べてます。
default_authentication_plugin
MySQL8.0は認証プラグインが新たに追加されcaching_sha2_password
になりました。これは、SHA-256を使用した、より安全なパスワードの暗号化を提供するとともに、キャッシュを使用して同一ユーザの認証処理を高速化しようという、MySQL推奨の認証プラグインです。
ただし、接続に使用するクライアント又はコネクタ側でも caching_sha2_password
をサポートしている必要があるため、従来のmysql_native_password
を設定しておきます。
パスワードのポリシーの設定について
MySQLでは結構厳格なパスワードを求められます。
初期では英数記号全て含む文字列をパスワードに使わなければならない。
開発環境などで簡易なパスワードを設定するには、validate_password
を設定してください。
▼ 例として、4文字以上の文字列なら通す設定です。
# パスワードポリシー
validate_password.length=4
validate_password.mixed_case_count=0
validate_password.number_count=0
validate_password.special_char_count=0
validate_password.policy=LOW
詳細は以下の参考をご覧ください。
- MySQL8.0のパスワードポリシーについて
- MySQL 8.0 初期設定覚書
- MySQL 8.0リファレンスマニュアル - 6.4.3 The Password Validation Component
MySQL起動
説明が長くなってしまいました。MySQLを起動します。
# 起動
$ sudo systemctl start mysqld
# 状態確認
$ sudo systemctl status mysqld
起動に失敗した場合に確認するところ
systemctl status mysqld
journalctl -xe
/var/log/mysqld.log
#初期設定でのログの場所
自動起動の設定
# 自動起動
$ sudo systemctl enable mysqld
初回のパスワードについて
mysqlを初回に起動すると一時パスワードがlogに吐き出されます。 次で使うためメモします。
$ grep password /var/log/mysqld.log
2019-09-19T01:46:33.268022Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: %ata*6Cz.9No
ここでは%ata*6Cz.9No
です。
パスワードの更新と初期設定
mysql_secure_installation
で初期設定をしていきます。
$ mysql_secure_installation
mysql_secure_installationに項目の和約が載っています。こちらはMariaDBとなっていますが、内容はMySQLとほぼ同じでした。
質問と簡単な訳
$ mysql_secure_installation
Securing the MySQL server deployment.
# 一時パスワードを入力する
Enter password for user root:
The existing password for the user account root has expired. Please set a new password.
# パスワードを更新
New password:
Re-enter new password:
## パスワードを英数字のみで登録しようとしたらダメだった。
... Failed! Error: Your password does not satisfy the current policy requirements
New password:
Re-enter new password:
The 'validate_password' component is installed on the server.
The subsequent steps will run with the existing configuration
of the component.
Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y
... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
# 匿名ユーザを削除しますか?
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
# リモートからの root ログインを禁止しますか?
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
# test データベースとそのデータベースへのアクセスを削除しますか?
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
# 今すぐ権限テーブルを再読み込みしますか?
Success.
All done!
開発環境だったのでRemove anonymous users?
はnoを選択しとくべきだったかな。
ログインと状態確認
rootでログインする。
$ mysql -u root -p
Enter password:
状態の確認
mysql> status
--------------
mysql Ver 8.0.17 for Linux on x86_64 (MySQL Community Server - GPL)
Connection id: 11
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.17 MySQL Community Server - GPL
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 17 min 54 sec
Threads: 2 Questions: 16 Slow queries: 0 Opens: 128 Flush tables: 3 Open tables: 48 Queries per second avg: 0.014
--------------
文字コードなどの確認
mysql> show variables like '%char%';
+--------------------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------------------+--------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
| validate_password.special_char_count | 1 |
+--------------------------------------+--------------------------------+
9 rows in set (0.00 sec)
以上でMySQL8のインストール終わりです。
おわりに
何度かMySQLのインストールに失敗していると前のDBや設定が残って起動できないことが多々あった。つらかった。
完全に削除する手順をまとめたので、こちらもどうぞ。