建立一个myisam表,会在相应的目录下生成frm,myd,myi三个文件,
可我建立了一个innodb文件后,仅仅找到了frm文件,不由得疑问,数据和索引结构都存在哪里?
create table test_tbl(a int, b int) engine = innodb;

解决方案 »

  1.   


    数据和索引在 datadir 目录中的ibdata* 文件中
      

  2.   

    15.2.3. InnoDB配置
    InnoDB存储引擎是默认地被允许的。如果你不想用InnoDB表,你可以添加skip-innodb选项到MySQL选项文件。被InnoDB存储引擎管理的两个重要的基于磁盘的资源是InnoDB表空间数据文件和它的日志文件。如果你指定无InnoDB配置选项,MySQL将在MySQL数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件。注释:InnoDB给MySQL提供具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。如果拟运行的操作系统和硬件不能如广告说的那样运行,InnoDB就不能实现如上能力。许多操作系统或磁盘子系统可能为改善性能而延迟或记录写操作。在一些操作系统上,就是系统调用(fsync()) 也要等着,直到所有未写入已被刷新文件的数据在被刷新到稳定内存之前可以确实返回了。因为这个,操作系统崩溃或掉电可能损坏当前提交的数据,或者在最坏的 情况,因为写操作已被记录了,甚至破坏了数据库。如果数据完整性对你很重要,你应该在用任何程序于生产中之前做一些“pull-the-plug”测试。Mac OS X 10.3 及以后版本,InnoDB使用一个特别的fcntl()文件刷新方法。在Linux下,建议禁止回写缓存。在ATAPI硬盘上,一个类似hdparm -W0 /dev/hda命令可能起作用。小心某些驱动器或者磁盘控制器可能不能禁止回写缓存。 注释:要获得好的性能,你应该如下面例子所讨论那样,明确提供InnoDB参数。自然地,你应该编辑设置来适合你的硬件和要求。 要建立InnoDB表空间文件,在my.cnf选项文件里的[mysqld]节里使用innodb_data_file_path选项。在Windows上,你可以替代地使用my.ini文件。innodb_data_file_path的值应该为一个或多个数据文件规格的列表。如果你命名一个以上的数据文件,用 分号(‘;’)分隔它们: innodb_data_file_path=datafile_spec1[;datafile_spec2]...
    例如:把明确创建的具有相同特征的表空间作为默认设置的设置操作如下: [mysqld]
    innodb_data_file_path=ibdata1:10M:autoextend
    这个设置配置一个可扩展大小的尺寸为10MB的单独文件,名为ibdata1。没有给出文件的位置,所以默认的是在MySQL的数据目录内。 尺寸大小用M或者G后缀来指定说明单位是MB或者GB。一个表空间,它在数据目录里包含一个名为ibdata1的固定尺寸50MB的数据文件和一个名为ibdata2大小为50MB的自动扩展文件,其可以像这样被配置: [mysqld]
    innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
    一个指定数据文件的完全后缀包括文件名,它的尺寸和数个可选属性:file_name:file_size[:autoextend[:max:max_file_size]]
    autoextend属性和后面跟着的属性只可被用来对innodb_data_file_path行里最后一个数据文件。 如果你对最后的数据文件指定autoextend选项。如果数据文件耗尽了表空间中的自由空间,InnoDB就扩展数据文件。扩展的幅度是每次8MB。如果磁盘已满,你可能想要把其它数据添加到另一个硬盘上。重新配置一个已存在表空间的指令见15.2.7节,“添加和删除InnoDB数据和日志文件”。 InnoDB并不感知最大文件尺寸,所以要小心文件系统,在那上面最大的文件尺寸是2GB。要为一个自动扩展数据文件指定最大尺寸,请使用max属性。下列配置允许ibdata1涨到极限的500MB:[mysqld]
    innodb_data_file_path=ibdata1:10M:autoextend:max:500M
    InnoDB默认地在MySQL数据目录创建表空间文件。要明确指定一个位置,请使用innodb_data_home_dir选项。比如,要使用两个名为ibdata1和ibdata2的文件,但是要把他们创建到/ibdata,像如下一样配置InnoDB:[mysqld]
    innodb_data_home_dir = /ibdata
    innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
    注释:InnoDB不创建目录,所以在启动服务器之前请确认/ibdata目录的确存在。这对你配置的任何日志文件目录来说也是真实的。使用Unix或DOS的mkdir命令来创建任何必需的目录。通过把innodb_data_home_dir的值原原本本地部署到数据文件名,并在需要的地方添加斜杠或反斜杠,InnoDB为每个数据文件形成目录路径。如果innodb_data_home_dir选项根本没有在my.cnf中提到,默认值是“dot”目录 ./,这意思是MySQL数据目录。 如果你指定innodb_data_home_dir为一个空字符串,你可以为列在innodb_data_file_path值里的数据文件指定绝对路径。下面的例子等价于前面那个例子:[mysqld]
    innodb_data_home_dir =
    innodb_data_file_path=/ibdata/ibdata1:50M;/ibdata/ibdata2:50M:autoextend
      

  3.   

    现在遇上一个问题,已经存在的ibdata1形式转换成 tbl.ibd这种形式?我现在的ibdata真是巨大无比!
      

  4.   

    ibdata 不会自动收缩。  - 1. 用mysqldump等工具导出数据
    - 2. 停止 mysqld
    - 3. 删除ibdata*, ib_logfile* 文件
    - 4. 重新启动 mysqld(这时mysqld就会自动创建 idbdata*, ib_logfile* 文件)
    - 5. 将到出来的数据导回去,体积才会减小。
      

  5.   

    同问,我试了下,确实只找到.frm文件,数据呢,有人说:http://www.chinaret.com/user/topic_view.aspx?id=b520b246-696d-44ff-aa9f-a222abe787dc
    InnoDB表:有自己的目标文件.frm,但实际的数据存放在上一级目录中,与数据库属于同一级目录但我没有找到。