MySQL の FreeBSD へのインストール

MySQL は好みではないのだが、MySQL でないと動かないというアプリも多いので、 やむを得ず導入する。

(MySQL/PostgreSQL の2本立てになっているのは正直困る。メモリとディスクスペースの無駄遣い。)

MySQL 5.5 インストール

make.conf に追加

.if ${.CURDIR}=="/usr/ports/databases/mysql55-client"
WITH_CHARSET=utf8
WITH_XCHARSET=all
WITH_OPENSSL=yes
# DB_DIR は不要(/etc/rc.conf の mysql_dbdir で設定可能。)
.endif

.if ${.CURDIR}=="/usr/ports/databases/mysql55-server"
WITH_CHARSET=utf8
WITH_XCHARSET=all
WITH_OPENSSL=yes
.endif

必要であれば、/usr/local/etc/pkgtools.conf に追加。

 MAKE_ARGS = {
   ...
   'databases/mysql55-*' => [
     'WITH_CHARSET=utf8',
     'WITH_XCHARSET=all',
     'WITH_OPENSSL=yes',
   ],
 }

クライアントだけをインストールする場合

# cd /usr/ports/databases/mysql55-client
# make install

サーバーをインストールする場合(クライアントもセットで入る)

# cd /usr/ports/databases/mysql55-server
# make install

/etc/rc.conf に以下を追加する。

mysql_enable="YES"
mysql_dbdir="/usr/local/mysql/data"

mysql_dbdir を設定しない場合は、/var/db/mysql が使われる。

my.cnf は /usr/local/share/mysql にサンプルがあるので、ここから ${mysql_dbdir}/my.cnf を作る。(この my.cnf はサーバー設定用。)

/etc/my.cnf にコピーすると全体設定に。~/my.cnf だと個人設定に。

やらないといけないこと

  • root にパスワードを付ける。
  • 余計なユーザーを消す。(@localhost, @ホスト名)

SSL を使えるようにする

参考

  • /usr/local/share/mysql/charsets にコンパイル時に利用可能とした charset が入っている。
    • 完全な一覧は Index.xml に入っている。ただし、ここにだけ書いてあってもダメ。
  • デフォルトでは以下が入っていた
    armscii8.xml
    ascii.xml
    cp1250.xml
    cp1251.xml
    cp1256.xml
    cp1257.xml
    cp850.xml
    cp852.xml
    cp866.xml
    dec8.xml
    geostd8.xml
    greek.xml
    hebrew.xml
    hp8.xml
    keybcs2.xml
    koi8r.xml
    koi8u.xml
    latin1.xml
    latin2.xml
    latin5.xml
    latin7.xml
    macce.xml
    macroman.xml
    swe7.xml
    • 例外的に utf8 はデフォルトで利用可能になっているようだ。
    • デフォルトでは Shift_JIS(sjis), EUC-JP(eucjp,ujis) は使えない。
    • WITH_XCHARSET を設定しなかった場合、mysql クライアントで charset 変更時のエラー
      mysql> \C ujis
      mysql: Character set 'ujis' is not a compiled character set and is not specified in the '/usr/local/share/mysql/charsets/Index.xml' file
      Charset is not found

以下 obsolete

現在の安定版として MySQL 4.1.* をインストールする。

MySQL 4.1.1 からは、文字コードセットを柔軟に指定可能になったとのことなので WITH_CHARSET はなしとする。

とりあえず、WITH_OPENSSL=yes のみで行く。BUILD_OPTIMIZED=yes は、どうしようもなくなったら試してみる。

(WITH_LINUXTHREADS=yes じゃないとハングするかのようなことが MySQL のマニュアルに書かれているが、大丈夫だろうか?)

デフォルトだと /var/db/mysql にデータベースファイルが置かれてしまうので、/usr/local/mysql に置くようにする。

ports からインストールする。

/etc/make.conf に以下を追加。

.if ${.CURDIR}=="/usr/ports/databases/mysql41-client"
WITH_OPENSSL=yes
# DB_DIR は不要(/etc/rc.conf の mysql_dbdir で設定可能。)
.endif

.if ${.CURDIR}=="/usr/ports/databases/mysql41-server"
WITH_OPENSSL=yes
.endif

/usr/local/etc/pkgtools.conf に以下を追加。

  MAKE_ARGS = {
    ...
    'databases/mysql41-server' => 'WITH_OPENSSL=yes',
    'databases/mysql41-client' => 'WITH_OPENSSL=yes',
    ...
  }

コンパイルとインストールを行う。

# cd /usr/ports/databases/mysql41-client
# make
# make install

# cd /usr/ports/databases/mysql41-server
# make
# make install

/etc/rc.conf に以下を追加する。

mysql_enable="YES"
mysql_dbdir="/usr/local/mysql/data"

起動する。(システム再起動でもよい。)

/usr/local/etc/rc.d/mysql-server.sh start

データベースクラスタがなければ自動的に作られる。

権限テーブルを更新する。

古いバージョンからのアップグレードの場合、以下のコマンドで権限テーブルを更新する。

$ mysql_fix_privilege_tables

実行しないと、パスワードの設定ができなかったりする場合がある。

root にパスワードをつける。

mysql の中の root ユーザー(FreeBSD の root とは無関係)がスーパーユーザーになっている。

デフォルトではパスワードなしなので、パスワードをつける。

$ mysqladmin -u root password 新しいパスワード

パスワードなしではエラーになることを確認。

$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

パスワードありでログインできることを確認。

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15 to server version: 4.1.7
...

不要なユーザーを削除する。

まず、以下の SQL で、余計なユーザーがないか確認する。

mysql> select * from mysql.user;
mysql> select * from mysql.tables_priv;

FreeBSD の ports でインストールすると、以下のユーザーがいるはず。(your.host.name は、マシンのホスト名)

これを、以下のみとする。

権限はないものの、test データベース用に自サーバーから誰でもログインできるようになっているので、これを制限する。(DROP USER ''@your.host.name; DROP USER ''@localhost でも可。)

mysql> delete from mysql.user where user = '';
mysql> flush privileges;

名前なしでログインできないことを確認。

$ mysql
ERROR 1130 (00000): #HY000Host 'your.host.name' is not allowed to connect to this MySQL server

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-05-04 (火) 15:17:12 (126d)