MySQL のコマンドラインで補完機能を使う

MySQL でも Bash みたいに Tab 押してテーブル名やカラム名の補完機能ができると便利ですよね。設定ファイルに次のように書くと ok です。

[mysql]
auto-rehash

120819-0005.png

desc mt_b まで入力して Tab を押すと右の画像のようにテーブル名・カラム名を補完してくれます。

便利な機能なのですが、前回紹介した libedit の vi モードでは使えないことがあるようです。そういうときは ~/.editrc にカスタムのキーバインドを追加しましょう。

bind -v
bind ^I rl_complete

Bash でも MySQL でも vi(vim) !!

テキストエディタに vim を使い、ブラウザでも vimperator / pentadactyl その他を使ってると、知らぬうちに Esc を連打してたり、画面上に jjjjj ... などという文字が並んだりして、ハッと我に返ることがままあるものです。(ない?)

こうなると、あらゆるところを vim のキーバインドで過ごしたくなるものですが、意外と盲点なのがシェルのキーバインドです。

行頭に移動するために Ctrl + A したり、単語単位で移動するために Meta + F などとしていると違和感を感じませんか?

そうです! これこそ我ら Vimmer が忌み嫌う、あの、Escape Meta Alt Ctrl Shift などと言ってあざ笑う、Emacs のキーバインドそのままじゃないですか!

これは捨ててはおけません。一日の大半を過ごすターミナル上で、まさか Emacs のキーバインドを使って過ごす羽目になっていたとは! これは単なる背信を超えて悲劇的ですらあります。全世界の善良な Vimmer は望む望まざるに関わらず、あの、小指を駆使する非人間的で非効率的なキーバインドを強制されていたのです!

Continue reading

MySQL の CUI ツールだけをインストールする

サーバーはそのままにして、コマンドラインから使う mysql コマンドラインだけを最新版にしたいことがあったのでメモ。昔は configure のオプションを使って、

$ ./configure --without-server

このように指定することで可能だったのですが、最近のバージョンでは CMake を使うようになっており、やり方が変わってました。

Continue reading

rsync と SSH で MovableType をバックアップする

このブログは Mac mini を使ったサーバーで運営しています。

本来サーバーの OS バージョンアップというのはリリースから時が立って慎重に行うべきなのでしょうが、元々個人の勉強ブログだし、トラブルも勉強の一つだよね、ってことでMountain Lion に速攻アップデート。

とはいえ、ブログ自体はバックアップ環境で動かしておきたいです。これを機に、スクリプト一つでバックアップを行うようにしました。

バックアップスクリプト

#!/bin/sh
SSH_KEY=/path/to/id_rsa
TOPDIR=/Library/WebServer/Documents
LOCAL_PERL=/usr/bin/perl
REMOTE_PERL=/path/to/perl
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/local/mysql/bin/mysqldump
DB_USER=foo
DB_PASS=bar

# MovableType を構成するファイルを rsync
# SSH でログインしてファイルをコピーする
for i in mt mt-static blog; do
    /usr/bin/rsync -e "ssh -i $SSH_KEY" -avz [email protected]:$TOPDIR/$i/ $TOPDIR/$i/
done

# Perl をインストールしているパスが違うのでスクリプトを修正
$LOCAL_PERL -i -ple "s/#!$REMOTE_PERL -w/#!$LOCAL_PERL -w/" $TOPDIR/mt/*cgi

# MySQL をリモートからローカルにバックアップしてリストア
ssh -i $SSH_KEY [email protected] "$MYSQLDUMP -u$DB_USER -p$DB_PASS mt | /usr/bin/gzip" \
    | /bin/zcat | $MYSQL -u$DB_USER -p$DB_PASS mt

# 最後に Apache を再起動
/usr/sbin/apachectl graceful

これで完了。DNS サーバーの設定を書き換えると、バックアップ環境での動作が確認できました。

さて、これから Mountain Lion のインストールに入るわけですが、それ自体はあっさり完了。ただ、その後にトラブルに見舞われたので、備忘録として書いていきます。

続く。

【Perl】DBIx::Simple で副問い合わせや JOIN を使う

DBIx::Simple + SQL::Abstract を使うと簡単な SQL だと記述が簡潔にすむのだが、副問い合わせや JOIN を使い出すと途端に複雑になる。こういう場合は素直に素の SQL を書いた方がいいのだが、無理矢理にでも書くときはどうなるかやってみる。

WHERE 句にリテラル SQL を書く

文字列ではなく、文字列リファレンスを使う。例えば誕生日の「日」より「月」の方が数値として大きい(五月四日とか一〇月三日とか)人のリストを得たいとする。

SELECT id, name
FROM directory
WHERE MONTH(birthday) > DAY(birthday)

これを DBIx::Simple で表すとこうなる。

my $ds = DBIx::Simple->new($dbh);
my $rs = $sa->select('directory',
    ['id', 'name'],
    { 'MONTH(birthday)' => { '>' => \'DAY(birthday)' } },
    # { 'MONTH(birthday)' => \'> DAY(birthday)' },
);

Continue reading

【Perl】DBIx::Simple ノススメ

  1. はじめに
  2. DBIx::Simple + SQL::Abstract
  3. 単行取得メソッド
  4. 全行取得メソッド
  5. オブジェクトを返すメソッド

はじめに

Perl において DB に接続し、SQL を扱うモジュールはもちろん DBI モジュールな訳だが、これを格段に使いやすくしてくれる DBIx::Simple モジュールというのがある。

use DBIx::Simple; – 今日のCPANモジュール(跡地)
http://e8y.net/mag/009-dbix-simple/

このサイトのまとめが非常に分かり易い。例を挙げるとこんな感じ。

Continue reading