vmのubuntuがdns認識してくれない

apt-getが失敗するんでおかしいなーって思って調べてみたんですが

IP直だとping通るのにドメインだとダメ

って状態だったのでDNSだなと。

Ubuntuのデスクトップの

【システム】→【設定】→【ネットワーク接続】から【有線】のタブを選択して

表示されてる【Eth0】を選択し【編集】をクリック

IPv4 設定】のタブを選択し【DNSサーバ】の項目にDNSのIPを入力。

再起動はめんどいので下記のコマンドを実行。


$ sudo /etc/init.d/networking restart

したのに繋がらない・・・

何でー?

で、/etc/resolv.confを見てみたら中身が空!!

えー何これ・・・

で下記を追加してネットワーク再起動したら認識してくれた


$ sudo echo "nameserver *.*.*.*" >> /etc/resolv.conf
$ sudo /etc/init.d/networking restart

何なの・・・

最初から/etc/resolv.confいじっとけば良かった

twitter連携

[twitter:@hagaeru3sei]てすてす

Python MySQLdbで[Lost connection to MySQL server during query]が

Python MySQLdbで[Lost connection to MySQL server during query]が出て落ちる

原因調べてたら

これ有効にしてないかららしい


my_bool reconnect = 1;
mysql_options(&mysql, MYSQL_OPT_RECONNECT, &reconnect);

でどうするか。

#!/usr/bin/env python
import MySQLdb
con = MySQLdb.connect(***)
con.ping(True) # ←これでRECONNECTが有効になる
cur = con.corsor()
cur.execute("重いクエリ")
con.commit()
cur.close()
con.close()

で落ちなくなった。

このバージョンではトランザクションも問題ないようだ。

MySQL-python-1.2.3c1の場合、con.autocommit(0)となっている様。

autocommitを有効にしたい場合con.autocommit(1)を明示しなければいけない。

上記は
python 2.4.3
MySQL-python-1.2.3c1
mysql 5.1.37-community
のバージョンの場合で確認。

参考サイト。
http://mp.i-revo.jp/user.php/kcvcrlkq/entry/259.html

 

[2010/05/20]追記。
autocommit=0、つまりトランザクション開始した場合
commitがエラーとなってロールバックするケースが多々あった。
バッチ処理の様なケースではautocommit(1)とした方がいい。

 

[2014/01/14] 追記
いまだにアクセスがあるのでさらに追記。
例えばシステム構成が

APP -> LVS -> DB

の様になっている場合LVSの影響でconnection closeになってしまう事がある。


def keepalive():
Query("SELECT 1").execute
の上記疑似コードの様なメソッドを追加し別スレッドで同じコネクションに対して

while(true):
keepalive()
sleep(60)
みたいにすればLostConnectionしない。
Node.jsでもこういう対応した。
スレッド使えない場合、例えばPHPとかの場合、LVS経由しないようにすればLostConnectionしないはず。

OpenX-2.8.4以降でCSSが読み込まれない

OpenX 2.8.4以降のバージョンで確認。

php.iniのmb_output_handlerが設定されていると

CSSの読み込みが出来ません。

通常

output_handler = mb_output_handler

と設定するところを下記の様にコメントアウトしてzlib.output_handlerを有効にします。

;output_handler = mb_output_handler

zlib.output_handler = mb_output_handler

で、Apache再起動してCSSの読み込みを確認しました。

MySQLのちょっとしたTIPS

MySQLってこんなの書けるんだなーって再認識。


mysql> set @1 = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> select 1 as k from dual where if( @1, 1, 0 );
Empty set (0.00 sec)

mysql> set @1 = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> select 1 as k from dual where if( @1, 1, 0 );

k
1

1 row in set (0.00 sec)

DUALテーブル使うことでSELECT節だけじゃなくてWHERE節で真偽値の判定が出来る。

ThriftとBoost

巷ではHadoopが流行っているようですが

先月にTwitterがCassandraを採用というニュースがあったので

とりあえず環境だけでも作ってみた。

ここの記事を参考にさせていただきました。


Cassandra自体はインスコして立ち上げてたので省略。

環境はvm上のubuntu9.10。

で、今回はThriftとBoostのインスコについて。

まずは
Thriftを落としてコンパイル


$ wget http://ftp.riken.jp/net/apache/incubator/thrift/0.2.0-incubating/thrift-0.2.0-incubating.tar.gz
$ tar zxvf thrift-0.2.0-incubating.tar.gz
$ cd thrift-0.2.0
$ ./configure
.
.
.
checking for boostlib >= 1.33.1... configure: error: We could not detect the boost libraries (version 1.33 or higher). If you have a staged boost library (still not installed) please specify $BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation.

エラー出ちゃった。

て事でboostlibのインストール。

ここからcmake版を落としてくる。


あ、cmakeが無い。。。のでインスコ


$ sudo apt-get install cmake
.
.
.

でBoostのインスコ。結構時間かかります。


$ cmake .
$ make
.
.
.
Linking CXX executable ../../bin/inspect
[100%] Built target inspec
$ sudo make install

で、今度はThrift。と思ったらまたエラー。

今度はflexが無いって。なので追加。


$ sudo apt-get install flex

今度こそThrift。


$ ./configure --with-boost=/usr/local/include/boost
$ make
$ sudo make install

とりあえず[Thrift]と[Boost]のインスコは完了。



[Thrift]
http://incubator.apache.org/thrift/

[Boost]
http://www.boost.org/



[2010/03/10] 追記
Boostをcmakeする際にPYTHON_INCLUDE_PATHがわかんねーとか言われたら
python-devをインストール


$ sudo apt-get install python-dev
Thriftのmakeでyaccが無いとか言われたら

$ sudo apt-get install bison
yaccは別にbisonじゃなくてもOkなはず

lenovoのPCでR2Rがメモリを食い潰してる

lenovoのPC使ってて急に動作が重くなったなーって調べたら

R2R.exeがメモリ食いつぶしてました

Rescue and Recoveryというプログラムらしいのですが

そんなもん入れた覚えないし、勝手に裏で動かれて仕事出来ないとかうざいので

プログラムを強制終了させてコンパネの【プログラムの追加と削除】から

アンインストールしました。