MySQLの設定(CentOS 7)

CentOS7にMySQLをインストールして、初期設定からデータベースとユーザの作成まで行います。

環境

CentOS 7.2.x
MySQL 5.7.x

1.MariaDBの削除

CentOS7では、MariaDBが最初からインストールされているため、MySQLと競合しないようにMariaDBとデータベースを削除します。

[root@ ~]# yum remove -y mariadb-libs
[root@ ~]# rm -rf /var/lib/mysql

2.MySQL公式リポジトリの追加

[root@ ~]# rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

3.MySQLのインストール

[root@ ~]# yum -y install mysql-community-server

4.MySQLのバージョン確認

インストールしたMySQLのバージョンを確認します。

[root@ ~]# mysqld --version

5.MySQLの起動と自動起動の設定

MySQLを起動します。また、自動起動の設定も行います。

[root@ ~]# systemctl start mysqld.service
[root@ ~]# systemctl enable mysqld.service

6.MySQL初期パスワードを確認

MySQL5.7では、初回起動時に初期パスワードが生成されますので、その初期パスワードを下記コマンドで確認します。
※(ぱすわーど)部分が初期パスワードです。

[root@ ~]# cat /var/log/mysqld.log | grep password
2019-04-01T08:00:00.516988Z 1 [Note] A temporary password is generated for root@localhost: (ぱすわーど)

7.MySQLのセキュリティ設定

下記コマンドを実行すると対話形式で基本的なセキュリティ設定を行うことができます。

[root@ ~]# 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: ”確認のためパスワードを再入力”
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
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 ”yを入力(※1)”

New password: ”上記で設定した同じパスワードを入力”

Re-enter new password: ”確認のためパスワードを再入力”

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y ”設定したパスワードで良いかの確認なのでyを入力”
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 ”匿名ユーザーを削除して良いかの確認なので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でログインできないようにして良いかの確認なのでyを入力”
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 ”テストデータベースを削除して良いかの確認なのでyを入力”
 - 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 ”今すぐ権限テーブルを読み込んで設定を有効にするかの確認なのでyを入力”
Success.

All done!

※1:パスワード検証プラグイン「VALIDATE PASSWORD」が既に導入されているため重複してパスワード設定を求められます。

8.MySQLの設定変更(my.cnf)

[root@ ~]# vi /etc/my.cnf

my.cnfファイルに下記のハイライト部分を追加してください。
「character-set-server = utf8」⇒MySQLデータベースで利用する文字コードをUTF8に指定します。
「default_password_lifetime = 0」⇒MySQL5.7からユーザーのパスワード有効期限がデフォルトで360日のため、この有効期限を0に設定して無効にします。

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
character-set-server = utf8
default_password_lifetime = 0

MySQLを再起動して設定を反映します。

[root@ ~]# systemctl restart mysqld.service

9.MySQLへログイン

[root@ ~]# mysql -u root -p

10.データベースとユーザーの作成

データベースとユーザーを作成します。
例として、データベース:blog 、ユーザー:sakura を作成します。
まずはデータベース:blogの作成。

mysql>CREATE DATABASE blog;

データベースのblogが作成されたことを確認します。
※デフォルトでinformation_schema、mysql、test のデータベースがあります。

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| blog               | 
| mysql              | 
| test               | 
+--------------------+

次に、ユーザー:sakuraを作成し、先ほど作成したデータベース:blogへの権限を付与します。
”ぱすわーど”部分に任意のパスワードを入力してください。

mysql> GRANT ALL ON blog.* TO sakura@localhost IDENTIFIED BY 'ぱすわーど';

以上で、MySQLのデータベースとユーザーの作成は完了です。
下記コマンドを入力して、MySQLからログアウトしてください。

mysql> QUIT;