Amazon AWS ES2 LinuxへのMySQLインストールと接続確認| Webサービスを開発しよう!STEP15 #aws #mysql

AWS ES2 の Amazon Linux(AMI)へのMySQLインストールと接続確認| Webサービスを開発しよう!STEP15 #aws #mysql


今回は、AWS ES2 の Amazon Linux(AMI) へ MySQL のインストールをします。また、MySQL への接続も確認したのちに、データベースも作成します。

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

1.AWS ES2 の Amazon Linux(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';

4.データベースの作成

接続確認が行えたので、次は、データベースの作成を行いたいと思います。
デプロイ済みである、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 も学ぶことができるので、ぜひ、活用しましょう。

Udemy(ユーデミー)

オンライン動画学習サイトで、AWS講座もあります。頻繁に講座のバーゲンセールスが実施されているので、価格をチェックしましょう!購入した動画は繰り返し使えますので何度でも学習可!
世界最大級のオンライン学習サイトUdemy


RaiseTech(ライズテック)

RaiseTechは最速で「稼げる」エンジニアになるための、実践的なWebエンジニアリングスクール。AWSフルコース、AWS自動化コースとAWS講座が充実!
【RaiseTech】最速で稼げるプロになるエンジニアリングスクール



かな

この記事を書いた人。 質問は、Twitter で受付けしています。 Java、PHP、Ruby on Rails、JavaScriptを経験してきたエンジニア。スタートアップやベンチャーで働くのが大好き!テニスコート予約サービスの開発 をしています。 4年連続出版【iPhoneアプリ開発集中講座】の著者。プロフィールの詳細はこちら。