Rails5 on Nginx on CentOS7 環境構築 (3)

引き続き インストール作業を続けます。今回はMySQLです。

CentOS7の標準DBサーバーはMariaDBとなりました。基本的にMySQLとの互換性はありますが、今回は旧環境から使用しているMySQLを引き続き使用することにします。

MySQL 環境構築

MySQLのインストール

MySQLとMariaDBの競合を避けるためMariaDBをアンインストール

sudo su
yum -y remove mariadb-libs

最新版のMySQL 5.7 をインストールします。こちらで RHE Linux 7のRPM Packageを確認してyum リポジトリを追加します。

rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

インストールして自動起動設定をします。

yum -y install mysql-community-server
yum -y install mysql-devel
systemctl start mysqld.service
systemctl enable mysqld.service

MySQL のセキュリティ設定

まず初期パスワードを確認しておきます。

grep password /var/log/mysqld.log

A temporary password is generated for root@localhost:ここが初期パスワード

セキュリティ設定を起動

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を入力

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を入力
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を入力
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を入力
 - 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!

ログインできるか確認します。

mysql -u root -p
Enter password: 上で設定した新しいパスワードを入力

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.7.18 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql>

MySQLの設定

文字コードの設定やパスワード有効期限に設定などを行います。

vim /etc/my.cnf

追加設定例

[mysqld]
........................
default_password_lifetime=0 # パスワード有効期限を無効化
character_set_server=utf8
default-storage-engine=InnoDB
innodb_file_per_table
[mysql]
default-character-set=utf8
[mysqldump]
default-character-set=utf8

再起動します。

systemctl restart mysqld.service

外部からMySQLデータベースに接続したい場合は、MySQLポートを開けておきます。

iptables -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
service iptables save
iptables -L
systemctl restart iptables

外部からの接続はセキュリティ上は好ましくありませんので、MySQLポートは開けておかないほうがよいでしょう。

データ移行

旧環境のMySQLデータをバックアップ

以下のコマンドでデータベース全体をバックアップします。

mysqldump -h localhost -u MySQLユーザー名 -p データベース名 >backup.dump

旧環境のbackup.dumpを、新環境へコピーします。データ移行タイミングは通常は旧環境から新環境への切り替え時となります。今回はDNSのAレコードを変更したときに旧環境のWebサーバーを停止させ、その後、旧環境のバックアップ&新環境へのリストアを行いました。

新環境へリストア

まず管理者ユーザーでデータベースを作成、旧環境と同じデータベース名とします。

mysql -u root -p
create database データベース名 default character set utf8;

続いてデータベース接続ユーザーを作成、旧環境と同じユーザー名とします。

grant all privileges on db_name.* to ユーザー名@'%' identified by 'パスワード';

バックアップデータをリストアします。

mysql -u ユーザー名 -p データベース名 < backup.dump

次回はWebサーバーのインストールです。