设为首页 收藏本站
查看: 801|回复: 0

[经验分享] 9、MySQL逻辑架构介绍

[复制链接]

尚未签到

发表于 2018-10-2 13:54:06 | 显示全部楼层 |阅读模式
  一、概述:
  MySQL按照逻辑划分主要分为三层:服务层,核心层和存储引擎层其各层在整个架构中所扮演的角色如下:
  服务层:为客户端做连接处理,授权和安全认证相关工作
  核心层:查询解析,分析,优化SQL语句,缓存结果等等
  存储引擎层:存储和提取数据及事物的处理
  角色分担
  客户端:MySQL客户端指的是不同程序语言编写的前端应用程序,及所调用的API接口(Java语言:JDBC是一种用于执行SQL语句的javaAPI),php语言的PDO扩展为PHP访问数据库定义了一个轻量级的异质性的接口,它提供了一个数据访问抽象层,这样无论使用什么数据库都可以通过一致的函数执行查询和提取数据。
  服务层:MySQL属于单进程多线层结构。
  核心层:完成数据的查询,缓存及优化的操作。
  存储引擎层:MyISAMM,InnoDB,CLuster和Memory
  存储引擎层是最贴近文件系统的功能层。
  MySQL总体架构:
  二、MySQL常用的存储引擎
  查看当前MySQL所支持的存储引擎
  mysql> show engines;
  2.1 MyISAM存储引擎:
  特点:支持全文索引,
  能够对整张表进行加锁,不支持行锁,及锁粒度较大。
  缺点:不支持事物,及没有rollback功能。
  应用:日志系统,读表的操作,没有事物第并发的网站
  2.2 InnoDB存储引擎:
  特点:MySQL5.7之前的版本不支持全文索引,5.7及以后的支持
  支持行级锁,锁粒度小
  支持ACID(事物完整性和异质性)
  独有的聚集索引主键设计方式,可大发提升并发读写性能
  支持外键,支持崩溃数据的自我修复
  注意问题
  a) 所有InnoDB数据表都创建一个和业务无关的自增数字型作为主键,对保证性能很有帮助;
  b) 杜绝使用text/blob,确实需要使用的,尽可能拆分出去成一个独立的表;
  c) 时间建议使用 TIMESTAMP 类型存储;
  d) IPV4 地址建议用 INT UNSIGNED 类型存储;
  e) 性别等非是即非的逻辑,建议采用 TINYINT 存储,而不是 CHAR(1);bool
  f) 存储较长文本内容时,建议采用JSON/BSON格式存储;
  2.3memory存储引擎:
  (1)memory存储引擎相比前面的一些存储引擎,有点不一样,其使用存储在内存中的数据来创建表,而且所有的数据也都存储在内存中。
  (2)每个基于memory存储引擎的表实际对应一个磁盘文件,该文件的文件名和表名是相同的,类型为.frm。该文件只存储表的结构,而其数据文件,都是存储在内存中,这样有利于对数据的快速处理,提高整个表的处理能力。
  (3)memory存储引擎默认使用哈希(HASH)索引,其速度比使用B-+Tree型要快,如果读者希望使用B树型,则在创建的时候可以引用。
  (4)memory存储引擎文件数据都存储在内存中,如果mysqld进程发生异常,重启或关闭机器这些数据都会消失。所以memory存储引擎中的表的生命周期很短,一般只使用一次。
  主:表级锁:分为读锁和写锁,其中读锁是共享的,可以供多人使用,而写锁是排他的,当当前表被写锁锁定的时候,其他无法读取和修改,如果是读锁则是可以其他程序可以查看。
  注意:行级锁可能会造成“死锁”现象
  原因分析:
  1、MySQL行级锁并不是直接锁记录,而是锁索引,索引分为主键和非主键索引两种,如果一条SQL语句操作了主键索引,那么MySQL就会锁定这个主键索引,如果SQL语句操作的事非主键索引,那么MySQL会先锁定这个非主键索引,再去锁定主键索引。
  2、在update和delete操作时MySQL不仅会锁定所有where条件扫描过的索引,还会锁定相邻索引(被修改的字段)。
  3、MySQL锁定状态
  show processlist命令可以查看当前那些线程正在运行,如果用户拥有SUPER权限可以查看所用线程,如果线程的状态有update或init某个表,则说明此事进程的status为updateing data或在sending data。
  对于“too many connections”的错误信息,并且想要了解正在发生的情况则show processlist则非常有用。
  相关查看命令:
  show processlist;默认显示100条信息
  show full processlist;显示全部线程信息
  show open tables;查看哪些表是打开的。
  查看服务器状态
  mysql> show status like '%lock%';
  查看innodb运行时的信息
  mysql> show engine innodb status\G
  查看服务器配置参数:
  mysql> show variables like '%timeout%';
  四、指定MySQL存储引擎
  4.1 修改配置文件是设置默认存储引擎
  vim /etc/my.cnf
  default-storage-engine=innodb
  保存之后重启存储引擎
  创建表时指定存储引擎
  create table ( ) ennine=Innodb default


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-607626-1-1.html 上篇帖子: DBA:MySQL内置数据库说明和管理 下篇帖子: AWS 新建RDS实例 for MySQL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表