MySQL高级知识- MySQL的架构介绍

[TOC]

1、MySQL 简介

概述
  • MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。
  • MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
  • Mysql是开源的,所以你不需要支付额外的费用。
  • Mysql支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  • MySQL使用标准的SQL数据语言形式。
  • Mysql可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
  • Mysql对PHP有很好的支持,PHP是目前最流行的Web开发语言。
  • MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
  • Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。
高级MySQL涉及到知识
  • mysql内核
  • sql优化攻城狮
  • mysql服务器的优化
  • 各种参数常量设定
  • 查询语句优化
  • 主从复制
  • 软硬件升级
  • 容灾备份
  • sql编程
  • 完整的mysql优化需要很深的功底,大公司甚至有专门的DBA写上述

2、MySQL Linux版的安装

  • 此次安装的是 MySQL 5.5, 安装环境 CentOS 6.5
  • 版本下载地址 官网下载地址
  • 检查当前系统是否安装过MySQL
    • 查询命令: rpm -qa|grep -i mysql
    • 删除命令: rpm -e --nodeps RPM包全名
  • 安装mysql服务端(注意提示)
  • 安装mysql客户端
  • 查看MySQL安装时创建的mysql用户和mysql组
    • # cat /etc/passwd | grep mysql
    • # cat /etc/group | grep mysql
  • mysql服务的启+停
    • 查看MySQL启停状态: # ps -ef | grep mysql
    • 启停操作:
      • # /etc/init.d/mysql start
      • # /etc/init.d/mysql stop
      • 或者
      • #service mysql start
      • #service mysql stop
    • 设置MySQL 自启服务
      • #chkconfig mysql on 设置自动启动
      • # chkconfig --list | grep mysql 检查是否设置了自动启动
    • 修改配置文件位置
      • 拷贝当前5.5版本: cp /usr/share/mysql/my-huge.cnf /etc/my.cnf
      • 5.6版本 cp /usr/share/mysql/my-default.cnf /etc/my.cnf
    • 修改字符集和数据存储路径
      • 查看字符集

        • show variables like ‘character%‘;
        • show variables like ‘%char%‘;
        • 默认的是客户端和服务器都用了latin1,所以会乱码。
      • 修改字符集,修改之前copy 的配置文件。(详细后续代码)
      • MySQL的安装位置
        • 在linux下查看安装目录 ps -ef|grep mysql
路径 解释 备注
/var/lib/mysql/ mysql数据库文件的存放路径 /var/lib/mysql/atguigu.cloud.pid
/usr/share/mysql 配置文件目录 mysql.server命令及配置文件
/usr/bin 相关命令目录 mysqladmin mysqldump等命令
/etc/init.d/mysql 启停相关脚本  
[client]
#password = your_password
port = 3306
socket = /var/lib/mysql/mysql.sock

# 这一行需要设置字符集
default-character-set=utf8

# The MySQL server
[mysqld]
port = 3306

# 还有这三行
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci

socket = /var/lib/mysql/mysql.sock
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
# Try number of CPU‘s*2 for thread_concurrency
thread_concurrency = 8

[mysql]
no-auto-rehash
# 还有这一行
default-character-set=utf8

3、Mysql配置文件

主要配置文件
  • 二进制日志log-bin

    • 主从复制
  • 错误日志log-error
    • 默认是关闭的,记录严重的警告和错误信息,每次启动和关闭的详细信息等。
  • 查询日志log
    • 默认关闭,记录查询的sql语句,如果开启会减低mysql的整体性能,因为记录日志也是需要消耗系统资源的
  • 数据文件
    • 两系统

      • windows

        • D:\devSoft\MySQLServer5.5\data目录下可以挑选很多库
      • Linux:
        • 默认路径 #cd /var/lib/mysql/
        • 看看当前系统中的全部库后再进去 #ls -1F | grep ^d
    • frm文件: 存放表结构
    • myd文件: 存放表数据
    • myi文件: 存放表索引
  • 如何配置
    • Windows: my.ini文件
    • Linux: /etc/my.cnf文件

4、Mysql逻辑架构介绍

总体概览
  • 和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。

    • 1、连接层

      • 最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
    • 2、服务层
      • 第二层架构主要完成大多少的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化及部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定查询表的顺序,是否利用索引等,最后生成相应的执行操作。如果是select语句,服务器还会查询内部的缓存。如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。
    • 3、引擎层
      • 存储引擎层,存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。后面介绍MyISAM和InnoDB
    • 4、存储层
      • 数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。
查询说明
  • 首先,mysql的查询流程大致是:

    • mysql客户端通过协议与mysql服务器建连接,发送查询语句,先检查查询缓存,如果命中,直接返回结果,否则进行语句解析
    • 有一系列预处理,比如检查语句是否写正确了,然后是查询优化(比如是否使用索引扫描,如果是一个不可能的条件,则提前终止),生成查询计划,然后查询引擎启动,开始执行查询,从底层存储引擎调用API获取数据,最后返回给客户端。怎么存数据、怎么取数据,都与存储引擎有关。
    • 然后,mysql默认使用的BTREE索引,并且一个大方向是,无论怎么折腾sql,至少在目前来说,mysql最多只用到表中的一个索引。

5、Mysql存储引擎

  • 查看命令

    • 查看当前的MySQL 提供什么存储引擎

      • mysql> show engines;
    • 看你的 MySQL 当前默认的存储引擎:
      • show variables like ‘%storage_engine%‘;
  • MyISAMInnoDB
  • 阿里巴巴、淘宝用哪个
    • Percona 为 MySQL 数据库服务器进行了改进,在功能和性能上较 MySQL 有着很显著的提升。该版本提升了在高负载情况下的 InnoDB 的性能、为 DBA 提供一些非常有用的性能诊断工具;另外有更多的参数和命令来控制服务器行为。
    • 该公司新建了一款存储引擎叫xtradb完全可以替代innodb,并且在性能和并发上做得更好,
    • 阿里巴巴大部分mysql数据库其实使用的percona的原型加以修改。
时间: 2024-12-20 01:10:05

MySQL高级知识- MySQL的架构介绍的相关文章

MySQL高级知识(四)——Explain

前言:explain(执行计划),使用explain关键字可以模拟优化器执行sql查询语句,从而知道MySQL是如何处理sql语句.explain主要用于分析查询语句或表结构的性能瓶颈. 注:本系列随笔如无特殊说明都MySQL版本都为5.7.22. 1.explain的作用 通过explain+sql语句可以知道如下内容: ①表的读取顺序.(对应id) ②数据读取操作的操作类型.(对应select_type) ③哪些索引可以使用.(对应possible_keys) ④哪些索引被实际使用.(对应k

MySQL高级知识(五)——索引分析

前言:前面已经学习了explain(执行计划)的相关知识,这里利用explain对索引进行优化分析. 0.准备 首先创建三张表:tb_emp(职工表).tb_dept(部门表)和tb_desc(描述表) 1)tb_emp表. DROP TABLE IF EXISTS `tb_emp`; CREATE TABLE `tb_emp` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(20) NOT NULL,PRIMARY KEY

MySQL 基础知识(基本架构、存储引擎差异)

前言: // MySQL 并发.异步IO.进程劫持 最近在看高性能 MySQL,记录写学习笔记: 高性能 MySQL 学习笔记(一) 架构与历史 笔记核心内容:MySQL 服务器基础架构.各种存储引擎之间的主要区别,以及这些区别的重要性: 一.MySQL 逻辑架构 如图: 第一层架构图: 也就是最上层的服务并不是 MySQL 独有的,大多数基于网络的客户端/服务器的工具或者服务器都有类似的架构,比如链接处理,授权认证,安全等等 : // 每个客户端连接都会在服务器进程中拥有一个线程这连接查询只会

MySQL高级知识 <一> 配置文件以及架构介绍

linux下mysql的一些目录 db是一个文件夹:/var/lib/mysql 字符集文件:/usr/share/mysql 命令目录:/usr/bin 启停脚本:/etc/init.d/mysql 1.MySQL配置文件 配置文件:/etc/my.conf 日志文件,注意:要使用日志需要在my.cnf下设置下列类型和自定义路径,我用的5.7默认是关闭的log-bin:二进制日志 记录主从复制相关操作.log:查询日志 记录查询的sql语句.log-error:记录严重的警告和错误信息, 每次

mysql高级教程(一)-----逻辑架构、查询流程、索引

mysql逻辑架构 和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用.主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离.这种架构可以根据业务的需求和实际需要选择合适的存储引擎. 1.连接层 最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信.主要完成一些类似于连接处理.授权认证.及相关的安全方案.在该层上引入了线程池的概念,为通过认证安全接入的客户

MySQL高级知识-查询与索引优化分析

性能下降SQL慢.执行时间长.等待时间长 查询语句写的烂索引失效单值索引复合索引关联查询太多join(设计缺陷或不得已的需求,除非你能干的过你的产品经理)服务器调优及各个参数设置(缓冲.线程数等)常见通用的Join查询 SQL执行顺序 手写 手写SQL顺序 机读(MySQL读取顺序) 机读顺序 总结-SQL解析顺序 SQL解析 七种JOIN图解 实验: 练习 1.A.B两表共有 select * from tbl_emp a inner join tbl_dept b on a.deptId =

MySQL高级知识(三)——索引

前言:索引在sql调优部分占据着重要的位置,了解并深入索引对我们来说也是非常重要的.本篇主要介绍MySQL中索引的相关知识点. 1.索引是什么 MySQL官方对索引的定义:索引(Index)是帮助MySQL高效获取数据的数据结构.因此索引的本质就是数据结构.索引的目的在于提高查询效率,可类比字典.书籍的目录等这种形式. 可简单理解为“排好序的快速查找数据结构”.在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构上实现高级查找算法,这

MySQL 高级知识(索引、优化)

MySQL体系架构 连接池组件.管理服务和工具组件.SQL接口组件.查询分析器组件.优化器组件.缓冲组件.插件式存储引擎.物理文件:1.连接层:主要完成一些类似于连接处理,授权认证及相关的方案:2.服务层:主要完成大多数核心服务功能:3.引擎层:负责MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信:注:储存引擎式基于表的,而不是数据库的: MySQL存储引擎InnoDB 和 MyISAM区别:1.InnoDB支持主外键.事务:2.InnoDB是行锁,操作时候只锁一行数据,适合高并

MySQL高级知识(八)——ORDER BY优化

前言:在使用order by时,经常出现Using filesort,因此对于此类sql语句需尽力优化,使其尽量使用Using index. 0.准备 #1.创建test表. drop table if exists test; create table test( id int primary key auto_increment, c1 varchar(10), c2 varchar(10), c3 varchar(10), c4 varchar(10), c5 varchar(10) )