Amazon Linux(AMI)に、MySQLをインストールしよう!

STEP15:Amazon Linux(AWS)に、MySQLをインストールしよう! #AWS


今回は、AWSのAmazon Linux(AWS)にMySQLをインストールして、データベースを作成するところまで、行いたいと思います。

まずは、MySQLのサーバ(デーモン)である「mysql-server」と、クライアントである「mysql」をインストールします。

1.EC2(AMI)に、MySQLをインストール

AMIにSSHでログインして、下記を実行します。

sudo yum install mysql-server mysql

2.chkconfigで、起動設定

OS起動時に、自動的に起動をする設定をします。
chkconfigコマンドで設定を行います。

sudo chkconfig mysqld on

設定ができているか、確認してみましょう。

$ chkconfig --list | grep mysql
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off

設定ができています。
次は、MySQLを起動したいと思います。
その前に、MySQLの状態を確認してみましょう。
serviceコマンドで次のように実行します。

$ sudo service mysqld status
mysqld is stopped

MySQLは、停止していますので、起動をします。

[kanako@ip-172-31-25-74 ~]$ sudo service mysqld start
Initializing MySQL database:  Installing MySQL system tables...
151004  8:49:02 [Note] /usr/libexec/mysql55/mysqld (mysqld 5.5.45) starting as process 23869 ...
OK
Filling help tables...
151004  8:49:02 [Note] /usr/libexec/mysql55/mysqld (mysqld 5.5.45) starting as process 23876 ...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/libexec/mysql55/mysqladmin -u root password 'new-password'
/usr/libexec/mysql55/mysqladmin -u root -h ip-172-31-25-74 password 'new-password'

Alternatively you can run:
/usr/libexec/mysql55/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/libexec/mysql55/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl

Please report any problems at http://bugs.mysql.com/

                                                           [  OK  ]
Starting mysqld:                                           [  OK  ]

では、接続確認をしてみましょう。

$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: x.x.xx MySQL Community Server (GPL)

Copyright (c) 2000, 2015, 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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

3.接続用アカウントの作成

Railsプロジェクトの、config/database.ymlに設定したproduction用のアカウントを作成します。

CREATE USER 'pgnyumon'@'localhost' IDENTIFIED BY 'パスワード';

続いて、作成したアカウントに権限を付与します。

GRANT ALL PRIVILEGES ON pgnyumon_production.* TO 'pgnyumon'@'localhost';

3.データベースの作成

接続確認が行えたので、次は、データベースの作成を行いたいと思います。
デプロイ済みである、Railsプロジェクトの、ルートディレクトリまで移動して、下記を実行します。
今回は、本番環境である、AWS側にデータベースを作成しますので、「RAILS_ENV=production」を指定しています。

$ rake db:create RAILS_ENV=production

すると、下記のエラーが発生しました。

#<Mysql2::Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)>
Couldn't create database for {"adapter"=>"mysql2", "encoding"=>"utf8", "pool"=>5, "username"=>"root", "password"=>nil, "socket"=>"/tmp/mysql.sock", "database"=>"pgnyumon_development"}, {:charset=>"utf8", :collation=>"utf8_unicode_ci"}
(If you set the charset manually, make sure you have a matching collation)
#<Mysql2::Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)>
Couldn't create database for {"adapter"=>"mysql2", "encoding"=>"utf8", "pool"=>5, "username"=>"root", "password"=>nil, "socket"=>"/tmp/mysql.sock", "database"=>"pgnyumon_test"}, {:charset=>"utf8", :collation=>"utf8_unicode_ci"}
(If you set the charset manually, make sure you have a matching collation)

MySQLの状態を確認すると、起動はできているようです。

$ sudo service mysqld status
[sudo] password for kanako: 
mysqld (pid  24081) is running...

下記コマンドで、socketのパスを調べてみます。

$ mysqladmin -u root version

socketのパスが、my.cnfの設定と違っていたため発生していたようです。
開発環境で、Railsの、config/database.ymlのproductionに下記の設定を追加します。

socket: /var/lib/mysql/mysql.sock

Gitに変更をcommitして、push実行後に、Capistranoで本番にデプロイを行います。
再度、AMIにログイン、Railsプロジェクトのルートディレクトリまで移動して、下記を実行します。

$ rake db:create RAILS_ENV=production

無事に実行ができました。
データベースが作成されているか、確認してみましょう。

$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: x.x.xx MySQL Community Server (GPL)

Copyright (c) 2000, 2015, 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> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| mysql               |
| performance_schema  |
| pgnyumon_production |
| test                |
+---------------------+
5 rows in set (0.00 sec)

mysql> exit

できています!
今回は、ここまで!!

 

次回は、Railsアプリケーションを起動して、AWSの独自ドメインでアクセスできるようにしたいと思います。

前回の記事は、「Rails4+Capistrano3+pumaで、自動デプロイをしよう!」

AWSおすすめ書籍

AWSの勉強で参考になった書籍です!

AWSで質問したいことがある!

Teratail(テラテイル)

WEBエンジニア専用のQ&Aサイトです。AWSに関しての質問や回答も活発に行われています。ぜひ、会員登録をして利用してみると良いと思います(^o^)

エンジニアのためのQ&Aサイト【teratail】