MySQL 学习篇(二)MySQL常用存储引擎——MyISAM

  1. frm 结构信息
  2. MYD 数据信息
  3. MYI索引信息
  • 介绍

由于这个原因呢,现在还有大量的服务器在使用这种MyISAM的表,另外MyISAM表也是MYQL大部分系统表和临时表所使用的一种存储引擎。

这里所说的临时表,是指在排序分组等操作中,当数量超过一定的大小之后,由查询优化器所建立的磁盘临时表,MyISAM存储引擎,会将表存储在两个系统文件中,一个是数据文件,以MYD为扩展名另一个是索引文件,以MYI为扩展名。

Linux命令执行

mysql> use test

-- 创建指定存储引擎:engine=myisam
mysql> create table myIsam(id int,c1 varchar(10))engine=myisam;


-- 查看数据库表文件存储位置,后面再加上test即可:/var/lib/mysql/
mysql> show global variables like "%datadir%";
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)


-- 路径效果展示
[root@localhost ~]# cd  /var/lib/mysql/
[root@localhost mysql]# ll
总用量 110604
-rw-rw----. 1 mysql mysql       56 2月  19 13:09 auto.cnf
-rw-rw----. 1 mysql mysql 12582912 2月  19 13:09 ibdata1
-rw-rw----. 1 mysql mysql 50331648 2月  19 13:09 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 2月  19 13:09 ib_logfile1
drwx------. 2 mysql mysql     4096 2月  19 13:09 mysql
srwxrwxrwx. 1 mysql mysql        0 2月  19 13:09 mysql.sock
drwx------. 2 mysql mysql     4096 2月  19 13:09 performance_schema
drwx------. 2 mysql mysql       74 2月  19 13:16 test


[root@localhost mysql]# cd test/
[root@localhost test]# pwd
/var/lib/mysql/test


 

如下图所示,定义了一张为myIsam表,并且这个表的存储引擎呢,我们使用了MyISAM存储引擎:

下图所示,就是一个文件系统中myIsam这张表的存储方式,在这里我们可以看到,有三个以myIsam开头的文件,除了上面提到过的MYD、MYI两个文件之外呢,还有一个以frm为扩展名的文件,这个文件的并不是MyISAM存储引擎所特有的一个文件,而对于mysql所有的存储引擎来说,都会有一个frm为扩展名的文件,这个文件是用于记录这个表的结构的,而MYD和MYI两个文件的是MyISAM存储引擎所特有的一个文件。

[root@localhost test]# ls -l myIsam*
-rw-rw----. 1 mysql mysql 8582 2月  19 13:16 myIsam.frm
-rw-rw----. 1 mysql mysql    0 2月  19 13:16 myIsam.MYD
-rw-rw----. 1 mysql mysql 1024 2月  19 13:16 myIsam.MYI

 

  • MyISAM表都有哪些特性

前言:

只有知道的这些特性,我们才能明白,在什么情况下,我们应该使用MyISAM作为存储引擎

特性:

  • 并发性和所级别【MyISAM使用的是表级锁,而不是行级,也就意味着,给表中的数据进行修改时,需要对整个表,进行加锁,而在对表中的数据进行读取时,也需要就是对所以的表加共享锁,从这里我们可以看到,使用MyISAM搜索引擎的表读取和写入两种操作的是互斥的,当然在一些情况下呢,当我们对表格数据进行读取时,也可以在表的末尾插入数据,因此呢,从上面介绍可以看出,MyISAM对于读写混合操作的并发性并不太好,如果只是只读操作的话,就并发性而言,性能还是可以接受的,因为共享锁并不会阻塞共享锁】
  • 表损坏修复【MyISAM对由于任意意外关闭而损坏的MyISAM表,进行检查和修复操作,这里所说的修复的并不是事物恢复,因为MyISAM并不是一种是事务型的存储引擎,所以他也不可能记录进行事务恢复所需要的相关日志,所以要注意对MyISAM表进行修复,可能会造成数据丢失】
  • check table tablename【我们可以通过check table命令来对表进行检查】
    mysql> check table myIsam;
    +-------------+-------+----------+----------+
    | Table       | Op    | Msg_type | Msg_text |
    +-------------+-------+----------+----------+
    | test.myIsam | check | status   | OK       |
    +-------------+-------+----------+----------+
    1 row in set (0.00 sec)
    --- Msg_text 为OK状态是没有任何问题的。
    
    
    
  • repair table tablename【来对其进行恢复】
    mysql> repair table myIsam;
    +-------------+--------+----------+----------+
    | Table       | Op     | Msg_type | Msg_text |
    +-------------+--------+----------+----------+
    | test.myIsam | repair | status   | OK       |
    +-------------+--------+----------+----------+
    1 row in set (0.00 sec)
    --- 因为没有损坏,Msg_text 为OK状态是没有任何问题的。
    
    
    
    [root@localhost ~]# cd /var/lib/mysql/test
    [root@localhost test]# myisamchk
    --- 这个工具也可以对myIsam进行修复,前提Mysql服务停止。
    

     

  • MyISAM表其他特性

  • 压缩命令执行

 

[root@localhost test]# myisampack -b -f myIsam.MYI
myIsam.MYI gave error 140 on open

# 遇见140原因:myisampack从5.6.38 / 5.7.20 一个Bug 去掉.MYI即可



[root@localhost test]# myisampack -b -f myIsam
Compressing myIsam.MYD: (0 records)
- Calculating statistics
- Compressing file
Empty file saved in compressed format
# (0 records) 空文件



# 查看文件大小,-f是强制压缩
# myIsam.OLD 压缩之前文件的备份
# 实际上压缩后(MYI)的文件比压缩前(OLD)的文件还要大

[root@localhost test]# ls -lh myIsam.*
-rw-rw----. 1 mysql mysql 8.4K 2月  19 13:16 myIsam.frm
-rw-rw----. 1 mysql mysql   50 2月  19 13:46 myIsam.MYD
-rw-rw----. 1 mysql mysql 1.0K 2月  19 14:13 myIsam.MYI
-rw-rw----. 1 mysql mysql    0 2月  19 13:46 myIsam.OLD
[root@localhost test]# 
  • 对压缩过的表进行读写操作

    # 当前myIsam表已经进行压缩了,进行插入操作,结论【对于已经压缩的表是不能进行写操作的,只能读】
    mysql> insert into myIsam values(1,'haha');
    ERROR 1036 (HY000): Table 'myIsam' is read only
    
  • MyISAM存储引擎限制

  • MyISAM适用场景

比如数据仓库、报表大多数不涉及到财务的应用不需要数据的完整性;还可以对数据文件的压缩,只读类的并发性不错;存储空间类如GPS等,并且利用空间函数对所存储数据进行运算只能使用MyISAM存储引擎,大部分环境下都是使用InnoDB存储引擎进行存储:

 

猜你喜欢

转载自blog.csdn.net/Sicily_winner/article/details/87625000
今日推荐