【IT专家网独家】利用MySQLfs这个工具,我么可以在MySQL关系数据库中存储文件系统。MySQLfs将文件系统中文件的字节内容分解成数据库中的元组,而数据库并不需要支持BLOB超大字段类型。利用MySQLfs,我们可以将一个文件系统直接扔到MySQL数据库中,并可以利用数据库的备份,集群和复制等功能来保护MySQLfs文件系统。
MySQLfs似乎并不为Fedora, openSUSE, 或Ubuntu等系统提供二进制包,所以你必须编译它的源文件。为了编译MySQLfs,我们必须先安装mysql-devel和fuse-devel包(FUSE可以让任何应用程序通过LINUX内核访问文件系统,这意味着你可以立即用任意的应用程序来使用FUSE文件系统)。如果你丢失了一些devel包,配置时将会遇到一些比较麻烦的问题。举例来说,在我的Fedora 8 64位机上,刚开始因为找不到FUSE开发包,我无法通过mysqlclient_r链接;找不到FUSE开发包这个错误将在链接标签中生成一个单独的 –L,从而导致链接mysql客户端测试程序失败。另外,编译将默认使用-Wall,-Werror,在开始产生警告时也会导致编译失败。因此,我们可以不使用-Werror,并确保需要的所有包都已经安装等方式来解决编译问题。一但成功编译source,make install命令将把MySQLfs默认安装到目录/usr/local/bin下。
下面的命令可以通过MySQLfs来创建一个MySQL数据库。
注意:make install命令在默认情况下并没有将schema.sql安装到你的计算机上,你必须将schema复制到某个位置,以方便以后建立其他的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 |
该数据库模式包含3个表:tree、inodes和data_blocks。tree表将一个节点inode映射到其父节点,下图将显示部分表的内容。
在下面显示的模式中,我通过路径guten/alice13a.txt导入了一个文件。文件系统的命名层次结构是在树表中表示的,the alice13a.txt这个文件被存放到guten目录下,guten目录是在MySQLfs文件系统根目录下创建的。inode表包含了所有的信息,这些信息可以被start(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 | | +-------+------------------+------+-----+---------+-------+ |

