MySQLの履歴

データベース

フリーで軽くて、なんだかわからないデータを投入しても無視して走り続けたり(ストリクトモードじゃない場合=デフォルト)してくれるのでなんていうかデータベースの安物っていうイメージがあります。ごめんなさい。

オープンソースデータベースには他にPostgreSQLとかがあります。

注意すべきこと


SQL上で整数値の閾値を越えて足したり引いたりすると値がオーバーフローする。エラーは出ない。

Perlを使っているような人は要注意!

例:UNSIGNED INT の値で、0 から 1 を引くと、4294967295になる。

最適化


データベース接続の最適化を行う方法はいくつかあるものの、とりあえずマニュアルだけは参照したほうがよい。

MySQL 5.1 リファレンスマニュアル :: 6 最適化

VIEWにINSERTはできますか?


固定長テーブルと可変長テーブルを分割して高速化を図ろうと思ってますが、現在のテーブルはviewで残したいなと思ったのです。

が、INSERTについては自分のような未熟者が期待している動作はしないと思います。

For a multiple-table updatable view, INSERT can work if it inserts into a single table. DELETE is not supported.

http://dev.mysql.com/doc/refman/5.0/en/view-updatability.html


INSERTで挿入するデータが一つのテーブルを対象としているものに限り挿入できるようです。なので、全部のレコードを埋めて挿入しようとした場合には失敗します。

ちなみに、"multiple-table updatable view"には1対1でテーブル同士が関連付けられているなどの条件があります。

データベースの設定値を変更する

key_buffer_size について
MyISAM テーブルのインデックス ブロックをバッファし、すべてのスレッドで共有。key_buffer_size は、インデックス ブロックに使用するバッファのサイズである。キー バッファはキー キャッシュのこと。
(中略)
環境に応じて、インデックス処理 (すべての読み込みと複数の書き込み) を改善する目的で、この値を大きくできる。一般的には、マシンのメモリ使用率 25 % の値であることが好ましい。


マニュアルにはこう書いてあるものの、開発機のデフォルト(CentOS 5)は8Mちょっとだった...

他にもいろいろあるのでググるといいと思う。
http://dsas.blog.klab.org/archives/50860867.html
http://it.kndb.jp/entry/show/id/5

知っておくと幸せになれる


ページャーを less コマンドに設定する。-S オプションで横スクロール!

mysql> \P less -S

MyISAMのインデックスの構築


MySQL 5.1 リファレンスマニュアル :: 4 データベース管理 :: 4.2 mysqld — MySQL サーバ :: 4.2.3 システム変数

myisam_sort_buffer_size - この変数の値を変更するとインデックスの構築に多くのメモリを割いてくれるらしい。コネクション別に設定される。(デフォルト:8388608)

特定の接続を強制切断する。


やる夫がDBコネクションをkillするようです

mysqladmin processlist | grep 192.168.2.12


これでどのコネクションかを左側に出てくるコネクションIDで指定し、mysqladminのkillコマンドを使ってkillする。

データベースのファイル


多くの場合、

/var/lib/mysql


に、データベース名のサブディレクトリとして保存されている。

開発機でバックアップを取るのに適当な名前(xxxx_bakみたいな感じ)を付けて保存したらその名前の新しいデータベースが作られてて驚いた。

多分、データベースの権限をロールに設定したらそのまま使えるんだと思う。(試してない)

バックアップ


ちなみに、データベースが起動中の場合のバックアップはmysqldumpとかを使った方がいい。

データベースが動いているときにコピーすると多分データベースが壊れる。

開発機などで、データベースを止めてもいい場合には、

/var/lib/mysql

を直接コピーした方が速いのでお勧め。