MySQLの履歴
データベース。
フリーで軽くて、なんだかわからないデータを投入しても無視して走り続けたり(ストリクトモードじゃない場合=デフォルト)してくれるのでなんていうかデータベースの安物っていうイメージがあります。ごめんなさい。
オープンソースのデータベースには他にPostgreSQLとかがあります。
注意すべきこと
SQL上で整数値の閾値を越えて足したり引いたりすると値がオーバーフローする。エラーは出ない。
Perlを使っているような人は要注意!
例:UNSIGNED INT の値で、0 から 1 を引くと、4294967295になる。
最適化
データベース接続の最適化を行う方法はいくつかあるものの、とりあえずマニュアルだけは参照したほうがよい。
MySQL 5.1 リファレンスマニュアル :: 6 最適化
SQL最適化も必要だけど、データベースのメモリ関連の取り方をどうやってとればよいのかというのも知っておくと"とても"幸せになれる。
たとえば、こんなパラメータ - key_buffer_size
key_buffer_size について
MyISAM テーブルのインデックス ブロックをバッファし、すべてのスレッドで共有。key_buffer_size は、インデックス ブロックに使用するバッファのサイズである。キー バッファはキー キャッシュのこと。
(中略)
環境に応じて、インデックス処理 (すべての読み込みと複数の書き込み) を改善する目的で、この値を大きくできる。一般的には、マシンのメモリ使用率 25 % の値であることが好ましい。
マニュアルにはこう書いてあるものの、開発機のデフォルト(CentOS 5)は8Mちょっとだった...
知っておくと幸せになれる
ページャーを less コマンドに設定する。-S オプションで横スクロール!
mysql> \P less -S
MyISAMのインデックスの構築
MySQL 5.1 リファレンスマニュアル :: 4 データベース管理 :: 4.2 mysqld — MySQL サーバ :: 4.2.3 システム変数
この変数の値を変更するとインデックスの構築が速くなる?
データベースのファイル
多くの場合、
/var/lib/mysql
に、データベース名のサブディレクトリとして保存されている。
開発機でバックアップを取るのに適当な名前(xxxx_bakみたいな感じ)を付けて保存したらその名前の新しいデータベースが作られてて驚いた。
多分、データベースの権限をロールに設定したらそのまま使えるんだと思う。(試してない)
バックアップ
ちなみに、データベースが起動中の場合のバックアップはmysqldumpとかを使った方がいい。
データベースが動いているときにコピーすると多分データベースが壊れる。
開発機などで、データベースを止めてもいい場合には、
/var/lib/mysql
を直接コピーした方が速いのでお勧め。