- [[FreeBSD]]
- [[MySQL]]

* MySQL の FreeBSD へのインストール [#j9712285]

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

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

* MySQL 5.5 インストール [#z721a18c]

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',
    ],
  }

** クライアントだけをインストールする場合 [#k8d3773b]

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

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

 # 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 だと個人設定に。

** やらないといけないこと [#v200cf36]
- root にパスワードを付ける。
- 余計なユーザーを消す。(''@localhost, ''@ホスト名)

** SSL を使えるようにする [#a7aa625c]
- 4.8.7. 接続安全 http://dev.mysql.com/doc/refman/5.1/ja/secure-connections.html

** 参考 [#d2991549]
- /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 [#x0f31e7f]

現在の安定版として 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

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

** 権限テーブルを更新する。 [#w598e759]

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

 $ mysql_fix_privilege_tables

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

** root にパスワードをつける。 [#b0678f03]
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
 ...

** 不要なユーザーを削除する。 [#kb27ae6f]

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

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

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

- root@localhost
- root@your.host.name
- @localhost
- @your.host.name

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

- root@localhost
- root@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