- [[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