MySQL8.0高级应用——基础理论篇

MySQL架构原理

这里不是MySQL入门教程,如果没有MySQL基础,请先学习MySQL基础以后再来学习这里的内容。今天的第一篇先从基础的开始。

1. MySQL架构模式的演变

单实例架构模式

该模式就是只部署1台数据库实例
缺点:
1. 数据访问量太大,超出一台服务器承受极限
2. 读写操作量太大,超出一台服务器承受极限
3. 一台服务器挂了,应用也挂了
优点:
1. 简单快速

主从架构模式

缺点:
1. 数据量太大,超出一台服务器承受极限
2. 写操作太大,超出一台master服务器承受极限
优点:
1. 读写分离
2. 容灾性能比单实例要好一些

分库分表架构模式

缺点:
1. 架构复杂
2. 数据访问路由规则复杂
3. 数据一致性保证难度大
优点:
1. 水平分解数据库,分解后的数据库内部也形成集群
2. 解决数据量太大导致数据库无法承受的问题

云数据库架构模式

缺点:
1. 可自定义性较弱,无法根据自己企业需求定制化
优点:
1. 使用简单
2. 安全问题由云服务商负责
3. 弹性的性能
4. 配套服务全面

2. MySQL常用基础指令

错误日志:

mysql> show variables like '%log_err%';

常规日志:

mysql> show variables like '%general%';

二进制日志:不记录数据库查询操作,只记录修改操作,可用于数据库恢复。

mysql> show variables like '%log_bin%';
mysql> show variables like '%binlog%';
mysql> show binary logs;

慢查询日志:记录所有执行时间超时的查询SQL,默认超时时间:10秒

// 是否开启慢查询日志
mysql> show variables like '%slow_query%';
// 查询慢查询超时时长
mysql> show variables like '%long_query_time%';
// 修改慢查询超时时长
mysql> set long_query_time = 5;

查询数据库保存路径

mysql> show variables like '%datadir%';

查询数据库的进程信息

mysql> show processlist;
mysql> show full processlist;

查询数据库查询缓存配置

mysql> show variables like '%query%';
mysql> show status like 'Qcache%';

查看MySQL查询引擎配置

mysql> show engines;

3. InnoDB和MyISAM主要区别

InnoDB和MyISAM是使用MySQL时最常用的两种引擎类型,他们最主要的区别如下:

事务和外键

InnoDB:支持事务和外键,具有安全性和完整性,适合大量insert或update操作
MyISAM:不支持事务和外键,它提供高速存储和检索,适合大量的select查询操作

锁机制

InnoDB:支持行级锁,锁定指定记录。基于索引来加锁实现。
MyISAM:支持表级锁,锁定整张表。

索引结构

InnoDB:使用聚集索引(聚簇索引),索引和记录在一起存储,既缓存索引,也缓存记录。
MyISAM:使用非聚集索引(非聚簇索引),索引和记录分开。

并发处理能力

InnoDB:读写阻塞与事务隔离级别有关,可以采用多版本并发控制(MVCC)来支持高并发。
MyISAM:使用表锁,会导致写操作并发率低,读之间并不阻塞,读写阻塞。

存储文件

InnoDB:表对应两个文件,一个.frm表结构文件,一个.ibd数据文件。InnoDB表最大支持64TB;
MyISAM:表对应三个文件,一个.frm表结构文件,一个.myd表数据文件,一个.myi索引文件。从MySQL5.0开始默认限制是256TB。

两种引擎的适用场景

【MyISAM】

  • 不需要事务支持(不支持)
  • 并发相对较低(锁定机制问题)
  • 数据修改相对较少,以读为主
  • 数据一致性要求不高

【InnoDB】

  • 需要事务支持(具有较好的事务特性)
  • 行级锁定对高并发有很好的适应能力
  • 数据更新较为频繁的场景
  • 数据一致性要求较高
  • 硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,减少磁盘IO

【总结】
两种引擎该如何选择?

场景问题推荐
是否需要事务?需要-InnoDB / 不需要-MyISAM
是否存在并发修改?存在-InnoDB / 不存在-MyISAM
是否追求快速查询且数据修改少?是-MyISAM / 否-InnoDB
通常情况下的默认引擎推荐?InnoDB

引擎支持特性如下:

原文出处 https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html

FeatureMyISAMMemoryInnoDBArchiveNDB
B-treeindexesYesYesYesNo
Backup/point-in-time recovery (note 1)YesYesYesYesYes
Cluster database supportNoNoNoNoYes
Clustered indexesNoNoYesNoNo
Compressed dataYes (note 2)NoYesYesNo
Data cachesNoN/AYesNoYes
Encrypted dataYes (note 3)Yes (note 3)Yes (note 4)Yes (note 3)Yes (note 3)
Foreign key supportNoNoYesNoYes (note 5)
Full-text search indexesYesNoYes (note 6)NoNo
Geospatial data type supportYesNoYesYesYes
Geospatial indexing supportYesNoYes (note 7)NoNo
Hash indexesNoYesNo (note 8)NoYes
Index cachesYesN/AYesNoYes
Locking granularityTableTableRowRowRow
MVCCNoNoYesNoNo
Replication support (note 1)YesLimited (note 9)YesYesYes
Storage limits256TBRAM64TBNone384EB
T-tree indexesNoNoNoNoYes
TransactionsNoNoYesNoYes
Update statistics for data dictionaryYesYesYesYesYes

InnoDB引擎存储结构
https://dev.mysql.com/doc/refman/8.0/en/innodb-architecture.html
在这里插入图片描述
显示innodb引擎信息:

mysql> show engine innodb status;

mysql> show variables like '%innodb_page_size%'; (页大小字节数)
mysql> select @@innodbe_page_size; (页大小字节数)
mysql> select @@innodbe_page_size/1024; (页大小KB数)

mysql> show variables like '%innodb_old%'; (字节数)

读缓冲区配置

mysql> show variables like '%innodb_buffer%'; (Buffer Pool大小)

innodb_buffer_pool_size可调整为物理内存的60~80%容量,innodb_buffer_pool_instances可以设置为多个,这样可以避免缓存争夺。
Page -> chunk -> Buffer Pool
写缓冲区配置
ChangeBuffer占用BufferPool空间,默认占25%,最大允许占50%,可以根据读写业务量来进行调整。参数innodb_change_buffer_max_size;

mysql> set global innodb_change_buffer_max_size=20;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值