vmのubuntuがdns認識してくれない
apt-getが失敗するんでおかしいなーって思って調べてみたんですが
って状態だったので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いじっとけば良かった
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
みたいにすればLostConnectionしない。
while(true):
keepalive()
sleep(60)
Node.jsでもこういう対応した。
スレッド使えない場合、例えばPHPとかの場合、LVS経由しないようにすればLostConnectionしないはず。
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のインスコについて。
$ 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をインストール
Thriftのmakeでyaccが無いとか言われたら
$ sudo apt-get install python-dev
yaccは別にbisonじゃなくてもOkなはず
$ sudo apt-get install bison
lenovoのPCでR2Rがメモリを食い潰してる
lenovoのPC使ってて急に動作が重くなったなーって調べたら
R2R.exeがメモリ食いつぶしてました
Rescue and Recoveryというプログラムらしいのですが
そんなもん入れた覚えないし、勝手に裏で動かれて仕事出来ないとかうざいので
プログラムを強制終了させてコンパネの【プログラムの追加と削除】から
アンインストールしました。