您的位置:首页 > 数据库 > MySQL

mysql数据文件

2015-12-23 16:42 399 查看
在MySQL 中每一个数据库都会在定义好(或者默认)的数据目录下存在一个以数据库名

字命名的文件夹,用来存放该数据库中各种表数据文件。不同的MySQL 存储引擎有各自不同

的数据文件,存放位置也有区别。多数存储引擎的数据文件都存放在和MyISAM 数据文件位

置相同的目录下,但是每个数据文件的扩展名却各不一样。如MyISAM 用“.MYD”作为扩展

名,Innodb 用“.ibd”,Archive 用“.arc”,CSV 用“.csv”,等等。

1、“.frm”文件

与表相关的元数据(meta)信息都存放在“.frm”文件中,包括表结构的定义信息等。

不论是什么存储引擎,每一个表都会有一个以表名命名的“.frm”文件。所有的“.frm”文

件都存放在所属数据库的文件夹下面。

2、“.MYD”文件

“.MYD”文件是MyISAM 存储引擎专用,存放MyISAM 表的数据。每一个MyISAM 表都会

有一个“.MYD”文件与之对应,同样存放于所属数据库的文件夹下,和“.frm”文件在一起。

3、“.MYI”文件

“.MYI”文件也是专属于MyISAM 存储引擎的,主要存放MyISAM 表的索引相关信息。对

于MyISAM 存储来说,可以被cache 的内容主要就是来源于“.MYI”文件中。每一个MyISAM

表对应一个“.MYI”文件,存放于位置和“.frm”以及“.MYD”一样。

4、“.ibd”文件和ibdata 文件

这两种文件都是存放Innodb 数据的文件,之所以有两种文件来存放Innodb 的数据(包

括索引),是因为Innodb 的数据存储方式能够通过配置来决定是使用共享表空间存放存储数

据,还是独享表空间存放存储数据。独享表空间存储方式使用“.ibd”文件来存放数据,且

每个表一个“.ibd”文件,文件存放在和MyISAM 数据相同的位置。如果选用共享存储表空

间来存放数据,则会使用ibdata 文件来存放,所有表共同使用一个(或者多个,可自行配

置)ibdata 文件。ibdata 文件可以通过innodb_data_home_dir 和innodb_data_file_path

两个参数共同配置组成, innodb_data_home_dir 配置数据存放的总目录, 而

innodb_data_file_path 配置每一个文件的名称。当然, 也可以不配置

innodb_data_home_dir 而直接在innodb_data_file_path 参数配置的时候使用绝对路径来

完成配置。innodb_data_file_path 中可以一次配置多个ibdata 文件。文件可以是指定大

小,也可以是自动扩展的,但是Innodb 限制了仅仅只有最后一个ibdata 文件能够配置成自

动扩展类型。当我们需要添加新的ibdata 文件的时候,只能添加在innodb_data_file_path

配置的最后,而且必须重启MySQL 才能完成ibdata 的添加工作。不过如果我们使用独享表

空间存储方式的话,就不会有这样的问题,但是如果要使用裸设备的话,每个表一个裸设备,

可能造成裸设备数量非常大,而且不太容易控制大小,实现比较困难,而共享表空间却不会

有这个问题,容易控制裸设备数量。我个人还是更倾向于使用独享表空间存储方式。当然,

两种方式各有利弊,看大家各自应用环境的侧重点在那里了。

mysql的InnoDB参数详解

innodb_data_home_dir
这是InnoDB表的目录共用设置。如果没有在 my.cnf 进行设置,InnoDB 将使用MySQL的 datadir 目录为缺省目录。如果设定一个空字串,可以在 innodb_data_file_path 中设定绝对路径。
innodb_data_file_path
单独指定数据文件的路径与大小。数据文件的完整路径由 innodb_data_home_dir 与这里所设定值的组合。 文件大小以 MB 单位指定。因此在文件大小指定后必有“M”。 InnoDB 也支持缩写“G”, 1G = 1024M。从 3.23.44 开始,在那些支持大文件的操作系统上可以设置数据文件大小大于 4 GB。而在另一些操作系统上数据文件必须小于 2 GB。数据文件大小总和至少要达到 10 MB。在 MySQL-3.23 中这个参数必须在 my.cnf 中明确指定。在 MySQL-4.0.2 以及更新版本中则不需如此,系统会默认在
MySQL 的 datadir 目录下创建一个 16 MB 自扩充(auto-extending)的数据文件 ibdata1。你同样可以使用一个 原生磁盘分区(RAW raw disk partitions(raw devices)) 作为数据文件, 如何在 my.cnf 中详细指定它们请查看第 12.1 节。
innodb_mirrored_log_groups
为了保护数据而设置的日志文件组的拷贝数目,默认设置为 1。在 my.cnf 中以数字格式设置。
innodb_log_group_home_dir
InnoDB 日志文件的路径。必须与 innodb_log_arch_dir 设置相同值。 如果没有明确指定将默认在 MySQL 的 datadir 目录下建立两个 5 MB 大小的 ib_logfile... 文件。
innodb_log_files_in_group
日志组中的日志文件数目。InnoDB 以环型方式(circular fashion)写入文件。数值 3 被推荐使用。在 my.cnf 中以数字格式设置。
innodb_log_file_size
日志组中的每个日志文件的大小(单位 MB)。如果 n 是日志组中日志文件的数目,那么理想的数值为 1M 至下面设置的缓冲池(buffer pool)大小的 1/n。较大的值,可以减少刷新缓冲池的次数,从而减少磁盘 I/O。但是大的日志文件意味着在崩溃时需要更长的时间来恢复数据。 日志文件总和必须小于 2 GB,3.23.55 和 4.0.9 以上为小于 4 GB。在 my.cnf 中以数字格式设置。
innodb_log_buffer_size
InnoDB 将日志写入日志磁盘文件前的缓冲大小。理想值为 1M 至 8M。大的日志缓冲允许事务运行时不需要将日志保存入磁盘而只到事务被提交(commit)。 因此,如果有大的事务处理,设置大的日志缓冲可以减少磁盘I/O。 在 my.cnf 中以数字格式设置。
innodb_flush_log_at_trx_commit
通常设置为 1,意味着在事务提交前日志已被写入磁盘, 事务可以运行更长以及服务崩溃后的修复能力。如果你愿意减弱这个安全,或你运行的是比较小的事务处理,可以将它设置为 0 ,以减少写日志文件的磁盘 I/O。这个选项默认设置为 0。
innodb_log_arch_dir
The directory where fully written log files would be archived if we used log archiving. 这里设置的参数必须与 innodb_log_group_home_dir 相同。 从 4.0.6 开始,可以忽略这个参数。
innodb_log_archive
这个值通常设为 0。 既然从备份中恢复(recovery)适合于 MySQL 使用它自己的 log files,因而通常不再需要 archive InnoDB log files。这个选项默认设置为 0。
innodb_buffer_pool_size
InnoDB 用来高速缓冲数据和索引内存缓冲大小。 更大的设置可以使访问数据时减少磁盘 I/O。在一个专用的数据库服务器上可以将它设置为物理内存的 80 %。 不要将它设置太大,因为物理内存的使用竞争可能会影响操作系统的页面调用。在 my.cnf 中以数字格式设置。
innodb_additional_mem_pool_size
InnoDB 用来存储数据字典(data dictionary)信息和其它内部数据结构(internal data structures)的存储器组合(memory pool)大小。理想的值为 2M,如果有更多的表你就需要在这里重新分配。如果 InnoDB 用尽这个池中的所有内存,它将从操作系统中分配内存,并将错误信息写入 MySQL 的错误日志中。在 my.cnf 中以数字格式设置。
innodb_file_io_threads
InnoDB 中的文件 I/O 线程。 通常设置为 4,但是在 Windows 下可以设定一个更大的值以提高磁盘 I/O。在 my.cnf 中以数字格式设置。
innodb_lock_wait_timeout
在回滚(rooled back)之前,InnoDB 事务将等待超时的时间(单位 秒)。InnoDB 会自动检查自身在锁定表与事务回滚时的事务死锁。如果使用 LOCK TABLES 命令,或在同一个事务中使用其它事务安全型表处理器(transaction safe table handlers than InnoDB),那么可能会发生一个 InnoDB 无法注意到的死锁。在这种情况下超时将用来解决这个问题。这个参数的默认值为 50 秒。在 my.cnf 中以数字格式设置。
innodb_flush_method
这个参数仅仅与 Unix 相关。这个参数默认值为 fdatasync。 另一个设置项为 O_DSYNC。这仅仅影响日志文件的转储,在 Unix 下以 fsync 转储数据。InnoDB 版本从 3.23.40b 开始,在 Unix 下指定 fdatasync 为使用 fsync 方式、指定 O_DSYNC 为使用 O_SYNC 方式。由于这在某些 Unix 环境下还有些问题所以在 'data' versions 并没有被使用。
innodb_force_recovery
警告:此参数只能在你希望从一个被损坏的数据库中转储(dump)数据的紧急情况下使用! 可能设置的值范围为 1 - 6。查看下面的章节 'Forcing recovery' 以了解这个参数的具体含义。参数设置大于 0 的值代表着 InnoDB 防止用户修改数据的安全度。从 3.23.44 开始,这个参数可用。在 my.cnf 中以数字格式设置。
innodb_fast_shutdown
InnoDB 缺少在关闭之前清空插入缓冲。这个操作可能需要几分钟,在极端的情况下可以需要几个小时。如果这个参数据设置为 1 ,InnoDB 将跳过这个过程而直接关闭。从 3.23.44 和 4.0.1 开始,此参数可用。从 3.23.50 开始,此参数的默认值为 1。
innodb_thread_concurrency
InnoDB 会试图将 InnoDB 服务的使用的操作系统进程小于或等于这里所设定的数值。此参数默认值为 8。如果计算机系统性能较低或 innodb_monitor 显示有很多线程等侍信号,应该将这个值设小一点。如果你的计算机系统有很我的处理器与磁盘系统,则可以将这个值设高一点以充分利用你的系统资源。建议设值为处理器数目+ 磁盘数目。 从 3.23.44 和 4.0.1 开始,此参数可用。在 my.cnf 中以数字格式设置。
上面仅仅介绍了两种最常用存储引擎的数据文件,此外其他各种存储引擎都有各自的数

据文件,读者朋友可以自行创建某个存储引擎的表做一个简单的测试,做更多的了解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: