ショウジンブログ on Hatena

“お芝居をしないと、この社会では異邦人として扱われるほかない”

AWS EC2でPHP + MySQLをインストール@Amazon EC2

PHPとMySQLのインストール

# yum -y install httpd php mysql

再起動

# service httpd restart

PHPの確認

# php -v
PHP 5.3.28 (cli) (built: Dec 17 2013 00:28:38)

phpファイルをアップロードしてhello worldをechoして確認。オーケー。

f:id:showjinx:20160530171706p:plain

ついでに他に必要になりそうなパッケージもインストールしておきます。

$ sudo yum -y install php-devel php-gd php-mbstring php-mysql php-pdo php-pear php-xml php-imap

PHPを日本語で使うために必要な設定をしておきます。

$ sudo vim /etc/php.ini

上記の設定ファイルをvimで開いてdefault_charsetをUTF-8に変更し、この行の冒頭のコメントアウトを外します。

f:id:showjinx:20160530171823p:plain

[Date]のところでタイムゾーンをAsia/Tokyoにします。

f:id:showjinx:20160530171845p:plain

[mystring]の部分に以下を記述します。

f:id:showjinx:20160530171920p:plain

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
mbstring.detect_order = auto
mbstring.substitute_character = none;
mbstring.func_overload = 0
mbstring.strict_detection = Off

保存して完了。

MySQLの確認

# mysql -version
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

エラーになりました。

これだけだとMySQLは使えません。

MySQLを使えるようにする

# yum install mysql-server

これでmysql-serverをインストール完了。

設定ファイルはAWS用のmy.cnfがあるそうなのでそれを使うことにします。

# mv /usr/share/mysql/my-medium.cnf /etc/my.cnf

f:id:showjinx:20160530172119p:plain

yesで上書き。

設定ファイルを編集します。

# vim /etc/my.cnf

文字コードをutf-8に。

character-set-server=utf8

上記をmy.cnfに追記して保存。

mysqlを起動

# /etc/rc.d/init.d/mysqld start

mysqld を起動中:                                           [  OK  ]

問題ないようです。

パスワード変更等、セキュリティ面の設定をします。

# mysql_secure_installation

上記のコマンドを実行すると新しいrootユーザのパスワードを セットするか聞いてくるのでyをタイプ。

新しいパスワードを二回聞いてくるので
それに従います。

続いて既存の匿名ユーザを削除するか聞いてくるので
これもYesで。

Remove anonymous users? [Y/n] y
 ... Success!

リモートからのルートログインはしないので以下はnで。

Disallow root login remotely? [Y/n] n
 ... skipping.

テスト用のデータベースも不要です。

Remove test database and access to it? [Y/n] n
 ... skipping.

設定を今すぐに反映させます。

Reload privilege tables now? [Y/n] yes
 ... Success!

MySQLモニターを起動して確認してみます。

# mysql -u root -p

起動を確認できました。

文字コードを確認します。

mysql> show variables like 'char%';

f:id:showjinx:20160530172333p:plain

latin1が残ってます。
これはいけません。文字化け、トラブルの元です。

なので再度、my.cnfを編集します。

[mysqld]セクション内に記述

character-set-server=utf8

末尾に以下を追加

[mysql] default-character-set=utf8

先の作業で末尾に記述していた以下を削除

character-set-server=utf8

設定を有効化するためにmysqlを停止、再起動

# /etc/init.d/mysqld restart

f:id:showjinx:20160530172436p:plain

オーケー。

mysqlの自動起動を設定

# /sbin/chkconfig mysqld on

設定が有効になっているか確認

# /sbin/chkconfig --list mysqld

f:id:showjinx:20160530172514p:plain

onとoffが上記の設定になっていればオーケー。

MySQLモニターを立ちあげて文字コードを再度確認。

# mysql -u root -p
mysql> show variables like 'char%';

f:id:showjinx:20160530172547p:plain

latin1がなくなってutf8に。オーケー。

匿名ユーザの存在(パスワードが必要のないユーザ)はときにトラブルにもなるのでこれを調べて、存在するなら削除しておく。

以下コマンドを実行。

mysql> select host,user from mysql.user;

右カラムに空白があるのが匿名ユーザ。
それがある場合は以下のコマンドで匿名ユーザを削除。

mysql> delete from user where user = '';

データベースユーザーの追加

ここまでの段階ではユーザはrootのみ。

他にデータベースユーザを追加するには以下のようにして実行する。

すでにそれ用のDB(sample)はphpMyAdminで作成済みなので
このDBにおいてのみ有効なユーザー

sample
admin

の二つを作成する。

データベース名:sample
ユーザ「sample」:パスワード「sysdev3306」
ユーザ「admin」:パスワード「sysdev」

を設定する。

mysqlモニターで

まずユーザ「sample」から

mysql> grant all privileges on sample.*
    -> to 'sample@localhost'
    -> identified by 'sysdev3306';
Query OK, 0 rows affected (0.01 sec)

続いてユーザ「admin」 (繰り返すけれど、このユーザ追加は「sample」においてのみ)

mysql> grant all privileges on sample.*
    -> to 'admin@localhost'
    -> identified by 'sysdev';
Query OK, 0 rows affected (0.00 sec)

最後にユーザーテーブルをリフレッシュ

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

以上。