zoukankan      html  css  js  c++  java
  • 1.mysql 的架构介绍

    Mysql简介

    https://baike.baidu.com/item/mySQL/471251?fr=aladdin

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。

    MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

    MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

    由于其社区版的性能卓越,搭配 PHPApache 可组成良好的开发环境。

    高级MySQL

    mysql内核、sql优化工程师、mysql服务器的优化、查询语句优化、主重复制、软硬件升级、容灾备份、sql编程 ​完整的mysql优化需要很深的功底,大公司甚至有专门的DBA

    MysqlLinux版本的安装--mysql5.5

    mysql5.5下载地址:https://dev.mysql.com/downloads/mysql/ 检查当前系统是否安装过mysql

    可以用 rpm -qa|grep mysql看当前的系统进程,如果有mysql服务的就会显示的。

    安装mysql服务端(注意提示) 安装mysql客户端 查看Mysql安装时创建的mysql用户和mysql组

    cat /etc/passwd | grep mysql
    cat /etc/group | grep mysql

    mysql服务的启+停:service mysql start

    mysql服务启动后开始连接 首次连接成功 注意这里,,因为mysql默认没有密码,所以这里我们没有输入密码就直接连上了 按照安装Service中的提示修改登录密码:/usr/bin/mysqladmin -u root password root 自启动mysql服务

    chkconfig --list | grep mysql 
    chkconfig mysql on
    ntsysv  查看自启动的服务

    修改配置文件位置

    5.5 版本  /usr/share/mysql/my-huge.cnf
    cp my-huge.cnf /etc/my.cnf
    5.6以后  /usr/share/mysql/my-default.cnf

    修改字符集和数据存储路径

    1.查看字符集
    show variables like 'character%';
    建议先对文件进行备份,不过因为文件本来就是从/usr/share/mysql中复制过来的,也可以不用备份,然后打开
    cp my.cnf my.cnf.bak  
    sudo vi my.cnf  
    在[mysqld]上面加入下面两句话
    [client]    
    default-character-set=utf8   
    在[mysqld]最下面加入下面几句话
    character_set_server=utf8
    character_set_client=utf8
    collation-server=utf8_general_ci
    如果一张表在修改字符集之前就创建,那么修改字符集之后对该表不起作用,只对后来创建的表起作用

    Mysql的安装位置 在linux下查看安装目录 ps -ef | grep mysql

    /var/lib/mysql                     mysql数据库文件的存放位置           
      /var/lib/mysqlatguigu.clouf.pif /usr/share/mysql 配置文件目录   mysql.serve命令以及配置文件 /usr/bin 相关命令目录
      mysqladmin mysqldump 等命令
    /etc/init.d/mysql 启停相关脚本

    Mysql配置文件

      1.主要配置文件

        二进制日志log-bin

          主重复制

        错误日志log-error 默认是关闭的,记录严重的警告和错误信息,每次启动和关闭的详细信息等.

         查询日志log 默认关闭,记录查询的sql语句,如果开启会减低mysql的整体性能,因为记录日志也是需要消耗系统

      2.资源的

        数据文件

           两系统

          windows D:ProgramFilesMySQLMySQLServer5.5data目录下可以挑选很多库

          linux 看看当前系统中的全部库后再进去 默认路径:/var/lib/mysql

        frm文件:存放表结构

        myd文件:存放表数据

        myi文件:存放表索引

                  也有版本的mysql:

            .ibd是MySQL数据文件、索引文件,无法直接读取。
            .frm是表结构文件,可以直接打开。

      3.如何配置

         windows:my.ini文件

        Linux:/etc/my.cnf文件

     Mysql逻辑架构介绍

    1.连接层:最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似tcp/ip的通信。主要完成一些类似于连接处理、授权认证以及相关的安全方案。在该层上引起了线程池的的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全连接。服务器也会为安全接入的每个客户端验证它锁具有的操作权限。

    2.服务层:第二层架构主要完成大多数的核心服务功能。如SQL接口,并完成缓存的查询。SQL的分析和优化以及部分内置函数的执行。所有跨存储引擎的功能也在这层实现。如过程、函数等、在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定查询表的顺序,是否利用索引等。最后生成相应的执行操作。如果是select语句。服务器会查询内部的缓存。如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提高系统的性能。

    3.引擎层:存储引擎层,存储引擎真正的负责mysq中数据的存储和提取。服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同。这样我们可以根据自己的实际需要进行选取。常用的有Innodb、MyIsam等

    4.存储层:数据存储层,主要将数据存储在运行于裸设备的文件系统上,并完成与存储引擎的交互。

    和其他数据库相比,mysql有点与众不同,她的架构可以在多种不同的场景中应用并发挥良好作用,主要体现在存储引擎的架构上。 插件式的存储引擎架构将查询处理和其

    他的系统任务以及数据的存储,提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎

    连接层 -服务层-引擎层-存储层

    1.Connectors 指的是不同语言中与SQL的交互

    2. Management Serveices & Utilities: 系统管理和控制工具

    3 .Connection Pool: 连接池 管理缓冲用户连接,线程处理等需要缓存的需求。 负责监听对 MySQL Server 的各种请求,接收连接请求,转发所有连接请求到线程管理模块。每一个连接上 MySQL Server 的客户端请求都会被分配 (或创建)一个连接线程为其单独服务。而连接线程的主要工作就是负责 MySQL Server 与客户端的通信, 接受客户端的命令请求,传递 Server 端的结果信息等。线程管理模块则负责管理维护这些连接线程。包括线程的创建,线程的 cache 等。

    4 SQL Interface: SQL接口。 接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface

    5 Parser: 解析器。 SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。 在 MySQL中我们习惯将所有 Client 端发送给Server 端的命令都称为 query ,在 MySQL Server 里面,连接线程接收到客户端的一个 Query 后, 会直接将该 query 传递给专门负责将各种 Query 进行分类然后转发给各个

    对应的处理模块。

    主要功能:

       a . 将SQL语句进行语义和语法的分析,分解成数据结构,然后按照不同的操作类型进行分类,然后做出针对性的转发到后续步骤,以后SQL语句的传递和处理就是基于这个结构的。

      b. 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的

    6 Optimizer: 查询优化器。 SQL语句在查询之前会使用查询优化器对查询进行优化。就是优化客户端请求的 query(sql语句) ,根据客户端请求的 query 语句,和数据库中的一些统计信息,在一系列算法的基础上进行分析,得出一个最优的策略,告诉后面的程序如何取得这个 query 语句的结果 他使用的是“选取-投影-联接”策略进行查询。 ​ 用一个

    例子就可以理解: select uid,name from user where gender = 1; ​ 这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过滤 ​ 这个select查询先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤 ​ 将这两个查询条件联接起来生成最终查询结果

    7 Cache和Buffer: 查询缓存。 他的主要功能是将客户端提交 给MySQL 的 Select 类 query 请求的返回结果集 cache 到内存中,与该 query 的一个 hash 值 做一个对应。该 Query所取数据的基表发生任何数据的变化之后, MySQL 会自动使该 query 的Cache 失效。在读写比例非常高的应用系统中, Query Cache 对性能的提高是非常显著的。当然它对内存

    的消耗也是非常大的。 如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等

    8 、存储引擎接口 存储引擎接口模块可以说是 MySQL 数据库中最有特色的一点了。目前各种数据库产品中,基本上只有 MySQL 可以实现其底层数据存储引擎的插件式管理。这个模块实际上只是 一个抽象类,但正是因为它成功地将各种数据处理高度抽象化,才成就了今天 MySQL 可插拔存储引擎的特色。 ​ 从图2还可以看出,MySQL区别于其他数据库的最重

    要的特点就是其插件式的表存储引擎。MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身都必需的,如SQL分析器和优化器等,而存储引擎是底层物理结构的实现,每个存储引擎开发者都可以按照自己的意愿来进行开发。

    注意:存储引擎是基于表的,而不是数据库。

    查询说明 Mysql存储引擎

    #查看命令
    show engines; 查看引擎
    show variables like '%storage_engine%';#查看默认与当前的存储引擎

    MyISAM和InnoDB

    对比项 MyISAM InnoDB
    主外键 不支持 支持
    事务 不支持 支持
    行表锁

    表锁,即使操作一条记录也会锁住整个表,不适合高并发的

    行锁,操作时候只锁住某一行,不对其他行有影响

    适合高并发的操作操作

    缓存 只缓存索引,不缓存真实数据 不仅缓存索引还要缓存真实数据,对内存要求.比较高,而且内存大小对性能有决定性的影响
    表空间
    关注点 性能 事务
    默认安装 安装 安装
  • 相关阅读:
    C++ class内的 ++ 重载,左++,右++,重载示例。
    C++ class外的 << 重载,输出流,重载示例。不应该定义类内的<<重载
    C++ class内的 < 和 > 重载,大于号,小于号,重载示例。
    C++ class外的==重载,判断相等,测试等于,重载示例。二元操作符
    C++ class内的==重载,判断相等,测试等于,重载示例。二元操作符
    C++ 回调函数 Callback 机制例程
    C++ trais技术 模板特化的应用
    C++ class 中的 const 成员函数
    linux 安装 Samba服务
    添加/删除FTP用户并设置权限
  • 原文地址:https://www.cnblogs.com/weixiaotao/p/10552320.html
Copyright © 2011-2022 走看看