ServersMan@VPSのCentOS5をデータベースサーバーへ_その1

ServersMan@VPSのCentOS5をデータベースサーバーとして利用してみた。

さくらのレンタルサーバーのみでは色々と不都合が出てきたので、
同じ月額500円のVPSを試してみた。http://serversman.com/


試した内容

0.さくらVSサーバーズマンスペック比較
↓
1.初期設定(ユーザー追加等)
↓
2.MYSQLの初期設定
↓
3.MYSQLポートの開放
↓
4.MYSQLのGUIから接続
↓
5.Portforwardigで、SSHを通じたMYSQLへの接続

【0.さくらVSサーバーズマンスペック比較】

さくら
root権限×
InnoDB利用不可×

ServersMan
メモリが256で、スワップ等禁止×

という感じで、コストパフォーマンスは一長一短ぽい。

【1.初期設定(ユーザー追加等)】

ServersMan@VPSのCentOS5で最初にする設定を参考にする
http://maeda.farend.ne.jp/blog/2010/04/29/serversman-centos-initial-setup/


不必要なものをアンインストール

# yum erase smadmin serversman
# /etc/init.d/httpd restart

http://maeda.farend.ne.jp/blog/2010/04/29/serversman-centos-initial-setup/

CentOSバージョン確認

#less /etc/redhat-release
<||

**【2.MYSQLの初期設定】
MYSQLのインストール(既にインストール済の場合は省く)
>||
# yum install mysql-server
# yum install mysql-cluster

MYSQLにログイン+rootパスワード設定

#mysql -u root
SET PASSWORD FOR root@localhost=PASSWORD('*******');

MYSQLへのログイン

#mysql -u root -p
<||

ユーザー追加+権限付与 
>||
grant all privileges on *.* to 'ユーザーID'@'ドメイン名' identified by 'パスワード';
grant all privileges on *.* to 'ユーザーID'@'%' identified by 'パスワード'; 

※権限の付与方法
【グローバル】
grant 権限 on *.*

【データベース】
grant 権限 on データベース名.*

【テーブル】
grant 権限 on データベース名.テーブル名

※アクセス権限の付与方法
【ローカルホスト】
to ユーザー名@localhost

【すべてのサーバー】
to ユーザー名@'%'    %はLIKE演算子と同じ意味

【ホスト、IP】
to ユーザー名@サーバー名
to ユーザー名@IP

【ネットワーク単位】
to ユーザー名@'192.168.1.%'
to ユーザー名@'192.168.%'

※権限の確認
select user,host from mysql.user;

【3.MYSQLポートの開放】

外部からMYSQLに接続を可能にするには下記3点が必須。

Z.TELNETで確認
A.MYSQLが外部からの接続待ち受け(LISTEN)をする
B.Netfilter/iptablesで接続制限をかけていないことの確認
C. my.cnfでbind-addressが設定されていないことを確認
D.mysqldの権限で、外部からの接続を許可する


Z.TELNETで確認

[http]
telnet 182.163.50.XX 80  >繋がる
[ftp]
telnet 182.163.50.XX 21
[mysql]
telnet 182.163.50.XX 3306 >繋がらない
A.空いているポートを確認。
# netstat -nl
# netstat -lanput (どのプログラムから動かしているか確認)

B-1.IPテーブルズの起動
# service iptables start
# service iptables restart
http://wingse.blog57.fc2.com/blog-entry-110.html

B-2.IPtablesの確認
# iptables -L
>>>ACCEPT     tcp  --  anywhere             anywhere


B-3.3306をポートに追加
# iptables -A INPUT -p tcp --sport 3306 -j ACCEPT
# service iptables save

HTTPの許可。
Apacheサーバを起動している場合、設定。
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

B-4.IPtablesの確認
# iptables -L
>>>ACCEPT     tcp  --  anywhere             anywhere            tcp spt:mysql

B-5.IPtablesを直接確認
/etc/hosts.allowと/etc/hosts.deneyの設定を確認


C.
vi /etc/my.cnf
bind-addressが設定されていないことを確認

(参考)
>とりあえず、次の条件が必要です。

>1. MySQLTCPでも外部からの接続待ち受けをしていること。
>  確認:netstat -tlpn 等(0.0.0.0:3306 〜 LISTEN xxxx/mysqld の表示があれば)
>     ※netstat の -p オプションは root限定なので注意!!
>  手段:設定オプションを色々いじれば…
>  既定:デフォルトではTCPポート3306番でListenしているかと
>  備考:TCPを使用しない場合は、UNIXドメインソケットでのローカル接続のみ

>2. Netfilter/iptables で、接続制限をかけていないこと。
>  確認:iptables -t テーブル -vnL 等 (テーブルは主に filter 他に nat,mangle)
>  手段:iptablesコマンドで制限を無効化するなり、mysqlの通信を許可して下さい
>  既定:インストール時のファイアウォール設定によりけり

>3. mysqldの権限テーブルで、外部からの接続を許可すること。
>  手段:mysqlユーザの追加方法、GRANTの使用法等
>  原理:アクセス制御の仕組み

【5.Portforwardigで、SSHを通じたMYSQLへの接続】

http://www.onamae-server.com/support/faq/vps/common/common_28.php
のようにVPSによってはポートの開放自体が自由にできないこともあるので、
SSHポートフォワーディングの設定についても調べてみた。


★ポートフォワーディングについてまとめ

http://d.hatena.ne.jp/tashen/20080730/1217439319
http://www.pakunet.jp/ssh_forward_for_putty
http://code.xenophy.com/?p=416#

ssh -L 3306:localhost:3306 admin@182.163.50.81


参考
>「Linuxがクライアントの場合」
ssh -N -f -L 3306:192.168.1.1:3306 work@192.168.1.1

>「Windowsがクライアントの場合」
puttyでトンネル=>源ポート8081、送り先localhost:8081で追加する
>L8081 localhost:8081

【その他】

メモリの空き状況
# free -m
ディスクの空き状況
# df -h
http://d.hatena.ne.jp/stakizawa/20080324/t1
ダイエットの仕方
http://d.hatena.ne.jp/sh2/20100415