mysql是什么数据库文件_mysql数据库文件简介和应用

存放目录:

用 whereis my.cnf 查看mysql配置文件的目录,查看my.cnf的datadir参数可找到mysql数据库文件的存放目录。

本机存放的目录为/var/lib/mysql,进入该目录可以看到以数据库名命名的文件夹。文件夹里便存放着该数据库的所有数据库文件。

数据库文件简介:

数据库文件分为 : mysql所建的数据库文件、mysql所用引擎创建的数据库文件。

.frm 保存与之同名的表的原数据信息,包含表结构定义等。与引擎无关。该文件可用来恢复或修改表结构。

MyISAM引擎的文件:

*.myd (表数据文件)

*.myi (索引文件)

InnoDB引擎的文件:

ibdata1、ibdata2等:系统表空间文件,存储InnoDB系统信息和用户数据库表数据和索引,所有表共用。

*.ibd文件:单表表空间文件,每个表使用一个表空间文件(file per table),存放用户数据库表数据和索引。

b_logfile1、ib_logfile2 :日志文件,日志文件大小在my.cnf文件中配置:innodb_log_file_size  = 256M  innodb_log_files_in_group = 2

Innodb存储引擎可以使用共享表空间或独立表空间。

1.独立表空间: 为每个表建立一个.ibd文件用来存储数据,这样,mysql就将innodb表的数据存入各自对应的.ibd文件中,但结构等信息还是会写入ibdata。

将innodb_file_per_table加到配置文件中,便可使用独立表空间。

2.共享表空间: 将innodb_file_per_table关闭之后,建立innoDB表时只生成.frm文件,数据和索引都保存在共享表空间ibdata1中。这样的缺点是拷贝时必须拷贝整个大文件,

而且删除表后容易产生碎片。

ibdata1的大小在my.cnf文件中配置:innodb_data_file_path = ibdata1:10G:autoextend:max:500M

应用:

一、恢复物理备份:

1.MyISAM引擎的表可以简单的复制每个表的.frm,.MYI,.MYD文件到新数据库对应的文件夹中即可。

2.Innodb引擎的表,一直没有通过拷贝数据库文件而成功恢复过。有待日后再补充。

二、通过修改.frm来加快alter table操作的速度:

altertable操作速度慢,以表test为例:

mysql>show create table test;+-------+---------------------------------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table |

+-------+---------------------------------------------------------------------------------------------------------------------------------------------------+

| test |CREATE TABLE `test` (

`id`int(11) DEFAULT NULL,

`name`char(1) DEFAULT '',

`name1`char(1) DEFAULT '') ENGINE=InnoDB DEFAULT CHARSET=utf8 |

+-------+---------------------------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00sec)

mysql> select *from test;+------+------

| id | name |

+------+------

| 1 | |

| 3 | |

| 4 | |

+------+------

3 rows in set (0.00 sec)

通过show profile来分析alter执行速度。

mysql> alter table test add column name1 char default "";

Query OK,3 rows affected (0.01sec)

Records:3 Duplicates: 0 Warnings: 0mysql> show profile for query 8;+----------------------+----------+

| Status | Duration |

+----------------------+----------+

| starting | 0.000082 |

| checking permissions | 0.000010 |

| checking permissions | 0.000012 |

| init | 0.000054 |

| Opening tables | 0.000023 |

| System lock | 0.000011 |

| Table lock | 0.000014 |

| setup | 0.000033 |

| creating table | 0.002701 |

| After create | 0.000120 |

| copy to tmp table | 0.000589 |

| rename result table | 0.002465 |

| end | 0.000067 |

| query end | 0.000012 |

| freeing items | 0.000044 |

| cleaning up | 0.000011 |

+----------------------+----------+

16 rows in set (0.00 sec)

从日志可看出,这个alter实现的方法是:用新的结构创建一个空表,从旧表中查出所有数据插入新表,然后删除旧表。

不过不是所有的alter操作都会引起表重建。比如alter column。 (alter table 允许使用alter column, modify column, change column语句修改列,这三种操作都是不一样的,这个日后再详细说)

alter column语句直接修改.frm文件而不涉及表数据,所以会快很多。

移除一个列的auto_increment属性;增加、移除或更改ENum和set常量,是可以不用重建表的,这些就可以通过修改.frm文件直接来改变表结构。

方法如下:

1.创建一张相同结构的空表,并进行所需要的修改。

2.flush tables with read lock 来关闭所有正在使用的表,并禁止任何表被打开。

3.交换.frm文件

4.执行 unlock tables来释放步骤2的读锁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值