vim(ver6以上)でPHPのデバッグ(ステップ実行など)をする方法
FreeBSD-6.2で確認しています。
1. 事前準備。portsツリーを構築
portsnap fetch && portsnap extract && portsnap update;
sudo cp -r /usr/ports/Mk /usr/ports/mk;
2. pythonをインストール
cd /usr/ports/lang/python;
make install clean;
3. vim(>=6)を--enable-pythoninterp --with-features=big コンフィグオプション付きでインストール
cd /usr/ports/editors/vim;
make WITHOUT_X11=yes NO_GUI=yes WITH_PYTHON=yes install clean;
4. vim onlineからvimのdebuggerプラグインを取得
cd ~/.vim/
fetch -o debugger.tgz "http://www.vim.org/scripts/download_script.php?src_id=3688"
5. 展開し ~/.vim/plugin/配下に配置
tar xvzf debugger.tgz;
3. phpのxdebug拡張モジュールをインストール。
peclでもソースからでもどちらでもOK。
4. xdebug.iniを編集
詳細調査中です
xdebug.remote_enable = "1"
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "localhost"
xdebug.remote_mode = "req"
xdebug.allowed_clients = ""
xdebug.idekey=default
5. apacheをリスタート
6. vimでPHPソースを開き、F5押下
9000番をLISTENします
7. 5秒以内にブラウザから該当ソースにhttp経由でアクセス
URL引数に下記を足してアクセス
http://xxx.xxx.xxx/?XDEBUG_SESSION_START=default
F2でStepInto
F3でStepOver
F4でStepOut
F5でデバッグスタート & Run
F11で変数確認
F12でカーソル上の変数確認
,eで変数書き換え
:Bpでブレークポイント
など
詳細調査中です
超便利です
vim7でomni補完(tabで動作するtipsも)
.vimrcに下記のように書いておくと便利です。
で、使い方はvimを立ち上げて入力モードにして、適当なPHPファイルを開き、
autocmd FileType html :set filetype=xhtml
autocmd Filetype html :set omnifunc=htmlcomplete#CompleteTags
autocmd Filetype php :set omnifunc=phpcomplete#CompletePHP
まで打ったところで、C-x,C-oと入力。するとmb_から始まる関数群がずらりと表示され、さらに画面上部には関数の引数説明まで出るという至れり尽くせり。
mb_
ただ、C-x,C-oというキーストロークがめんどくさいのですが、それをtabキーで動作するtipsが下記。
下記内容を.vimrcに書いておけばOKです。
C-Space でも動くようにしたいのですがvimスクリプト良く分かりません。。
function InsertTabWrapper()
if pumvisible()
return "\"
endif
let col = col('.') - 1
if !col || getline('.')[col - 1] !~ '\k\|<\|/'
return "\"
elseif exists('&omnifunc') && &omnifunc == ''
return "\"
else
return "\\ "
endif
endfunctioninoremap
=InsertTabWrapper()
分かる方いらっしゃったら教えてください。
補完の色が見辛いのでそれの変更方法
set t_Co=16
set t_Sf=[3%dm
set t_Sb=[4%dmhi Pmenu ctermbg=8
hi PmenuSel ctermbg=12
hi PmenuSbar ctermbg=0
MySQL 5.0, 5.1 でクラスタを組んでみる
目的
「書き込みするDBの可用性確保」を焦点に、 MySQL4.1以降で実装されているNDB Clusterについて調査・構築・動作テストした。
基本的にはGAになっているMySQL5.0をメインに調査したが、5.0のクラスタは オンメモリという致命的な制限があるため、現在はベータであるが近日GAになるであろう 5.1の調査・構築・動作テストも行なった。※とはいえ5.1もデータはディスクにおけるがインデックスはメモリにのせることになる。
「MySQLのクラスタとは?」といったような基本的なことは他のサイトを参照ください。
サーバー群
xxxxxxxx.co.jp 172.18.6.59 #Data兼SQLノード
xxxxxxxx.co.jp 172.18.6.60 #Data兼SQLノード
xxxxxxxx.co.jp 172.18.6.61 #Data兼SQLノード
xxxxxxxx.co.jp 172.18.6.62 #Data兼SQLノード
xxxxxxxx.co.jp 172.18.6.63 #管理ノード
- Dataノードは「NoOfReplicas」(後述)の倍数台必要。最低2台。
- 管理ノードも2台以上が望ましい
- SQLノードはDataノードと兼ねてもいいし、あるいは分離することも可能
OSなど
FreeBSD-6.1
jail環境にて構築
ユーザー・グループの追加(全ノード)
sudo vi /etc/group
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
mysql:*:10001:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
sudo vipw;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
mysql:*:10001:10001::0:0:MySQL User:/tmp:/bin/sh
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
MySQL-5.0.27-maxダウンロード・展開・コピー(全ノード)
※5.1も同様の手順でOK。tar ballは下記からダウンロードした。 http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.14-beta-freebsd6.0-x86_64.tar.gz/from/http://mirror.mysql-partners-jp.biz/
fetch -o mysql-max-5.0.27-freebsd6.0-x86_64.tar.gz "http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-max-5.0.27-freebsd6.0-x86_64.tar.gz/from/http://mirror.mysql-partners-jp.biz/";
tar xvzf mysql-max-5.0.27-freebsd6.0-x86_64.tar.gz;
sudo cp -r mysql-max-5.0.27-freebsd6.0-x86_64 /usr/local/;
sudo ln -s /usr/local/mysql-max-5.0.27-freebsd6.0-x86_64 /usr/local/mysql;
cd /usr/local/mysql;
sudo scripts/mysql_install_db --user=mysql;
sudo chown -R root .;
sudo chown -R mysql data;
sudo chgrp -R mysql .;
MySQLセットアップ(SQLノードとDataノード)
sudo vi /etc/my.cnf;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
[MYSQLD]
ndbcluster
ndb-connectstring="172.18.6.63"
old-passwords=1
interactive_timeout=900
wait_timeout=900
max_connections=100
[MYSQL_CLUSTER]
ndb-connectstring="172.18.6.63"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
※5.1も同様の手順でOK。
管理ノードセットアップ(管理ノード)
sudo mkdir /var/lib /var/lib/mysql-cluster;
sudo vi /var/lib/mysql-cluster/config.ini;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=150M
IndexMemory=75M
# Managment Server
[NDB_MGMD]
id=1
hostname=172.18.6.63
datadir=/var/lib/mysql-cluster
# Storage Engines
[NDBD]
id=2
hostname=172.18.6.62
datadir=/usr/local/mysql/data
[NDBD]
id=3
hostname=172.18.6.61
datadir=/usr/local/mysql/data
[NDBD]
id=4
hostname=172.18.6.60
datadir=/usr/local/mysql/data
[NDBD]
id=5
hostname=172.18.6.59
datadir=/usr/local/mysql/data
# SQL node options:
[MYSQLD]
[MYSQLD]
[MYSQLD]
[MYSQLD]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
MYSQLDの項目はSQLノードの入れ替え等に対応しやすいように、敢えて空にしておきます。
なんなら多めに取っておいてもいいかもしれません。
※5.1も同様の手順でOK。
管理ノード起動(管理ノード)
※5.1も同様の手順でOK。
sudo /usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini;
/usr/local/mysql/bin/ndb_mgm;
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 4 node(s)
id=2 (not connected, accepting connect from 172.18.6.62)
id=3 (not connected, accepting connect from 172.18.6.61)
id=4 (not connected, accepting connect from 172.18.6.60)
id=5 (not connected, accepting connect from 172.18.6.59)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @172.18.6.63 (Version: 5.0.27)
[mysqld(API)] 4 node(s)
id=6 (not connected, accepting connect from any host)
id=7 (not connected, accepting connect from any host)
id=8 (not connected, accepting connect from any host)
id=9 (not connected, accepting connect from any host)
管理ノードで確認(管理ノード)
※5.1も同様の手順でOK。
ndb_mgm>
Node 2: Started (version 5.0.27)
Node 3: Started (version 5.0.27)
Node 5: Started (version 5.0.27)
Node 4: Started (version 5.0.27)
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 4 node(s)
id=2 @172.18.6.62 (Version: 5.0.27, Nodegroup: 0, Master)
id=3 @172.18.6.61 (Version: 5.0.27, Nodegroup: 0)
id=4 @172.18.6.60 (Version: 5.0.27, Nodegroup: 1)
id=5 @172.18.6.59 (Version: 5.0.27, Nodegroup: 1)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @172.18.6.63 (Version: 5.0.27)
[mysqld(API)] 4 node(s)
id=6 (not connected, accepting connect from any host)
id=7 (not connected, accepting connect from any host)
id=8 (not connected, accepting connect from any host)
id=9 (not connected, accepting connect from any host)
管理ノードで確認(管理ノード)
※5.1も同様の手順でOK。
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 4 node(s)
id=2 @172.18.6.62 (Version: 5.0.27, Nodegroup: 0, Master)
id=3 @172.18.6.61 (Version: 5.0.27, Nodegroup: 0)
id=4 @172.18.6.60 (Version: 5.0.27, Nodegroup: 1)
id=5 @172.18.6.59 (Version: 5.0.27, Nodegroup: 1)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @172.18.6.63 (Version: 5.0.27)
[mysqld(API)] 4 node(s)
id=6 @172.18.6.59 (Version: 5.0.27)
id=7 @172.18.6.60 (Version: 5.0.27)
id=8 @172.18.6.61 (Version: 5.0.27)
id=9 @172.18.6.62 (Version: 5.0.27)
5.0 動作確認(SQLノード)
※5.1のオンディスクは手順が異なります。まずは5.0から。
/usr/local/mysql/bin/mysql;mysql> use test;
mysql> CREATE TABLE ctest (i INT) ENGINE=NDBCLUSTER;
mysql> INSERT INTO ctest () VALUES (1);
mysql> SELECT * FROM ctest;
-
-
-
-
-
-
- +
-
-
-
-
-
i |
-
-
-
-
-
-
- +
-
-
-
-
-
1 |
-
-
-
-
-
-
- +
-
-
-
-
-
他のSQLノードでも確認。
/usr/local/mysql/bin/mysql;
-
-
-
-
-
-
- +
-
-
-
-
-
i |
-
-
-
-
-
-
- +
-
-
-
-
-
1 |
-
-
-
-
-
-
- +
-
-
-
-
-
1 row in set (0.01 sec)
mysql> INSERT INTO ctest () VALUES (2);
mysql> SELECT * FROM ctest;
-
-
-
-
-
-
- +
-
-
-
-
-
i |
-
-
-
-
-
-
- +
-
-
-
-
-
1 |
2 |
-
-
-
-
-
-
- +
-
-
-
-
-
2 rows in set (0.00 sec)さらに他のSQLノード(あるいは最初のノードに戻って)でも確認。
/usr/local/mysql/bin/mysql;
mysql> use test;
mysql> SELECT * FROM ctest;
-
-
-
-
-
-
- +
-
-
-
-
-
i |
-
-
-
-
-
-
- +
-
-
-
-
-
1 |
2 |
-
-
-
-
-
-
- +
-
-
-
-
-
2 rows in set (0.00 sec)
5.0 障害発生時動作確認
下記の4つのDBノードのうち、id=2とid=4のndbdをダウンさせて、SQLを発行してみたところ、問題なく動作した。
id=2 @172.18.6.62 (Version: 5.0.27, Nodegroup: 0, Master)
id=3 @172.18.6.61 (Version: 5.0.27, Nodegroup: 0)
id=4 @172.18.6.60 (Version: 5.0.27, Nodegroup: 1)
id=5 @172.18.6.59 (Version: 5.0.27, Nodegroup: 1)
5.1 動作確認(SQLノード)
/usr/local/mysql/bin/mysql;mysql> use test;
mysql> CREATE LOGFILE GROUP lg_1
-> ADD UNDOFILE 'undo_1.dat'
-> INITIAL_SIZE 16M
-> UNDO_BUFFER_SIZE 2M
-> ENGINE NDB;mysql> ALTER LOGFILE GROUP lg_1
-> ADD UNDOFILE 'undo_2.dat'
-> INITIAL_SIZE 12M
-> ENGINE NDB;
mysql> CREATE TABLESPACE ts_1
-> ADD DATAFILE 'data_1.dat'
-> USE LOGFILE GROUP lg_1
-> INITIAL_SIZE 32M
-> ENGINE NDB;mysql> ALTER TABLESPACE ts_1
-> ADD DATAFILE 'data_2.dat'
-> INITIAL_SIZE 48M
-> ENGINE NDB;
mysql> CREATE TABLE ctest ( i INT, INDEX(i) ) TABLESPACE ts_1 STORAGE DISK ENGINE=NDBCLUSTER;
mysql> INSERT INTO ctest () VALUES (1);
mysql> SELECT * FROM ctest;
-
-
-
-
-
-
- +
-
-
-
-
-
i |
-
-
-
-
-
-
- +
-
-
-
-
-
1 |
-
-
-
-
-
-
- +
-
-
-
-
-
他のSQLノードでも確認。
/usr/local/mysql/bin/mysql;
-
-
-
-
-
-
- +
-
-
-
-
-
i |
-
-
-
-
-
-
- +
-
-
-
-
-
1 |
-
-
-
-
-
-
- +
-
-
-
-
-
1 row in set (0.01 sec)
mysql> INSERT INTO ctest () VALUES (2);
mysql> SELECT * FROM ctest;
-
-
-
-
-
-
- +
-
-
-
-
-
i |
-
-
-
-
-
-
- +
-
-
-
-
-
1 |
2 |
-
-
-
-
-
-
- +
-
-
-
-
-
2 rows in set (0.00 sec)さらに他のSQLノード(あるいは最初のノードに戻って)でも確認。
/usr/local/mysql/bin/mysql;
mysql> use test;
mysql> SELECT * FROM ctest;
-
-
-
-
-
-
- +
-
-
-
-
-
i |
-
-
-
-
-
-
- +
-
-
-
-
-
1 |
2 |
-
-
-
-
-
-
- +
-
-
-
-
-
2 rows in set (0.00 sec)
5.1 実ファイル(Dataノード)
下記のような配置になります。
sudo ls -alGF /usr/local/mysql/data/ndb_5_fs/
total 110873
drwxr-x--- 9 root mysql 512 Dec 14 17:05 ./
drwxr-x--- 5 mysql mysql 512 Dec 14 16:19 ../
drwxr-x--- 4 root mysql 512 Dec 14 16:18 D1/
drwxr-x--- 3 root mysql 512 Dec 14 16:17 D10/
drwxr-x--- 3 root mysql 512 Dec 14 16:17 D11/
drwxr-x--- 4 root mysql 512 Dec 14 16:18 D2/
drwxr-x--- 3 root mysql 512 Dec 14 16:17 D8/
drwxr-x--- 3 root mysql 512 Dec 14 16:17 D9/
drwxr-x--- 3 root mysql 512 Dec 14 16:18 LCP/
-rw-r--r-- 1 root mysql 33619968 Dec 14 16:45 data_1.dat
-rw-r--r-- 1 root mysql 50397184 Dec 14 17:05 data_2.dat
-rw-r--r-- 1 root mysql 16777216 Dec 14 16:43 undo_1.dat
-rw-r--r-- 1 root mysql 12582912 Dec 14 17:03 undo_2.dat
障害時動作テスト
停電等で、全ノードがダウンしてもデータが消失しないか
管理デーモンシャットダウン(管理ノード)
/usr/local/mysql/bin/ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> shutdown
Node 2: Cluster shutdown initiated
Node 3: Cluster shutdown initiated
Node 4: Cluster shutdown initiated
Node 5: Cluster shutdown initiatedNode 2: Node shutdown completed.
Node 3: Node shutdown completed.
4 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.
Node 4: Node shutdown completed.
ndb_mgm> exit
NDBDシャットダウン(Dataノード)
前述の管理デーモンshutdownにて自動的にダウンします。なので作業不要。
MySQLデーモンシャットダウン(SQLノード)
データ消失のテストとしては、特にSQLノードは落とす必要はないがついでなので落としちゃいます。
sudo /usr/local/mysql/support-files/mysql.server stop
OS自体のシャットダウン
今回はjail環境なので、仮想的にサーバーを落としメモリをクリアします。
OS起動
今回はjail環境なので、仮想的にサーバーを起動します。
各ノードの起動
詳細はそれぞれの段落を参照
データの確認
データが消失していないことが確認できた。
/usr/local/mysql/bin/mysql;
mysql> use test;
mysql> SELECT * FROM ctest;
+------+
| i |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec)
現場で使える MySQL
MySQL Clustering (ペーパーバック)
実践ハイパフォーマンスMySQL (単行本)
DOPING PANDAのGO THE DISTANCEがカッコ良すぎる件
少し前Yahoo!ミュージックのサウンドステーションなんかにも出てましたが、恥ずかしながら最近DOPING PANDAというバンドをm-floとのコラボ経由で知りまして、80'sエッセンスな打ち込みデジタルサウンドと切れ味鋭いロックの融合感が私的に超ツボにはまってしまって、ガッツリのめり込んでます。
表題の「GO THE DISTANCE」ですが、元はDisneyの「ヘラクレス」の主題歌です。
それを、2002年にavexから発売されたDisneyのコンピレーションアルバム「Dive into Disney」の中の1曲として、前述のDOPING PANDAがカバーしているわけです。
この不朽の名曲がDOPING PANDAによってダンス&ロックチューンで且つ少し哀愁漂う感じの、それはもう絶賛な感じに仕上がってます。
「Dive into Disney」の中ではもう1曲、the band apartの「WHEN YOU WISH UPON A STAR」(ピノキオ主題歌)も絶賛モノです。
別に私はDisney大好きと言うわけではないのですが、とにかく絶賛です。
残念ながら「GO THE DISTANCE」はYoutubeにはありませんでしたので、メジャー進出後の1stシングル「MIRACLE」と前述の「WHEN YOU WISH UPON A STAR」を貼っておきます。
MIRACLE / DOPING PANDA
http://www.youtube.com/watch?v=WhER_JeaiL4
WHEN YOU WISH UPON A STAR / the band apart
http://www.youtube.com/watch?v=RIIokk-GHqQ
あるフォルダ内の変更をキャッチするデーモンwatchd
FreeBSDのWatchFolderパッケージを使うことで簡単に実現できました。
FreeBSD-4.11にて試しました。
インストール
pkg_add ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-4-stable/All/watchfolder-0.3.3.tgz
設定ファイル
/usr/local/etc/watchd.conf
六本木 鶏あえず(から揚げとチキン南蛮がオニウマ)
今日はミッドタウン近くの「鶏あえず」に行ってきました。
六本木駅(大江戸線・日比谷線)もしくは乃木坂(千代田線)からアクセスできます。
オススメはなんと言っても表題のとおり、から揚げとチキン南蛮。から揚げについては、はなまるマーケットでもとりあげられたようです。
お酒も、ビールが微妙に氷結していたり、梅酒も備長炭梅酒など少し変わったものもあり、非常においしいです。
コース料理は3000円からで、飲み放題も2000円で付けられますので、これからの季節、忘年会などにも非常に使えそうです。
また、このお店の店員さんはJAC(Japan Action Enterprise)の方が多数在籍してらっしゃっるので、そちら系にご興味ある方も楽しめるかと思います。
お店の雰囲気も非常によいので、デートにも使えますw
あと、主任のお姉さんがカワイイですw