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

MySQL高级应用——基础篇

  • MySQL架构原理
    • 1. MySQL架构模式的演变
      • 单实例架构模式
      • 主从架构模式
      • 分库分表架构模式
      • 云数据库架构模式
    • 2. MySQL常用基础指令
    • 3. InnoDB和MyISAM主要区别
      • 事务和外键
      • 锁机制
      • 索引结构
      • 并发处理能力
      • 存储文件
      • 两种引擎的适用场景

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

Feature MyISAM Memory InnoDB Archive NDB
B-tree indexes Yes Yes Yes No
Backup/point-in-time recovery (note 1) Yes Yes Yes Yes Yes
Cluster database support No No No No Yes
Clustered indexes No No Yes No No
Compressed data Yes (note 2) No Yes Yes No
Data caches No N/A Yes No Yes
Encrypted data Yes (note 3) Yes (note 3) Yes (note 4) Yes (note 3) Yes (note 3)
Foreign key support No No Yes No Yes (note 5)
Full-text search indexes Yes No Yes (note 6) No No
Geospatial data type support Yes No Yes Yes Yes
Geospatial indexing support Yes No Yes (note 7) No No
Hash indexes No Yes No (note 8) No Yes
Index caches Yes N/A Yes No Yes
Locking granularity Table Table Row Row Row
MVCC No No Yes No No
Replication support (note 1) Yes Limited (note 9) Yes Yes Yes
Storage limits 256TB RAM 64TB None 384EB
T-tree indexes No No No No Yes
Transactions No No Yes No Yes
Update statistics for data dictionary Yes Yes Yes Yes Yes

InnoDB引擎存储结构
https://dev.mysql.com/doc/refman/8.0/en/innodb-architecture.html
MySQL8.0高级应用——基础理论篇_第1张图片
显示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;

你可能感兴趣的:(MySQL,mysql,数据库)