アーカイブ

投稿者のアーカイブ

MuninでMySQLプラグインのグラフが描画されない時の解決方法

2010 年 3 月 9 日 oinume コメントはありません

先日設定したサーバでMuninをインストールして監視していたのですが、どうもMySQL関連のプラグイン(mysql_bytes, mysql_queries, mysql_threadsなど)でグラフが描画されず、どうしたものかと思ってぐぐってみたところ、このエントリを見つけました。まさにビンゴで /etc/munin/plugin-conf.d/munin-node に以下の行を足してmunin-nodeをrestartしたところ、うまくグラフが描画されるようになりました。

env.mysqladmin /usr/local/bin/mysqladmin

Muninの問題なのか何なのか、自分のケースでは mysql 関連のコマンドを /usr/local/bin/ 配下にインストールしてたので、ここにPATHが通っていなかったのが問題のようです。

$ sudo -umunin munin-run mysql_bytes

と実行してもうまく数値が出てきたのでどうしたものかと悩んでいたのですが、解決してすっきりしました。

カテゴリー: Munin, MySQL タグ: ,

UbuntuでTimeZoneを変更する方法

2010 年 2 月 28 日 oinume コメントはありません

昔は tzconfig というのを使えばよかったらしいのですが、deprecated と言われました…

# dpkg-reconfigure tzdata

と入力して、Asia -> Tokyo を選択すればOKです。終わったら date コマンドで確認すればOK。

カテゴリー: Ubuntu タグ:

DBI->connectのHandleError

2010 年 2 月 11 日 oinume コメントはありません

DBIのちょっとしたTIPSです。DBIには connect する時に

DBI->connect('dbi:mysql:database=hoge', 'root', 'whatever', { ... });

とオプションを渡すことができます。(たとえば RaiseError) 。このオプションのひとつに HandleError というものがあってデバッグにはなかなか便利なので紹介してみます。端的にいうと HandleError でサブルーチンを登録しておくと、エラーが発生したときにこのサブルーチンを使ってエラーを投げてくれるようになります。以下は具体例。

# MyDB.pm

package MyDB;
 
use strict;
use warnings;
use Carp ();
use DBI;
 
sub new {
    bless {}, shift;
}
 
sub connect {
    my ($self) = @_;
    $self->{dbh} = DBI->connect(
        'dbi:mysql:database=dbix_thin_test', 'root', 'root',
        { RaiseError => 1, HandleError => \&Carp::confess } # here
    );
}
 
sub select {
    my ($self, $sql) = @_;
    my $sth = $self->{dbh}->prepare($sql); # error!
    $sth->execute();
}
 
1;

# dbi_handle_error.pl

#!/usr/bin/env perl
 
use strict;
use warnings;
use FindBin qw($Bin);
use lib "$Bin";
use MyDB;
 
my $db = MyDB->new;
$db->connect();
$db->select("select * from not_exist");

と書いてわざと MyDB#select でエラーになるようにしておき、このスクリプトを実行します。
すると

$ perl ~/script/perl/dbi_handle_error.pl
DBD::mysql::st execute failed: Table 'dbix_thin_test.not_exist' doesn't existDBI::st=HASH(0x248a900) at /home/kazuhiro/script/perl/MyDB.pm line 23
        MyDB::select('MyDB=HASH(0x21b8df0)') called at /home/kazuhiro/script/perl/dbi_handle_error.pl line 11

のように DBI->connectの HandleError で渡した Carp::confess が呼ばれ、エラーになった時にスタックトレースが表示されます。HandleError を指定しない場合は

$ perl ~/script/perl/dbi_handle_error.pl
DBD::mysql::st execute failed: Table 'dbix_thin_test.not_exist' doesn't exist at /home/kazuhiro/script/perl/MyDB.pm line 23.
DBD::mysql::st execute failed: Table 'dbix_thin_test.not_exist' doesn't exist at /home/kazuhiro/script/perl/MyDB.pm line 23.

のようになってしまい、実際にエラーが発生している箇所と問題のクエリの関連性がわかりにくいですが、HandleErrorで Carp::confess を指定しておくとファイル名と行番号がわかるのでどこでエラーになっているかあたりがつけやすいと思います。(この例だとメソッドのネストが少ないのでそのありがたみがわからないですが…)

以上、生DBIでもこんなマニアックなオプションがあるんだよという紹介でした。ZIGOROuさんの生 DBI ユーザーのための DBI Cookbook (1)を見ててよく思うのですが、DBIってなかなか奥が深いです。

カテゴリー: Perl タグ:

VMWare FusionでゲストOSを強制的にシャットダウン

2010 年 2 月 3 日 oinume コメントはありません

VMWare FusionのゲストOSとしてWindows XPを使っていたのですが、シャットダウン中に「Windowsをシャットダウンしています…」というメッセージからいっこうに進まなくなり、どうしようもなくなった時の対処方法。

VMware Fusionの「仮想マシン」メニューを選択して「option」キーを押しっぱなしにすると、ゲストOSの制御メニューが以下のように変化します。そして「強制シャットダウン」を選択するとシャットダウンできるようになります。

レジューム
再起動
シャットダウン
       ↓
強制レジューム
強制再起動
強制シャットダウン

ちなみにVMWare Fusion 3の場合です。2だと表記が違うっぽいです。

VMware徹底入門 (DVD付)

著者/訳者:ヴイエムウェア株式会社

出版社:翔泳社( 2008-11-13 )

大型本 ( 416 ページ )



VMware Fusion 3

VMware Fusion 3

発売日:2009-11-06


カテゴリー: VMWare Fusion タグ:

DBIx::ThinをCPANから削除

2010 年 1 月 13 日 oinume コメントはありません

表題の通りですが、思うところがあってDBIx::Thinを削除しました。きっかけは、CPAN Ratingsのレビューです(以下引用)。

DBIx-Thin (0.05) **

It strikes me as odd how almost most of Japanese authors (of course, except honourable and admirable authors) don’t write why they have written their modules and the intention of the modules.
So is the author of this module.
The module is yet another ORM module but unfocused one. What the heck is different from DBIx::Skinny? The explanation is nowhere to be found, but there is just an enumeration of methods. And yet could anyone else use the module?

言われてみればその通りで、PODにコンセプトも書いてなければDBIx::Skinnyと違うところも良くわからないと。その辺に関してはモジュールのPODに書いておきましたが、それでもDBIx::Skinnyとあんまり変わらないし、現時点で自分以外の誰かが使っているとも思えないので、変な混乱を招かないようにCPANからは削除しました。んでgithubでは開発を継続していきます。

カテゴリー: DBIx::Thin タグ: ,

WordPressで自分の投稿にリンクを貼るためのプラグイン “The Permalinker”

2010 年 1 月 5 日 oinume コメントはありません

WordPressで文章を書いている際に過去の自分の投稿にリンクしたいことがよくあります。今までは<a href=”/tech/index.php/archives/12345″>過去の投稿へのリンク</a>のように普通のアンカータグでリンクを貼っていたのですが、これだと万が一パーマリンクのURLの設定を変えた場合に手動で一つ一つリンクを直すのが嫌だなぁと思ってました。

で、これを回避するのが最近見つけたThe Permalinkerというプラグイン。

[permalink id=12345]過去の投稿へのリンク[/permalink]

というように書くと過去の投稿へのリンクを生成してくれます。こういうプラグイン絶対あると思ってたんですが、なかなか見つけられなくて悔しい思いをしていたので、非常に嬉しいです。よかったよかった。

WordPress 2.7対応「導入&カスタマイズ」実践ガイド―個人ブログも企業サイトも簡単&無料で構築できる!

著者/訳者:吉村 正春

出版社:秀和システム( 2009-02 )

単行本 ( 415 ページ )


カテゴリー: WordPress タグ:

MySQL 5.1の最新のソースからdebを作成する

2010 年 1 月 3 日 oinume コメントはありません

以前MySQL 5.1の最新版のdebパッケージを作成する方法というエントリを書いたのですが、Ubuntuの最新の開発版パッケージではなく、MySQLが出している最新のMySQLのソースをビルドしてdebパッケージを作成する方法を見つけたのでメモしておきます。ちなみにMySQL以外にもperlとかのパッケージもこの方法で最新にすることが出来ると思います。

debを作成するための準備

まずはビルドする人間のメールアドレスと名前を環境変数で設定しておきます。適当に自分のものに置き換えて下さい。

$ export DEBEMAIL="hogehoge@foo.com"
$ export DEBFULLNAME="Your Name"

次にパッケージをビルドするために必要なものをインストールします。

$ sudo aptitude install dh-make devscripts debhelper fakeroot lintian sudo pbuilder piuparts dpatch build-essential
$ sudo aptitude build-dep mysql-server-5.1

ソースの取得

Ubuntuのdebを作成するのに使われているソースを取得します。ソースはカレントディレクトリに展開されるので、必要があれば適当なディレクトリに cd しておいてください。

$ apt-get source mysql-server-5.1

次に最新のMySQLのソースをmysql.comより取得します。”Select Platform”というプルダウンで”Source Code”を選択し、”Generic Linux (Architecture Independent), Compressed TAR Archive”をダウンロードして下さい。現在の最新版は5.1.42になるので、mysql-5.1.42.tar.gz としてダウンロードしています。

ビルド

ではビルドを始めます。uupdate というコマンドを使うと、自動的に引数で指定した最新のソースパッケージを展開しそこにDebianのパッケージを作成するためのファイルが生成されます。(つーか
uupdate便利過ぎ!)

$ cd mysql-dfsg-5.1-5.1.37
$ uupdate ../mysql-5.1.42.tar.gz

“cd ../mysql-dfsg-5.1-5.1.42 しろ”と言われるので、cd してパッケージをビルドします。(私はAthlon X2 5050eの環境で約2.5時間かかりました)

$ dpkg-buildpackage -uc -us -rfakeroot

インストール

ビルドが完了すると .deb パッケージがソースパッケージのディレクトリに作成されているので、必要なものをdpkg -iしてインストールします。ただし、依存関係が若干複雑なのでエラーが出たら依存しているものを先にインストールすると良いでしょう。

sudo dpkg -i \
libmysqlclient16_5.1.42-0ubuntu1_amd64.deb \
libmysqlclient-dev_5.1.42-0ubuntu1_amd64.deb \
libmysqlclient16-dev_5.1.42-0ubuntu1_all.deb \
mysql-common_5.1.42-0ubuntu1_all.deb \
mysql-client-5.1_5.1.42-0ubuntu1_amd64.deb \
mysql-client_5.1.42-0ubuntu1_all.deb \
mysql-server-5.1_5.1.42-0ubuntu1_amd64.deb \
mysql-server-core-5.1_5.1.42-0ubuntu1_amd64.deb \
mysql-server_5.1.42-0ubuntu1_all.deb \
libmysqld-dev_5.1.42-0ubuntu1_amd64.deb \
libmysqld-pic_5.1.42-0ubuntu1_amd64.deb

無事にインストールできれば、これでmysql-server-5.1が最新版になっています。mysqlコマンドでSQLを発行して動作を確認してみて下さい。

$ mysql -uroot -pxxxxx
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 72
Server version: 5.1.42-0ubuntu1-log (Ubuntu)
カテゴリー: Debian, MySQL タグ: ,
Pages: 1 2 3 4 5 6 7 8 ...16 17 18 >>