• 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.00 sec)
    
    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.01 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    mysql> 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的读锁。

  • 相关阅读:
    int vs Integer
    贫民窟里的WPF系列讲座(一)
    微软虚拟化技术构建高效开发与测试环境(四)
    贫民窟里的WPF系列讲座(二)
    WPF的WEBCAST内容
    微软虚拟化技术构建高效开发与测试环境(三)
    微软虚拟化技术构建高效开发与测试环境(五)
    微软虚拟化技术构建高效开发与测试环境(二)
    手把手教用XNA开发winphone7游戏(一)
    手把手教用XNA开发winphone7游戏(二)
  • 原文地址:https://www.cnblogs.com/happySmily/p/6492447.html
Copyright © 2020-2023  润新知