2011年2月25日金曜日

PHPとpostgresqlでテーブル一覧を取得

どうも、オレ@始業しましたです。

忘れないうちにメモメモ。
DBがpostgreSQLでphpからテーブル一覧を取得するためのクエリについて。
postgreSQLのバージョンは7.4.12ですが、おそらく他のバージョンでも大丈夫かな?(未確認)
PHPのバージョンは5以上です。
<?php
$pdo = new PDO('pgsql:host=localhost;port=5432;dbname=dbname;user=username;password=password');
$sql = 'select pg_statio_user_tables.relname
from pg_catalog.pg_class,pg_catalog.pg_statio_user_tables
where relkind='r'
and pg_catalog.pg_statio_user_tables.relid=pg_catalog.pg_class.relfilenode';
$stmt = $pdo->query($sql);
var_dump($stmt->fetchAll());
連想配列(fetchAll()した結果)でテーブル一覧が取得できます。
ただし、作った覚えのないテーブルも含まれているので要注意。

ちなみに、MySQLだと簡単で
<?php
$sql = 'show tables';
$stmt = $pdo->query($sql);
var_dump($stmt->fetchAll());
です。

以上でぇぇぇす。

2011年2月23日水曜日

vimでバックスペースが効かない

どうも、俺@残業中です。

いつも忘れるので備忘録。
vimでバックスペースを入れても無反応 or DELETE状態になってる場合。
■対策1
.vimrcを編集
$ vim ~/.vimrc
--------------------
noremap ^? ^H
noremap! ^? ^H
noremap  ^H
noremap!  ^H
を追加。
^?はインサートモードでCtrl + v + BackSpace
^HはインサートモードでCtrl + v + Ctrl + h

■対策2
sttyを設定
$ stty -a
erase = ^H
があることを確認。
もしなければ、
stty erase ^H
を設定する。


これでも出来なければまたググってくださぁぁぁあぁぁい。

2011年2月16日水曜日

innotopを使う

どうも、オレ@仕事中です。

オデの日記::mytopを使うに続きまして、innotopの利用です。

今回参考にさせてもらったサイトはThe Programmer’s Guide to the Parallel World::MySQL: innotopとサンプリングです。ありがとうございます。

まずinnotop(source forge)から本体をDLします。
# wget 'http://downloads.sourceforge.net/project/innotop/innotop/1.6.0/innotop-1.6.0.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Finnotop%2F&ts=1297835567&use_mirror=jaist'
解凍し、インストールします。
# unzip innotop-1.6.0.zip
 # cd innotop-1.6.0
 # perl Makefile.PL
 # make install
ちなみに、僕の環境ではここでまたperlモジュールのエラーが出ました。
なのでまたもやcpan利用します。
# cpan install Time::HiRes
 # make install
これでOK。

初回実行時に色々設定を質問されます。
# innotop
You have not defined any database connections.
Choose a name for the connection.  It cannot contain whitespace, colons or semicolons.

Enter a name:  ここは何でもOK
----------------------------------------------------------------------
Typical DSN strings look like
   DBI:mysql:;host=hostname;port=port
The db and port are optional and can usually be omitted.
If you specify 'mysql_read_default_group=mysql' many options can be read
from your mysql options files (~/.my.cnf, /etc/my.cnf).

Enter a DSN string:  DBI:mysql:database=DatabaseName;host=hostname;port=portのような形で入力
何も指定しない場合はDBI:mysql:;; かな
失敗したらユーザのホームディレクトリに~/.innotop/というディレクトリがあるので
丸ごと削除で再度設定できる&~/.innotop/innotop.iniを書き換える事で修正可能です。

# innotop -d 秒間
のようにして利用できます。
mytopよりinnotopの方が見やすいと思いました。

以上でぇぇぇえぇす。

mytopを使う

どうも、オレ@仕事中です。

今日はMySQLの実行状況を確認できるmytopというツールの紹介します。
また後でinnotopについても書く(予定)です。
Unixコマンドのtopをmysql版にしたようなものです。

まず上記のサイトからtarボールをDLし解凍します。
# wget 'http://jeremy.zawodny.com/mysql/mytop/mytop-1.6.tar.gz'
# tar zxvf mytop-1.6.tar.gz
# cd mytop-1.6
次にインストールです。

# perl Makefile.pl
ここで以下のようなエラーでる場合
Warning: prerequisite DBD::mysql 1 not found.
Warning: prerequisite Term::ReadKey 2.1.not found.
cpanモジュールでインストールしましょう。

# cpan install DBD::mysql # 該当サーバでMySQLサービスを停止させておいてね!
 # cpan install Term::ReadKey
これでOK!
ではインストール。ドキュメント通りにやります。

# make
 # make test
 # make install
これでインストール完了です。

あとは実行するのみ。
# mytop -s1 -hlocalhost -uUserName -pPassword
-s は表示間隔(秒)です。

ちなみに、MySQLバージョン5以上の場合はmytopソース内の「SHOW STATUS」を「SHOW GLOBAL STATUS」に書き換える必要があります。

MySQL on localhost (5.0.41)                                                                                                                                                                                                         up 0+00:14:17 [14:33:46]
 Queries: 81.0   qps:    0 Slow:     0.0         Se/In/Up/De(%):    00/00/00/00 
             qps now:    0 Slow qps: 0.0  Threads:    1 (   1/   0) 00/00/00/00 
 Key Efficiency: 100.0%  Bps in/out:   0.2/ 14.4   Now in/out:   8.4/ 1.1k

      Id      User         Host/IP         DB      Time    Cmd Query or State                                                                                                                                                                 
      --      ----         -------         --      ----    --- ----------                                                                                                                                                                               
       5      root       localhost       test         0  Query show full processlist
実行中スレッドが黄色、接続のみのスレッドが白、システムに関するスレッドが緑色です。

内容は
Queries: 発行されたクエリの総数
 qps: 秒間の平均クエリ数
 Slow: スロークエリ総数
 Se/In/Up/De: select、Insert、Update、Delete分の比率
 qps now: 現在の秒間平均クエリ数
 Slow qps: 現在の秒間平均スロークエリ数
 Threads: スレッド数(アクティブスレッド数/総スレッドキャッシュ数)
 Key Efficiency: ky_bufferヒット数
 Bps in/out: 合計のデータ転送速度(bytes/sec)
 Now in/out: 現在のデータ転送量(bits/sec)

FLATzブログ::mytopの使い方を参考にさせてもらいました。

以上どぇぇぇえす。

2011年2月9日水曜日

javascriptでsleepみたいな事やりたい

どうも、俺@残業中です。

javascriptでsleep();、、そんなものはございません><

ただし、似たようなものでwindow.setInterval(func, millisec);があります。
例えば現在時刻をリアルタイムに表示させるには
<div id="nowtime"></div>
<script type="text/javascript">
  window.setInterval(setTimer, 1000);
  function setTimer() {
    var nowdate = new Date();
    var year = nowdate.getFullYear();
    var mon  = nowdate.getMonth() + 1;
    var day  = nowdate.getDate();
    var hour = nowdate.getHours();
    var min  = nowdate.getMinutes();
    var sec  = nowdate.getSeconds();

    var elem = document.getElementById("nowtime");
    elem.innerHTML = year + "年" + mon + "月" + day + "日" + " " + hour + "時" + min + "時" + sec + "秒"; 
  }
</script>
でできちゃいますよ!
間違ってもwhile(true)とかで無限ループさせないようにね!

以上でぇぇぇぇす。

2011年2月1日火曜日

PPTPサーバ構築

どうも、俺@仕事中です。

docomoのGalaxyTab+ポケットwifiルーターを1円で購入(月額5,000円くらい)したので、休みの日にネットブック持ち歩かず優雅にGalaxyTabを持ち歩くことにしました。
突然の障害はGalaxyTabからsvn接続で対応!と計画中です。(かなり操作しづらいけど)
androidの「connectbot」というアプリがsshクライアントとして利用できます。

なのでVPNサーバ(PPTP)を構築することにしました。
超簡単です。
OSはCentOS4.3です。

まずpppをインストール。http://ppp.samba.org/から最新のソースをDLしておく
# wget 'ftp://ftp.samba.org/pub/ppp/ppp-2.4.5.tar.gz'
# tar zxvf ppp-2.4.5.tar.gz
# cd ppp-2.4.5
# ./configure
# make && make install
これでよし。

次にpptpdを最新ソースからインストール。
# wget 'http://sourceforge.net/projects/poptop/files/pptpd/pptpd-1.3.4/pptpd-1.3.4.tar.gz/download'
# tar zxvf pptpd-1.3.4.tar.gz
# cd pptpd-1.3.4
# ./configure
# make && make install
これでよし。

次は設定ファイルを修正します。
まずは/etc/pptpd.conf
# vim /etc/pptpd.conf
------------------------------
 option /etc/ppp/options.pptpd
 localip 192.168.0.15 PPTPサーバのローカルIP
 remoteip 192.168.0.110-131 # クライアントに割り振られるローカルIP。ローカルネットワーク内の問題なさそうな範囲でOK

次は/etc/ppp/options.pptpd
# vim /etc/ppp/options.pptpd
------------------------------
lock
noauth
nobsdcomp
nodeflate
idle 0
maxfail 0
# 書いたほうが良いかもしれない
# name servername
# ms-dns 192.168.0.1 ←クライアントへ通知するDNSサーバアドレス
どこかのサイトを参考にさせてもらいました。(どこだったか忘れちゃいました><)

次は/etc/ppp/chap-secrets
# vim /etc/ppp/chap-secrets
------------------------------
# Secrets for authentication using CHAP
# client    server  secret          IP addresses
UserName * "Password" *
UserNameとPasswordにログインするユーザ名、パスワードを設定します。

もうちょいです。ルーティングの設定。
# vim /etc/sysctl.conf
-------------------------------
# net.ipv4.ip_forward = 0 コメントアウト
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
この設定で反映させます。
# sysctl -p

ここまで来たらpptpdサーバを起動させます。
/sbin/service pptpd start


あとはGalaxyTabなどのクライアントからVPN接続(PPTP)するだけ!
L2TP版でもやったけど、上手く行かなかったので、、、また今度試してみます><

以上どぇぇぇえぇぇぇぇぇえぇぇす。