質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.37%

mysql外部接続不可

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 822

score 11

PHP7.1でローカルで作成したWEBページをAWSのサーバ上に移行しようと考えています。
AWSのサーバ上でWEBページ自体は表示されますがMysqlへの接続が出来ません。
ローカル環境(XAMPP)ではCドライブにインストールしたMysqlに接続できるのですが、AWS上のMysqlにはphpから接続できません。

やってみた手順を記載します。

1)EC2でインスタンスを作成し、セキュリティグループ設定
【タイプ】-【プロトコル】-【ポート範囲】-【ソース】
HTTP-TCP-80-0.0.0.0/0
HTTP-TCP-80-::/0
SSH-TCP-22-0.0.0.0/0
MYSQL/Aurora-TCP-3306-0.0.0.0/0

2)TeratermからSSH接続

3)sudo yum install php71でphp7.1をインストール(同時にApacheもインストール)

4)同じく sudo yum install mysqlでmysqlをインストール

5)mysqlに接続し、データベースとテーブルを作成(DB名:Customers、テーブル名:company)

6)ローカル環境(XAMPP)でmysql(c:)に接続するテストファイルを作成(test.php)→接続OK (⑨の構文)

7)sudo chown -R ec2-user /var/www/htmlで権限付与

8)試しに/var/www/html上でindex.phpファイルを作成し、中身をphpinfo()だけにしてブラウザからEC2インスタンスのIP直打ちでini表示OK

9)TeratermのSSH SCPから、/var/www/html へphpファイル(test.php)送信

【test.phpの中身】

<?php
        $dsn = 'mysql:dbname=Customers;host=127.0.0.1;charset=utf8;';
        $user = 'root';
        $password = 'パスワード';

        try{
            $pdo = new PDO($dsn, $user, $password);
            $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $sql = "SELECT * FROM company"; 

        $stm = $pdo->prepare($sql);
        $stm->execute();
        $result = $stm->fetchAll(PDO::FETCH_ASSOC);

        foreach($result as $row){
        echo $row['companyname'];
        echo '<br>';
        }

        $pdo=null;
        }
        catch (PDOException $e){
            echo '接続に失敗しました。';
            echo 'Error:'.$e->getMessage();
            exit();
        }
 ?>

10)ブラウザからEC2インスタンスのIP/test.phpでアクセスすると真っ白な画面でエラーメッセージもなし

【わからないこと】
mysql外部接続やセキュリティなどを付け加えて検索したところ、my.cnfのbind-addressを変更すると書いてあるがmy.cnfを確認してもbind-addressがない

以下my.cnf(シャープは文字が大きくなるので全角に変換)
―――
[ec2-user@ip-**** etc]$ cat my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[ec2-user@ip-**** etc]$
―――

【試したこと】
mysql内で以下コマンドで外部接続許可設定をした
grant all privileges on *.* to root@"%" identified by 'PASSWORD' with grant option;

まだphpとmysqlを二カ月くらいしか触っていない初心者です。
原因と対処法等をお教え頂けますと幸いです。

【Mysqlバージョン】
mysql --version
mysql  Ver 14.14 Distrib 5.7.28, for Linux (x86_64) using  EditLine wrapper

【phpバージョン】
php -v
PHP 7.1.33 (cli) (built: Oct 31 2019 17:36:04) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

【Apacheバージョン】
httpd -v
Server version: Apache/2.4.41 (Amazon)
Server built:   Oct 15 2019 22:21:35

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • starsecond

    2020/01/09 18:22

    ブラウザから該当ページへアクセスした後、/var/log/mysqld.logをcatで確認しましたが該当時間のログは出ていませんでした。
    最後のログは、2020-01-09T05:33:03.810091Z 8 [Note] - 【IPアドレス】 になっています。
    Apacheのエラーログはどこから確認できますか?

    キャンセル

  • starsecond

    2020/01/09 18:28

    すいません、確認しました。

    PHP Fatal error: Uncaught Error: Class 'PDO' not found in /var/www/html/test.php:9\nStack trace:\n#0 {main}\n thrown in /var/www/html/test.php on line 9
    となっています。

    キャンセル

  • Orlofsky

    2020/01/09 19:16

    コードもエラーメッセージも https://teratail.com/help/question-tips#questionTips3-7 の [コード] に修正すれば、

    > シャープは文字が大きくなるので全角に変換

    は避けられるのでは?

    キャンセル

回答 2

checkベストアンサー

0

Class 'PDO' not found 

なのでphp-pdoが入っていないのではないでしょうか。
OSが何かわかりませんが、php-pdoとphp-mysqlあたりを入れてみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/10 12:23

    sudo yum install php-pdoでインストールしようとすると競合エラーが出たので一旦phpを全てアンインストールしてinstall php71*で再インストールしたら繋がりました!
    ありがとうございましたm(_ _)m

    キャンセル

0

ポートを開けるのは当然ですが、MySQL側の設定も必要になります。
/etc/mysql/mysql.conf.d/mysqld.cnfの

# bind-addressをコメントアウト
bind-address = 127.0.0.1
コード

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/09 18:37

    回答ありがとうございます。
    /etcの中にmysqlがなく、my.cnfしかないのは問題ですか?

    キャンセル

  • 2020/01/09 18:38

    パスが異なるのは、セットアップ時の設定なので、気にしなくていいと思います。
    my.cnfが対象のものになります。

    キャンセル

  • 2020/01/09 18:44

    my.cnfの中にbind-addressがないのですが、手動で追加してもよいのでしょうか。
    my.cnfの中身は以下となります。
    ―――
    [ec2-user@ip-**** etc]$ cat my.cnf
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    # Settings user and group are ignored when systemd is used.
    # If you need to run mysqld under a different user or group,
    # customize your systemd unit file for mysqld according to the
    # instructions in http://fedoraproject.org/wiki/Systemd

    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    [ec2-user@ip-**** etc]$
    ―――

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る