mysql: mysql5.1.41をソースからインストール

mysqlをソースからインストールする。
pluginは全部有効にする。

cd /usr/local/src
wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.41.tar.gz/from/http://ftp.iij.ad.jp/pub/db/mysql/
tar zxfv mysql-5.1.41.tar.gz
cd mysql-5.1.41
./configure –prefix=/usr/local/mysql
–with-charset=utf8
–with-extra-charsets=all
–with-mysqld-user=mysql
–with-plugins=max
–enable-local-infile
make
make install

以上でインストールは完了。
※この段階でエラーが出る場合は後述のエラーがでるときを参照

次に初期設定をおこなう。
ソースの雛形からmy.cnf を作成する。

cp support-files/my-medium.cnf /etc/my.cnf

作成したmy.cnf に文字コードの設定を追加する。
mysqld、mysqldump、mysql セクションにそれぞれ以下の設定を追加する。

[mysqld]
default-character-set=utf8
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8
[mysqldump]
default-character-set = utf8
[mysql]
default-character-set = utf8

mysqlを起動する前に、mysql 用のユーザを追加する。

groupadd mysql
useradd -g mysql mysql

mysql のインストールフォルダのオーナーをmysql ユーザに変更する。

chown -R mysql:mysql /usr/local/mysql

次に、データベースを初期化を行う。

cd /usr/local/mysql
bin/mysql_install_db –user=mysql

MySQL サーバーを起動する。

./bin/mysqld_safe –user=mysql &

※mysql起動後はrootユーザログインできるようになる。
初期状態ではrootにパスワードが設定されていないので、必ずrootユーザのパスワードを設定すること。

mysqlのconfigure,makeでエラーがでるとき

もし./configureでこんなエラーがでたら

checking for termcap functions library... configure: error: No curses/termcap library found

ncurses-develというものをインストールすればconfigureできるようになる。

yum install ncurses-devel

もしmakeでこんなエラーがでたら

../depcomp: line 571: exec: g++: not found
make[1]: *** [my_new.o] エラー 127
make[1]: ディレクトリ `/usr/local/src/mysql-5.1.41/mysys' から出ます™
make:

gcc-c++をインストールする。

yum install gcc-c++

このままmakeすると、以下のようなエラーになるので、

licit-templates -fno-exceptions -fno-rtti -c -o my_new.o my_new.cc
../include/my_global.h:1099: error: redeclaration of C++ built-in type '˜bool'

make cleanしてconfigureからやりなおすこと。

make clean
./configure –prefix=/usr/local/mysql
–with-charset=utf8
–with-extra-charsets=all
–with-mysqld-user=mysql
–with-plugins=max
–enable-local-infile

make

make install

Linux:webdavを利用する

Ubuntuで使えるwevdavクライアントを探してもみつからない。
Linuxでwebdavに接続するにはmountコマンドを使うらしい。

マウント先のディレクトリを作成後、mount -t davfsでマウントする。
mountコマンドは大抵が実行することになっていると思う。
ユーザIDとグループIDを省略するとマウントを実行したユーザになるので
mount実行ユーザ以外でwebdavを利用したい場合はuid,gidを指定する。

sudo mkdir /media/webdav.hoge.com
sudo mount -t davfs webdavのURL /media/webdav.hoge.com -o uid=ユーザID,gid=グループID

webdavを利用したいユーザが複数要る場合はgroupで指定する。

sudo mount -t davfs webdavのURL /media/webdav.hoge.com -o uid=nobody,gid=グループID

Linux:グループの追加と設定

webdav接続先のパスワードを保存したい場合は/etc/davfs2/secretsを編集する

sudo vi /etc/davfs2/secrets

/etc/davfs2/secretsの一番最後に以下の形式でパスワードを書いて保存する。

/etc/davfs2/secrets
webdavのURL ユーザ名 パスワード

Linux:ファイルシステムのマウント

システムで利用するファイルシステムのエントリを変更するには/etc/fstabを編集する。

sudo vi /etc/fstab
/etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
proc        /proc       proc  defaults  0    0

※<dump>はdumpによるバックアップの対象となるか。(0は対象外)
※<pass>はfsckの対象となるか。(0は対象外)
/etc/fstabに記述したエントリはオプションnomoutが記述されていない限り、mount -a実行時(システム起動時含む)に全てマウントされる。

Ubuntu:vim-gnomeをインストールする

Ubuntuに初期インストールされているvimはフルーヴァージョンでは無いので以下のような問題がある。
・矢印キーの動きが変(UとかDが改行とともに入力される)
・syntax on などのコマンドが使えない
これらはvim-fullをインストールすれば直るらしい。

けれどもUbuntuのレポジトリにvim-fullという候補は無い。
vim-gnomeというパッケージを使うとのこと。

sudo apt-get install vim-gnome

Linux:グループの追加と設定

Linuxにグループを追加するにはgroupaddコマンドを使う。

groupadd グループ名

グループに所属するユーザを変更したい場合は/etc/groupを編集する。

sudo vi /etc/group
/etc/group
fsmount:x:1001:hoge , foo , bar

/etc/groupの書式は
グループ名:グループパスワード:グループID:メンバーリスト(ユーザID,区切り)
になっている。

Linux:コマンドプロンプトの書式を変更する

Ubuntuデフォルトのプロンプトはカレントディレクトリが深い階層になったとき、プロンプト表示でかなりの幅を取ってしまい見難いのでプロンプトの書式を変更した。

プロンプトの書式はPS1というシェル変数に設定する。
PS1とはPrompt Stringの1番目ということらしい。

.bashrcに以下のように記述する。

.bashrc
PS1=”[u@[33[32m]h[33[0m] W]$”

最後のWがポイントで、これはカレントディレクトリ名を表す。
ここかwになっているとフルパスで表示されてプロンプトが長くなってしまう。

.bashrcを書き換えたら、

source .bashrc

Linux: CD/DVDからディスクイメージを作る

CD/DVDからディスクイメージを作る方法。

1.CD/DVD-ROMをマシンに挿入する。

2.自動的にマウントされる場合はアンマウントする。

3.ddコマンドでイメージを作成
対象がCD-ROMなら

dd if=/dev/cd of=image-name.iso

対象がDVDなら

dd if=/dev/dvd of=image-name.iso

とても簡単。感動。

作成したイメージをマウントするコマンドは

sudo mount -o loop /path/to/image-name.iso /mnt/disk0

mysql:PL/SQLでCursor declaration after handler declaration

mysqlのPL/SQLでこんなエラーは出るとき

ERROR 1338 (42000): Cursor declaration after handler declaration

意味:カーソル宣言がハンドラ宣言よりあとで行われています。

Variable or condition declaration after cursor or handler declaration

意味:変数または条件宣言がカーソルまたはハンドラ宣言より後で行われています。

つまりPL/SQLの宣言は変数、条件、カーソル、ハンドラの順で行えということですね。

CREATE PROCEDURE procname(
    in  arg1   VARCHAR(10),
    in  arg2   VARCHAR(20)
)
BEGIN
    -- 変数宣言
    DECLARE UserName     VARCHAR(10);
    DECLARE done INT DEFAULT 0;

    -- カーソル宣言
    DECLARE cur_name CURSOR FOR
        SELECT user_name
        FROM table_name
        WHERE user_prop = arg1;

    -- ハンドラ宣言
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

    -- 処理開始
    OPEN cur_name;
    REPEAT
        FETCH cur_name INTO UserName;
        IF NOT done THEN
            -- いろいろ
        END If;
    UNTIL done END REPEAT;
    CLOSE cur_name;
END;

mysql:テーブルのrepair

mysqlでこんなエラーメッセージが出てた。

Table table_name is marked as crashed and should be repaired

とりあえず、エラーが出ているテーブルを調べる。

mysql> check table table_name;
+————+——-+———-+——————————————————-+
| Table | Op | Msg_type | Msg_text |
+————+——-+———-+——————————————————-+
| table_name | check | warning | Table is marked as crashed |
| table_name | check | warning | 1 client is using or hasn’t closed the table properly |
| table_name | check | error | Record at pos: 482160 is not remove-marked |
| table_name | check | error | record delete-link-chain corrupted |
| table_name | check | error | Corrupt |
+————+——-+———-+——————————————————-+

確かにテーブルにエラーがある。
これを直すにはrepairコマンドを使うらしい。

mysql> repair table table_name;
+————+——–+———-+————————————–+
| Table | Op | Msg_type | Msg_text |
+————+——–+———-+————————————–+
| table_name | repair | warning | Number of rows changed from 63 to 64 |
| table_name | repair | status | OK |
+————+——–+———-+————————————–+

これで直ったっぽい。
どうしてこの手順で直るのかはいつか調べる。