|
|
Fedora、openSUSE、UbuntuにはMySQLfsのバイナリー・パッケージは含まれていない。したがって、MySQLfsを使うにはソースからビルドする必要がある。また、あらかじめmysql-develとfuse-develをインストールしておかなければならない(FUSEにより、一般のプログラムがLinuxカーネルを介してファイルシステムを開示できるようになる。つまり、任意のアプリケーションからFUSEファイルシステムが直接使えるようになる)。develパッケージに不足がある場合、configureでエラーが発生するが、これが若干の混乱を引き起こすことがあるので注意されたい。たとえば、私がFedora 8 64ビット・マシンで試行したときはmysqlclient_rのリンクに失敗した。これはFUSE開発パッケージがなかったのが原因だ。つまり、このエラーによりリンカーのフラグに-Lが生成されたために、mysqlclientテスト・プログラムのリンクに失敗したのだ。また、ビルドではデフォルトで-Wall -Werrorが含まれているため、警告メッセージが発生した時点でビルドは直ちに中止される。これを回避するため、-Werrorを外してコンパイルし、必要な開発パッケージがすべてインストールされていることを確認しておく。MySQLfsがビルドできたら、make installコマンドでMySQLfsを/usr/local/binにインストールする。
MySQLfsを使用できるようMySQLデータベースを設定する手順を以下に示す。ここで、make installでは、schema.sqlファイルがファイルシステムのどこにもインストールされないことに注意。あとでほかのMySQLfsデータベースを設定する場合はこのスキーマをどこかにコピーしておかなければならない。
# mysql -p mysql> CREATE DATABASE mysqlfs; mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON mysqlfs.* TO mysqlfs@"%" IDENTIFIED BY 'foobar'; mysql> FLUSH PRIVILEGES; mysql> Bye # mysql -uroot -p mysqlfs < /tmp/mysqlfs-0.4.0-rc1/schema.sql
データベース・スキーマは、tree、inodes、data_blocksという3つのテーブルから成る。treeはinodeの子から親への対応だ。テーブルの一部を下に例示する。
以下の例は、guten/alice13a.txtというファイルをインポートしたときのものだ。treeテーブルはファイルシステム中のファイルやディレクトリーの階層を表現しており、この場合ファイルalice13a.txtはディレクトリーgutenの中にあり、ディレクトリーgutenはMySQLfsファイルシステムのルートの下にあることを示している。inodesテーブルにはstat(2)で得られるすべての情報が、data_blocksテーブルにはファイルの内容がバイト列として格納されている。
mysql> select * from tree; +-------+--------+----------------------+ | inode | parent | name | +-------+--------+----------------------+ | 1 | NULL | / | | 2 | 1 | guten | | 3 | 2 | alice13a.txt | ... mysql> select * from inodes; +-------+-------+---------+-------+-----+-----+------------+------------+------------+----------+ | inode | inuse | deleted | mode | uid | gid | atime | mtime | ctime | size | +-------+-------+---------+-------+-----+-----+------------+------------+------------+----------+ | 1 | 0 | 0 | 16877 | 0 | 0 | 1201155861 | 1201155861 | 1201155861 | 0 | | 2 | 0 | 0 | 16888 | 500 | 500 | 1200108244 | 1200108244 | 1201156234 | 0 | | 3 | 0 | 0 | 33184 | 500 | 500 | 1200108239 | 1200108239 | 1201156234 | 153477 | ... mysql> describe data_blocks; +-------+------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+-------+ | inode | bigint(20) | NO | PRI | | | | seq | int(10) unsigned | NO | PRI | | | | data | blob | YES | | NULL | | +-------+------------------+------+-----+---------+-------+