随锐旗下传媒:众体网 | 众娱网 | 发掘网 | 搜讯网

将MySQL作为文件系统使用

http://www.weaseek.com  2008年02月21日 17:04:35   来源:IT168 发表评论

  利用MySQLfs,我们可以将一个文件系统直接扔到MySQL数据库中,并可以利用数据库的备份,集群和复制等功能来保护MySQLfs文件系统。

  利用MySQLfs,我们可以将一个文件系统直接扔到MySQL数据库中,并可以利用数据库的备份,集群和复制等功能来保护MySQLfs文件系统。

  利用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 | |
  +-------+------------------+------+-----+---------+-------+

[责任编辑:海燕]热门关键词: MySQL 数据库 系统

相关文章

发表评论

  • 昵 称:
  • 匿名发表

>>更多评论

  • · 您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
  • · 留言板管理人员有权保留或删除其管辖留言中的任意内容
  • · Weaseek.Com提醒:不要进行人身攻击。谢谢配合。