MySQL的存储引擎
存储引擎介绍
- 文件系统
- 操作系统组织和存取数据的一种机制
- 文件系统是一种软件
- 文件系统
- 不管使用什么文件系统,数据内容不会变化
- 不同的是,存储空间、大小、速度
- mysql引擎
- 可以理解为MySQL的文件系统,只不过功能更加强大
- MySQL引擎功能
- 处理可以提供基本的存取功能,还有更多功能事物功能,锁定,备份和恢复、优化以及特殊功能
总之存储引擎的各项是特效就是为了保证数据库的安全和性能设计结构。
mysql自带的存储引擎类型
mysql提供一下存储引擎:
1.InonDB
2.MyISAM
3.MEMORY
4.ARCHIVE
5.FEDERATED
6.EXAMPLE
7.BLACKHOLE
8.MERGE
9.NDBCLUSTER
10.CSV
# 还可以使用第三方存储引擎
1.MySQL当中的插件式的存储引擎
2.MySQL的两个分支
perconaDB
mariaDB
查看MySQL的存储引擎
# 查看所有的存储引擎
show engines
# 查看库中哪些表示InnoDB的存储引擎
select TABLE_SCHEMA,TABLE_NAME,ENGINE from information_schema.tables where engine='innodb';
# 查看库中哪些表示是Myisam的存储引擎
select TABLE_SCHEMA,TABLE_NAME,ENGINE from information_schema.tables where engine='myisam';
InnoDB和Mylsam的区别
物理区别
# innodb
-rw-r----- 1 mysql mysql 8710 Aug 15 10:05 city.frm # 表结构文件
-rw-r----- 1 mysql mysql 704512 Aug 15 10:05 city.ibd # 数据文件
# myisam
-rw-r----- 1 mysql mysql 10816 Aug 3 01:48 user.frm # 表结构文件
-rw-r----- 1 mysql mysql 456 Aug 9 10:17 user.MYD # 数据文件
-rw-r----- 1 mysql mysql 4096 Aug 9 11:04 user.MYI # 数据文件
逻辑结构
# 在mysql5.5版本之后,默认的存储引擎,提供高可靠性和高性能
优点
1.事物安全
2.MVCC (Multi-Versioning Concurrency Control,多版本并发控制)
3.InnoDB 行级别锁定
4.Orade 样式一致非锁定读取
5.表数据进行整理来优化基于主键的查询
6.支持外键应用完整性约束
7.大小数据卷上的最大性能
8.将对表的查询与不同存储引擎混合
9.出现故障后快速自动回复
10.用于在内存中缓存数据和所有的缓存区池
InnoDB
# 重点
- MVCC
- 事物
- 行级锁
- 热备份
- Crash Safe Recovery (自动故障恢复)
# 查看存储引擎
SELECT @@default_storage_engine;
# 查看建表语句
show create table student;
select TABLE_SCHEMA,TABLE_NAME,ENGINE from information_schema.tables where engine='innodb' and table_name='stu';
show table status like 'stu'\G
设置存储引擎
# 编辑MySQL配置文件
[mysql]
default-storage-engine=<Storage Engine>
default-storage-engine=innodb
default-storage-engine=myisam
# 库内临时设置
create table 表名(id int)engine='存储引擎名';
企业案例
项目背景:
公司原有的架构:一个展示形的网站,LAMT,MySQL5.1.77版本(MYISAM),50M数据量。
小问题不断:
-
表级锁:对表中任意一行数据修改类操作时,整个表都会锁定,对其他行的操作都不能同时操作
-
不支持故障自动恢复(CSR) :当断电时有可能会出现数据孙华或丢失的问题。
如何解决
- 提议将现有的MYISAM引擎替换为Innodb,将版本替换为5.6.38
- 如果使用MYISAM会产生小问题,性能安全不能得到保障,使用innodb可以结局这个问题
- 5.1.77版本对于innodb引擎支持不够完善,5.6.38版本对innodb支持非常完善
- 实施过程和注意要素
解决思路和过程
1.开会讨论。停机维护
2.将操作步骤,提前写在文档中
2.1 准备新环境
新的centos系统
新的MySQL版本
配置文件优化好
服务启动好
3.关闭所有连接数据库的服务
systemctl stop php-fpm
systemctl stop tomcat
4.停数据库
systemctl stop mysqld
5.备份数据库中的全部数据
mysqldump -A -R --trigger --single-transaction --master-data=1
6.将备份的数据发送到新环境中
将myisam存储引擎改成innodb
# 方案一
#!/bin/bash
for table in ` mysql -e 'show tables from zls'|awk 'NR>1'`;do
mysql -e "alter table zls.$table engine='myisam'";
done、
# 方案二
mysqldump -B zls > /tmp/zls.sql
:%s@ENGINE=MyISAM@ENGINE=InnoDB@g
7.将数据库导入到新的数据库中
8.将几台web服务器,连接到新库,做测试
9.应用割接
标签:engine,存储,MySQL,引擎,innodb,mysql
From: https://www.cnblogs.com/ghjhkj/p/16589429.html