2009年1月30日金曜日

MacPortsでMySQLとPostgreSQL

とりあえず、普通にMacOS X向けインストーラでインストールしてあったPostgreSQL 8.3をアンインストールし、更にMySQL5もアンインストール。ただ、こちらは手動であれこれやる必要有り。

  1. アプリケーションの"MySQL Tools"はそのままゴミ箱へ
  2. システム環境設定に残っているMySQLサーバの起動設定は/System/Library/PreferencePanes/配下のMySQL.prefPane(だったかな?うろ覚え)ディレクトリをrm -rfして削除
  3. MySQLの実体は/usr/local/以下にあるのでこれもディレクトリを丸ごとrm -rfして削除

こんな感じでとりあえずMySQLは片付いた。

PostgreSQLは/Library/PostgreSQL/8.3/配下にアンインストーラのアプリケーションがあったのでそれを実行。データベースファイルとpostgresユーザだけは消しませんよ、という警告メッセージと共にアンインストーラ終了。データベースファイルは/Library/PostgreSQL/8.3/dataディレクトリ配下にあるので、これはrootにsu -してrm -rfで削除。ユーザ云々に関しては/etc/passwdを見るが、どうやらこれはシステムでは参照していない模様。

さて、先ほどMacPortsからPHP5を入れようとした際の残骸が問題を起こすので、一旦mysql5関連のportsの残骸を削除。

% port clean mysql5

ちなみに、さすがに/opt/local/binにパスを通しました。rootユーザの場合~/.bash_profileは読まれない模様。代わりに.profileは読んでくれますね。

さて、この上でmysql5をインストール。

% port install mysql5 +server

今度は無事入りました。MySQL5をデーモンとして起動するスクリプトは"/opt/local/share/mysql5/mysql/mysql.server"ですので、これに"start"引数を渡して起動してみる事に。しかし、、、

% /opt/local/share/mysql5/mysql/mysql.server start
Starting MySQL
... ERROR! Manager of pid-file quit without updating file.

というわけでエラーが。ネット上の情報などを調べてみて、この辺を参考にさせて頂きMySQLを初期化する。すると、、、

% mysql_install_db5 --user=mysql
Installing MySQL system tables...
090130 1:37:12 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
090130 1:37:12 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
090130 1:37:12 [Warning] Setting lower_case_table_names=2 because file system for /opt/local/var/db/mysql5/ is case insensitive
OK
Filling help tables...
090130 1:37:12 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
090130 1:37:12 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
090130 1:37:12 [Warning] Setting lower_case_table_names=2 because file system for /opt/local/var/db/mysql5/ is case insensitive
OK
...
(以下、沢山の参考情報が表示されるが初期化とは無関係)
...

といった感じで初期化は無事終了。再度MySQLのデーモンを起動する。

% /opt/local/share/mysql5/mysql/mysql.server start
Starting MySQL
. SUCCESS!

今度は無事成功!なお、コマンドインタプリタがmysqlじゃなくてmysql5なので注意。異なるバージョンのMySQLを共存できる用にする為の配慮かな?

さて、次はPostgreSQLへ。

% port install postgresql83 +perl

普段PerlでもDBI/DBDでデータベースアクセスするので、一応Perlサポートも入れておく。何やら、依存関係でlibxml、libxsltそしてuuidなるパッケージも同時にインストールしているっぽい。ここで、この辺を見てびっくり。パッケージ"postgresql83"はクライアントだけだそうだ。どうりでインストール後の/opt/local/share以下を漁ってもpostmasterが無いわけだ。じゃあ、ということで早速サーバもインストールする。

% port install postgresql83-server

今度はクライアントの10倍くらいのスピードでインストール完了。共通しているソースがビルド済だったとかかしらん?MacOS起動時に自動でPostgreSQLを起動したいなら以下のコマンドを実行しろ、とご丁寧にインストーラがメッセージを吐いています。

% sudo launchctl load -w /Library/LaunchDaemons/org.macports.postgresql83-server.plist

今回はとりあえずスキップして、更にインストーラのメッセージにあるデフォルトDBの作成を行います。


% mkdir -p /opt/local/var/db/postgresql83/defaultdb
% chown postgres:postgres /opt/local/var/db/postgresql83/defaultdb
% su postgres -c '/opt/local/lib/postgresql83/bin/initdb -D /opt/local/var/db/postgresql83/defaultdb'

ここまでつつがなく完了。上記の3つのコマンドのうち最後のひとつが更なるメッセージを表示。

% /opt/local/lib/postgresql83/bin/postgres -D /opt/local/var/db/postgresql83/defaultdb

これでpostmaster (PostgreSQLのデーモンプロセス)が起動するらしい。早速やってみる。

% /opt/local/lib/postgresql83/bin/postgres -D /opt/local/var/db/postgresql83/defaultdb
"root" execution of the PostgreSQL server is not permitted.
The server must be started under an unprivileged user ID to prevent
possible system security compromise. See the documentation for
more information on how to properly start the server.

rootで起動しようとしたら怒られた・・・orz
じゃあ、って言うんでpostgresユーザで起動してみる。

% su postgres -c "/opt/local/lib/postgresql83/bin/postgres -D /opt/local/var/db/postgresql83/defaultdb"
LOG: database system was shut down at 2009-01-30 02:20:36 JST
LOG: autovacuum launcher started
LOG: database system is ready to accept connections

とここで止まる。シェルプロンプトが返ってこないので、フォアグラウンドでプロセスが起動しているみたいだ。早速別のターミナルを上げてコマンドインタプリタを実行してみる。ちなみに、コマンドインタプリタはMySQLの時と同様にバージョン番号がくっついているので注意。コマンドはpsqlじゃなくてpsql83です。

% psql83 -U postgres -l
List of databases
Name | Owner | Encoding
-----------+----------+-----------
postgres | postgres | SQL_ASCII
template0 | postgres | SQL_ASCII
template1 | postgres | SQL_ASCII
(3 rows)

うまく行きました!

さて、この後PHP5をいよいよ入れるわけですが、一息入れましょう。。。

0 件のコメント: