20200912のMySQLに関する記事は5件です。

『AWS初学者向けハンズオン』EC2インスタンスからRDSインスタンスに接続してみる編

初めに

この記事はAWS初学者が書いているAWS初学者の方や未経験の方向けの記事になります。
内容や説明が間違っていた場合はコメントいただけるとありがたいです。

投稿者のレベル

AWS CLF持ってるレベル
AWS実務経験無し
AWS使用経験(個人用+会社作成アカウント使用):約2ヶ月
ちょっと触ったことがあるサービス:IAM、EC2、EIP、VPC、RDS、CloudWatch(もしかしたら他にも使ったような気がする...)
最近本格的にAWSの勉強を始めたインフラエンジニアです。

前提知識&条件

『AWS初学者向けハンズオン』VPCとEC2を使ってWebサーバの構築編
こちらの記事を事前に読んでいただけると今回行うハンズオンがスムーズに進みます。
またEC2インスタンスをSSHできる状態を作成します。

今回の目的

EC2でデータベースサーバを構築することも可能ですが、RDSを使用することでバックアップやデータベースのスケーリングをAWSに任せることができるのでWebアプリケーションの最適化に集中できるようになります。
今回の目的はRDSの基本的な使用方法を学ぶことを目的としています。

使用するサービス

・RDS

 AWSの提供するリレーショナルデータベースサービスです。
 MySQLやOracleといった人気のデータベースを使用することが可能です。

・VPC

 Virtual Private Cloud の略です。
 VPCはAWS内にプライベートなネットワーク環境を作成することが出来ます。
 アカウント作成後はデフォルトのVPCが作成されています。

・EC2

 Elastic Compute Cloud の略です。
 AWS上に仮想サーバを構築するサービスです。
 仮想サーバの事をEC2インスタンスと言います。
 慣れている人なら数分で仮想サーバを作成することが可能です。

事前準備

1. VPCの作成

VPCを作成します。
作成方法は過去に書いたこちらの記事をお読みください。
『AWS初学者向けハンズオン』VPCとEC2を使ってWebサーバの構築編

2. インターネットゲートウェイの作成

インターネットゲートウェイの作成をします。
作成方法は過去に書いたこちらの記事をお読みください。
『AWS初学者向けハンズオン』VPCとEC2を使ってWebサーバの構築編

3. サブネットの作成

RDSはインターネットから接続されたくないのでプライベートサブネットに所属させます。
RDSは作成する際にアベイラビリティーゾーンを二つ指定する必要があります。
なのでサブネットを2つ作成し、その2つがそれぞれ違うアベイラビリティーゾーンに所属している状態を作成します。
またEC2インスタンスからRDSに接続するためにインターネットに接続できるパブリックサブネットを1つ作成します。
サブネットの作成は前回同様の作り方になります。
作成方法は過去に書いたこちらの記事をお読みください。
『AWS初学者向けハンズオン』VPCとEC2を使ってWebサーバの構築編

4. ルートテーブルの作成

 今回作成するルートテーブルは2つで、一つがインターネットゲートウェイ宛のルートが書いてあるパブリックサブネット用、もう一つがRDS用のインターネットに接続しないプライベートサブネットに関連付けるものです。
作成方法は過去に書いたこちらの記事をお読みください。
『AWS初学者向けハンズオン』VPCとEC2を使ってWebサーバの構築編

設定の流れ(今回の本編)

1. RDS用セキュリティグループの作成

AWSマネジメントコンソールの左上にある「サービス」をクリックして「EC2」を検索して開きます。
開いたら左側の欄にある「セキュリティグループ」をクリックします。(少し下の方にスクロールしてください。)
クリックすると以下のページが表示されます。
表示されたら「セキュリティグループを作成」をクリックしてください。
WS000000.JPG
クリックすると以下のページが表示されます。
表示されたら「セキュリティグループ名」「説明」「VPC」を入力していきます。
「セキュリティグループ名」は任意の名前で大丈夫です。自分はAWS_DB_sgにしました。
「説明」も任意で大丈夫です。
「VPC」は作成したVPCを選択してください。
これらの入力が完了したら下にスクロールします。
WS000001.JPG
下にスクロールすると「インバウンドのルール」があり、「ルールの追加」をクリックします。
クリックするとルールの追加ができるようになるので追加していきます。
「タイプ」には「MYSQL/Aurora」を選択します。
「ソース」には接続したいEC2インスタンスのIPアドレスかセキュリティグループで指定します。
追加が完了したら下にスクロールして「セキュリティグループを作成」をクリックします。
WS000002.JPG
クリックしたらセキュリティグループ一覧のページに戻って作成されていることを確認してください。

2. RDSの設定

確認ができたら左上の「サービス」から「RDS」を検索して開きます。
開くと以下のページが表示されると思います。
表示されたら左側の欄から「サブネットグループ」をクリックします。
WS000003.JPG
クリックすると以下の画面が表示されると思います。
表示されたら「DBサブネットグループを作成」をクリックします。
WS000004.JPG
クリックすると以下のページが表示されると思います。
表示されたら「名前」「説明」「VPC」を入力します。
「名前」は任意のもので大丈夫です。自分はAWS_DB_subnetGにしました。
「説明」も任意のもので大丈夫です。
「VPC」は作成したものを選択してください。
入力が完了したら下にスクロールします。
WS000005.JPG
下にスクロールすると「サブネットを追加」という項目があるので追加します。
「アベイラビリティーゾーン」はプライベートサブネットの所属しているものを二つ選択します。
「サブネット」は作成したプライベートサブネットを選択します。
選択すると以下のようになると思います。
このようになったら下にスクロールして「作成」をクリックします。
WS000006.JPG
クリックすると以下の画面のようになります。
サブネットグループが作成されていることを確認します。
WS000007.JPG
確認が出来たら左側の欄にある「データベース」をクリックします。
クリックすると以下のページが表示されます。
表示されたら「データベースの作成」をクリックします。
WS000010.JPG
クリックすると以下のページが表示されます。
「データベースの作成方法を選択」「エンジンのオプション」「テンプレート」「設定」「DBインスタンスサイズ」「接続」「追加設定」を変更していきます。
「データベースの作成方法を選択」は「標準作成」を選択します。
「エンジンのオプション」は「MySQL」を選択します。「バージョン」は最新のものを選択します。
「テンプレート」は「無料利用枠」を選択します。
「設定」の「DBインスタンス識別子」は任意の物を入力してください。自分はAWS-DB-MySQLにしました。
「マスターユーザー名」はadminのままです。
「マスターパスワード」任意の物を入力してください。
「DBインスタンスサイズ」は「バースト可能クラス(tクラスを含む)」を選択します。
「ストレージ」は変更無しです。
「接続」の「VPC」は作成したVPCを選択してください。
「サブネットグループ」は上記で作成したものを選択します。
「パブリックアクセス可能」は「なし」を選択します。
「既存のVPCセキュリティグループ」は上記で作成したものを選択します。
「アベイラビリティーゾーン」はおそらく二つ選べるようになっていると思いますのでどちらかを選択します。
「データベースポート」はそのままで大丈夫です。
ここまでの作業が完了したら下にスクロールして「データベースの作成」をクリックします。
WS000011.JPG
クリックすると以下のページが表示されます。
表示されたら作成されていることを確認してください。
(作成には少し時間がかかります。)
WS000012.JPG

3. EC2インスタンスからRDSに接続

まずEC2インスタンスにSSHで接続します。
接続方法は過去に書いたこちらの記事をお読みください。
『AWS初学者向けハンズオン』VPCとEC2を使ってWebサーバの構築編
接続ができたらEC2インスタンスにMySQLをインストールします。
以下のコマンドを実行してください。

EC2インスタンス上
sudo yum update -y #このコマンドでパッケージを最新版のものにしています。
sudo yum install mysql -y

上記コマンドを実行したらRDSに接続するために必要な情報を確認しに行きます。
先程のデータベース一覧ページを表示して、データベースの「DB識別子」をクリックします。
クリックすると以下のページが表示されると思います。
表示されたら下にスクロールして「エンドポイント」のところに表示されてるものをコピーします。
WS000013.JPG
コピーができたらEC2インスタンス上で以下のコマンドを実行してください。

EC2インスタンス上
mysql -h コピーしてきたエンドポイント -P 3306 -u admin -p

上記のコマンドを打ち込んだらエンターを押します。
そうするとパスワードが求められるので、RDS作成時に設定したマスターパスワードを入力してください。
(-u の後のadminはRDSの作成の際に指定したマスターユーザーです。)
接続が成功すると以下の画面が表示されます。
WS000014.JPG
以上でEC2インスタンスからRDSインスタンスに接続することが成功しました。

4. 片付け

RDSインスタンスやEC2インスタンスは動かしていると料金が発生するので使用後は停止しておきます。
データベース一覧のページを開いて「アクション」をクリックして「停止」をクリック、「今すぐ停止」をクリックすると停止します。

EC2インスタンスの一覧ページを開いて「アクション」をクリック、「停止」をクリックすると停止します。

感想

今回の記事はいかがだったでしょうか?
この記事を読んでRDSの基本的な使いかたの参考になっていると幸いです。
今回ハンズオン記事を書きましたが実務で一度もAWSを使用したことが無いので、「実務ではこんな使いかたします!」みたいなコメントを頂けるとありがたいです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[MySQL][備忘録]接続が出来ないときはポートも確認!!

問題

MySQLへローカルなのに接続できない

原因と解決策

参考元 https://askubuntu.com/questions/272077/port-3306-appears-to-be-closed-on-my-ubuntu-server

どうやら設定ファイルによりlocalhostに制限されているみたいです。
ということで行頭に#を付けてコメントアウト!!
(1行○○消しても良いです)

修正前

bind-address 127.0.0.1

修正後

#bind-address 127.0.0.1

最後に

意外と気づかないところなのでお忘れなく!!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Rails】チェックされた項目だけDBに格納する

teratailで質問した後、自己解決しました。
サイトがすごく重くて(?)投稿できなかったので、先にこっちに書いておきます。

やりたかったこと

映画にまつわるアプリを作っており、データベースに映画作品についての簡単な情報を格納する必要がありました。
ターミナルから入力するのはダルかったので、ver.1では公開せず後々ユーザー向けに改良するつもりで、アプリ内に投稿フォームを作成。newメソッドで下記の映画情報をデータベースに登録できるようにしました。

  • title:作品タイトル
  • directed:監督の名前
  • story:あらすじ
  • service:あらすじの引用元の配信サービス名
  • time:再生時間

この中の配信サービス名を四つのチェックボックスの中から選択して、チェックの入ったサービス名をデータベースに格納するということがやりたかったのですが、参考にした記事がチェックボックスの項目とチェック状況を配列に格納するという内容だったため、実現するためには「チェックされた値だけを取り出す」必要がありました。

チェックボックスはcheck_boxタグを使って配置しています。

<div class="box form4">
  <%= check_box "service", "PrimeVideo" %>PrimeVideo
  <%= check_box "service", "Netflix" %>Netflix
  <%= check_box "service", "Hulu" %>Hulu
  <%= check_box "service", "U-NEXT" %>U-NEXT
</div>

コントローラー内で直接

service: params[:service]

と書くと、生成されたハッシュがDBのserviceカラムに格納されます。
チェックが無ければ0、されていれば1が値になります。

{"PrimeVideo"=>"0", "Netflix"=>"1", "Hulu"=>"0", "U-NEXT"=>"0"}

ここから、チェックされた項目のサービス名(つまり値が1のキー)だけ抽出して保存したい!
基礎知識がそもそも足りていないためか、ずっと方法が分からず放置していました。

解決方法

def req
 params[:service].each do | di1 , di2 |
  if di2 == "1"
   @movie = Movie.new(
      title: params[:title],
      directed: params[:directed],
      story: params[:story],
      service:di1,
      time: params[:time]
   )
   @movie.save
  end
 end
end

元々参考にしていた記事のコードを流用させていただきました。

  • params[:service]で値を受け取って、二つの変数にそれぞれサービス名チェック状態(0 or 1)を格納する
  • チェック状態が1である場合、相方の変数に格納されているサービス名をserviceカラムに保存する

という手順を踏みます。

サービス名のチェックがついていないとsaveメソッドがそもそも実行されないという雑な作りにしてしまいましたが……時間がないので今は前進できただけいいってことで…
落ち着いたらselectメソッドkeysメソッド、あるいはSQLの構文など、もう少し丁寧なコードにできそうな部分を中心に基礎固めをしようと思います。

きっかけをくださった回答者の皆さまに、心よりお礼申し上げます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

SQL(MySQL)入門! テーブルの作成・削除・変更 編

環境
 Windows 10
 MySQL : version(5.7.28)
使用アプリ
 コマンドプロンプト(Windowsマーク押して「cmd」って打ったら出てくるやつ)


テーブル操作 コマンドまとめ

テーブル作成

CREATE TABLE データベース名.テーブル名(
   カラム名1 データ型1 オプション,
   カラム名2 データ型2 オプション,
   カラム名3 データ型3 オプション,
   ...);
  • すでにデータベースに接続している場合(USE文を実行)は、[データベース名]の部分を省略可能。
  • データベースに接続していない状態でテーブルを作成したい場合は[データベース名].[テーブル名]の部分の記述が必要。
  • カラム名には、最大64バイトまで設定可能。
  • NULLを禁止する場合、オプション部分に「NOT NULL」を追加する。
  • キー(主キー、プライマリキー)を設定する場合、オプション部分に「PRIMARY KEY」を追加する。

テーブル一覧を表示

SHOW TABLES FROM データベース名;
  • データベースに接続中の場合は、FROM以降を省略可能。その場合、接続中のデータベース内のテーブル一覧が表示されます。

テーブル定義(カラムの情報)を確認する

SHOW COLUMNS FROM テーブル名 FROM データベース名 LIKE "条件"; 
  • データベースに接続中の場合は、FROM以降を省略可能。その場合、接続中のデータベース内のテーブル一覧が表示されます。
  • LIKE[条件]を指定することで。条件にあったカラムのみを抽出することが可能。

テーブル定義を変更

ALTER TABLE;

作成済みのテーブルに変更を加えたい場合、主に次のような変更が可能です。

  • テーブル名の変更
  •  ALTER TABLE 変更前のテーブル名 RENAME TO 変更したいテーブル名;
    
  • 主キーの追加

    ALTER TABLE テーブル名 ADD PRIMARY KEY (カラム名);
    
  • 主キーの削除

    ALTER TABLE テーブル名 DROP PRIMARY KEY;
    
  • インデックスの追加

    ALTER TABLE テーブル名 ADD INDEX インデックス名 (カラム名);
    
  • 複合インデックスを追加する場合は、カンマで区切る

    ALTER TABLE テーブル名 ADD INDEX インデックス名 (カラム名1,カラム名2,カラム名3...);
    
  • インデックスの削除

    ALTER TABLE テーブル名 DROP INDEX インデックス名;
    
  • カラム名のデータ型の変更

    ALTER TABLE テーブル名 CHANGE 変更前カラム名 変更後カラム名 変更後データ型;
    
  • カラムのデータ型のみの変更

    ALTER TABLE テーブル名 MODIFY カラム名 変更後データ型;
    
  • カラムの追加

    ALTER TABLE テーブル名 ADD カラム名 データ型 オプション;
    
  • 先頭のカラムに追加

    ALTER TABLE テーブル名 ADD カラム名 データ型 オプション FIRST;
    
  • 任意の場所にカラムを追加

    ALTER TABLE テーブル名 ADD カラム名 データ型 オプション AFTER 前のカラム;
    
  • カラムの削除

    ALTER TABLE テーブル名 DROP カラム名;
    

テーブルの削除

DROP TABLE データベース名.テーブル名;

すでにデータベースに接続している場合は、データベース名. の部分は省略可能。

DROP TABLE IF EXISTS テーブル名;

もし、テーブル名テーブルが存在するときだけ指定したテーブルを削除する

  • 複数のテーブルを削除

    DROP TABLE データベース名.テーブル名1, データベース名.テーブル名2...;
    

終わりに

SQLの基本のキ

  • SELECT 項目名1,項目名2,… FROM テーブル名 WHERE 条件;
  • INSERT INTO テーブル名 VALUES(値1,値2…);
  • UPDATE テーブル名 SET 項目名 = 値 WHERE 条件;
  • DELETE FROM テーブル名 WHERE 条件;

※文の終わりに;を付けるのをお忘れなく!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel HomesteadのDBをSequel Aceで接続する

参考記事
https://qiita.com/namizatork/items/7776a33383186cc57307

Host: 192.168.10.10 (Homestead.yamlに記載のもの)
Username: homestead
Password: secret

以上。
簡単でした!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む