数据库:MySQL的存储引擎到底是怎么回事?

存储 存储软件
存储引擎的各项特性就是为了保障数据库的安全和性能设计结构。

 [[271516]]

一.存储引擎简介

 

数据库:MySQL的存储引擎到底是怎么回事?

  • 1、文件系统:
  • 1.1 操作系统组织和存取数据的一种机制。
  • 1.2 文件系统是一种软件。
  • 2、文件系统类型:ext2 3 4 ,xfs 数据
  • 2.1 不管使用什么文件系统,数据内容不会变化
  • 2.2 不同的是,存储空间、大小、速度。
  • 3、MySQL引擎:
  • 3.1 可以理解为,MySQL的“文件系统”,只不过功能更加强大。
  • 4、MySQL引擎功能:
  • 4.1 除了可以提供基本的存取功能,还有更多功能事务功能、锁定、备份和恢复、优化以及特殊功能

总之,存储引擎的各项特性就是为了保障数据库的安全和性能设计结构。

二.MySQL自带的存储引擎类型

MySQL 提供以下存储引擎:

  • 01)InnoDB
  • 02)MyISAM
  • 03)MEMORY
  • 04)ARCHIVE
  • 05)FEDERATED
  • 06)EXAMPLE
  • 07)BLACKHOLE
  • 08)MERGE
  • 09)NDBCLUSTER
  • 10)CSV

还可以使用第三方存储引擎:

  • 01)MySQL当中插件式的存储引擎类型
  • 02)MySQL的两个分支
  • 03)perconaDB
  • 04)mariaDB
  1. #查看当前MySQL支持的存储引擎类型 
  2. mysql> show engines 
  3. #查看innodb的表有哪些 
  4. mysql> select table_schema,table_name,engine from information_schema.tables where engine='innodb'
  5. #查看myisam的表有哪些 
  6. mysql> select table_schema,table_name,engine from information_schema.tables where engine='myisam'

1、innodb和myisam的区别

物理上的区别:

  1. #进入mysql目录 
  2. [root@db01~l]# cd /application/mysql/data/mysql 
  3. #查看所有user的文件 
  4. [root@db01 mysql]# ll user.* 
  5. -rw-rw---- 1 mysql mysql 10684 Mar 6 2017 user.frm 
  6. -rw-rw---- 1 mysql mysql 960 Aug 14 01:15 user.MYD 
  7. -rw-rw---- 1 mysql mysql 2048 Aug 14 01:15 user.MYI 
  8. #进入word目录 
  9. [root@db01 world]# cd /application/mysql/data/world/ 
  10. #查看所有city的文件 
  11. [root@db01 world]# ll city.* 
  12. -rw-rw---- 1 mysql mysql 8710 Aug 14 16:23 city.frm 
  13. -rw-rw---- 1 mysql mysql 688128 Aug 14 16:23 city.ibd 

2.innodb存储引擎的简介

在MySQL5.5版本之后,默认的存储引擎,提供高可靠性和高性能。

优点:

  • 01)事务安全(遵从 ACID)
  • 02)MVCC(Multi-Versioning Concurrency Control,多版本并发控制)
  • 03)InnoDB 行级别锁定
  • 04)Oracle 样式一致非锁定读取
  • 05)表数据进行整理来优化基于主键的查询
  • 06)支持外键引用完整性约束
  • 07)大型数据卷上的最大性能
  • 08)将对表的查询与不同存储引擎混合
  • 09)出现故障后快速自动恢复
  • 10)用于在内存中缓存数据和索引的缓冲区池

数据库:MySQL的存储引擎到底是怎么回事?

innodb核心特性

重点:

  • MVCC
  • 事务
  • 行级锁
  • 热备份
  • Crash Safe Recovery(自动故障恢复)

3.查看存储引擎

1)使用 SELECT 确认会话存储引擎

  1. #查询默认存储引擎 
  2. SELECT @@default_storage_engine; 

2)使用 SHOW 确认每个表的存储引擎

  1. #查看表的存储引擎 
  2. SHOW CREATE TABLE City\G 
  3. SHOW TABLE STATUS LIKE 'CountryLanguage'\G 

3)使用 INFORMATION_SCHEMA 确认每个表的存储引擎

  1. #查看表的存储引擎 
  2. SELECT TABLE_NAME, ENGINE FROM INFORMATION_SCHEMA.TABLESWHERE TABLE_NAME = 'City'AND TABLE_SCHEMA = 'world'\G 

4.存储引擎的设置

1)在启动配置文件中设置服务器存储引擎

 

  1. #在配置文件的[mysqld]标签下添加 
  2. [mysqld] 
  3. default-storage-engine=<Storage Engine> 

2)使用 SET 命令为当前客户机会话设置

 

  1. #在MySQL命令行中临时设置 
  2. SET @@storage_engine=<Storage Engine> 

(3)在 CREATE TABLE 语句指定

  1. #建表的时候指定存储引擎 
  2. CREATE TABLE t (i INT) ENGINE = <Storage Engine>; 

 三.真实企业案例

项目背景:

公司原有的架构:一个展示型的网站,LAMT,MySQL5.1.77版本(MYISAM),50M数据量。

小问题不断:

1、表级锁:对表中任意一行数据修改类操作时,整个表都会锁定,对其他行的操作都不能同时进行。

2、不支持故障自动恢复(CSR):当断电时有可能会出现数据损坏或丢失的问题。

如何解决:

1、提建议将现有的MYISAM引擎替换为Innodb,将版本替换为5.6.38

1)如果使用MYISAM会产生”小问题”,性能安全不能得到保证,使用innodb可以解决这个问题。

2)5.1.77版本对于innodb引擎支持不够完善,5.6.38版本对innodb支持非常完善了。

2、实施过程和注意要素

1)备份生产库数据(mysqldump)

  1. [root@db01 ~]# mysqldump -uroot -p123 -A --triggers -R --master-data=2 >/tmp/full.sql 

2)准备一个5.6.38版本的新数据库

3)对备份数据进行处理(将engine字段替换)

  1. [root@db01 ~]# sed -i 's#ENGINE=MYISAM#ENGINE=INNODB#g' /tmp/full.sql 

4)将修改后的备份恢复到新库

5)应用测试环境连接新库,测试所有功能

6)停应用,将备份之后的生产库发生的新变化,补偿到新库

7)应用割接到新数据库

责任编辑:武晓燕 来源: 今日头条
相关推荐

2023-10-12 08:54:20

Spring事务设置

2022-04-15 08:54:39

PythonAsync代码

2021-10-15 21:16:00

手机内存漏洞

2018-01-28 13:59:23

小程序微信开发者

2015-05-29 09:34:13

2018-03-13 10:32:43

2023-03-29 08:24:30

2022-05-26 11:36:12

APK文件小米

2023-03-05 15:41:58

MySQL日志暴涨

2024-03-15 08:06:58

MySQLJOIN命令

2019-05-28 13:50:27

MySQL幻读数据库

2021-06-04 11:10:04

JavaScript开发代码

2020-02-18 11:19:36

物联网病毒物联网IOT

2010-04-20 09:55:37

2021-05-19 10:44:42

数据库架构技术

2021-03-19 07:40:22

缓存数据库日志

2020-08-12 09:10:16

AI芯片AI人工智能

2022-01-25 20:23:21

联邦通信委员会联邦航空管理局5G

2018-08-26 15:39:03

数据库MySQL索引

2019-12-18 18:31:10

黑客医疗保险软件
点赞
收藏

51CTO技术栈公众号