MySQL

Ads

MySQL とは

  • 高速なRDBMS。
  • 海外では人気(各種ソフトもPostgreSQLよりもMySQLに対応しているものが多い)。
  • トランザクションに欠けるとか、副問い合わせが出来ないとかいう欠点もある。
  • データベースの実装(?)を切り替えられる。
    • InnoDB ってのを利用するとトランザクションが使えるようになる(MySQL4からはこれがデフォっぽい)。

インストール(ソースから)

ダウンロード

http://www.mysql.com/ からダウンロードする。 ダウンロードページはバイナリパッケージだらけだが、下のほうにソースのtar玉がある。

ユーザ作成

mysql デーモンを動かす用のユーザを作成する。 普通は mysql.mysql ってユーザを使うと思う。

groupadd mysql
useradd -g mysql mysql

configure&make、etc

多分 configure オプションで重要なのは charset の設定だけで、あとは好みの問題だと思う。

  • --with-charset=ujis はデータベース作成時にデフォルトで ujis(euc-jp)作成されるようになる。
  • --with-extra-charsets=all は全ての charset が使えるようにしておく。これをしておけば後で他の charset を指定したデータベースが作成できる。
  • prefix はインストール場所、localstatedir はデータベースの保存場所を設定する。
    rm -f config.cache
    ./configure \
    --prefix=/usr/local/mysql \
    --localstatedir=/usr/local/mysql/var \
    --with-mysqld-user=mysql \
    --enable-assembler \
    --enable-thread-safe-client \
    --with-charset=ujis \
    --with-extra-charsets=all \
    --with-openssl
    したら次は make、そして make install
    make
    su
    make install
    ここまで済んだら次はデータベースを初期化する。これはスクリプトが用意されてるのでそれを実行するだけ。
    ./scripts/mysql_install_db
    最後にデータベースファイル等の所有者を適切なものに変更する。
    chown -R root  /usr/local/mysql
    chown -R mysql /usr/local/mysql/var
    chgrp -R mysql /usr/local/mysql
    ここまで出来たら、mysqld_safe コマンドで起動できる筈である。
    /usr/local/mysql/bin/mysqld_safe --user=mysql &

daemontoolsで自動起動

わざわざ daemontools を使って起動するのなんて趣味の問題なので真似する必要は無い。 普通は mysqld_safe コマンドか用意された init スクリプト*1を使えばよい。

以下はの環境で行った設定手順です。

  1. ログ取り用のユーザを作成する。
    groupadd mysqllog
    useradd -g mysql mysqllog
  2. 起動ディレクトリを作成する。
    mkdir -p /var/service/mysql/log
    chown mysql.mysql /var/service/mysql/log
  3. runスクリプトを作成する。
    • /var/service/mysql/run
      #!/bin/sh
      exec \
      setuidgid mysql \
      env - PATH="/usr/local/mysql/libexec" \
      mysqld \
      2>&1
    • /var/service/mysql/log/run
      #!/bin/sh
      exec setuidgid mysqllog multilog t ./main
  4. /service で稼動させる。 *2
    ln -s /var/service/mysql /service/mysql

データベースの管理

root パスワード設定

mysql をインストールした直後は mysql の root ユーザは localhost からの接続に関してパスワードが設定されていない(空パスワード)のですぐに変更しましょう。

  • SQLでパスワード設定
    1. mysql コマンドを使ってユーザ root で mysql データベースへ接続する。
      $ mysql -u root mysql
    2. 接続に成功したら mysql のプロンプトで以下の用に SQL を入力すれば root のパスワードが設定される。
      mysql> SET PASSWORD FOR root=PASSWORD('password');
  • mysqladminでパスワード設定
    • mysqladmin というコマンドを使ってもパスワードの変更が出来る。
    • 気を付けなければいけないのは mysqladmin コマンドで設定変更を行った場合は mysqladmin reload を実行しないと変更が反映されないこと。 *3
      mysqladmin -u root password new_password
      mysqladmin reload

ユーザ作成

MySQL ではユーザは GRANT 文で作るんだね。これが分からなくて随分時間かかった。まずユーザ作ってから GRANT だと思い込んでたからな。 ふむふむ。

grant all on kawaz.* to kawaz identified by 'password';

ってすれば「ユーザ kawaz」に「データベース kawaz」への全ての権限が与えられるのか。 で、データベースが無くても SQL は発行できるのね、これが PostgreSQL との違いだな。 kawaz で接続して自分で

create database kawaz;

とかするわけか。

既にある kawaz データベースに対して権限を与えるんじゃなく、kawaz って名前のデータベースに関する権限を与えるというわけだな。なるほど。

要らないユーザとかを削除

root で接続して以下の SQL を入力してみよう。

select user, host, password from mysql.user;

既にいくつかユーザが出来てる筈だ。 これを見ると MySQL のユーザのなんたるかが少し分かった気になると思う。

ここで3つのポイントを抑えておく。

  • user='' なユーザは anonymous なユーザ。ユーザ名の指定をしないとこれになる。
  • host='localhost' なユーザは接続元が localhost であることを意味する。
    • host='%' は全ての接続元という意味。
    • host='*.jp' というユーザを作ると *.jp なホストからのアクセスに対するユーザが作れる。
  • password='' なユーザはパスワード無しで接続できてしまう。 root のパスワードも始めは空に設定されているので必ず設定しよう。

さて、ここでうちのサーバに必要なさそうなユーザは削除しておくことにする。 anonymous なユーザは要らないし、あとデフォで出来てる root もいらないの多いので全部削除。

delete from mysql.user where user='';
delete from mysql.user where ...;

ここまでやれば後は普通に使えそうだな。

参考リンク

コメント

  • 今いろんな本を比べて何回もインストールをテストしています。この記事はとてもよくまとまっていて、巷の本より優れものです。頭の中が整頓できました。 -- 植木? 2005-01-24 (月) 22:01:20

*1 ソース中の support-files/mysql.server に init.d に置く用の起動スクリプトがある。
*2 /var/service に起動ディレクトリを作成して、/service に synlink を作成するのは単にの趣味です。普通は /service/.mysql 等のようにしてから mv .mysql mysql としたりするが、この方法だとディレクトリ名が shell で補完できなくて好きじゃないので。
*3 SQL を使った更新では即座に設定は反映される。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-03-21 (月) 03:01:25 (1895d)