1.MySQL基础
MySQL是一个开放源代码的关系数据库管理系统。原开发者为瑞典的MySQL AB公司,最早是在2001年MySQL3.23进入到管理员的视野并在之后获得广泛的应用。 2008年MySQL公司被Sun公司收购并发布了首个收购之后的版本MySQL5.1,该版本引入分区、基于行复制以及plugin API。移除了原有的BerkeyDB引擎,同时,Oracle收购InnoDB Oy发布了InnoDB plugin,这后来发展成为著名的InnoDB引擎。2010年Oracle收购Sun公司,这也使得MySQL归入Oracle门下,之后Oracle发布了收购以后的首个版本5.5,该版本主要改善集中在性能、扩展性、复制、分区以及对windows的支持。目前版本已发展到5.7。
和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。
2.MySQL逻辑架构
1.最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
2.第二层架构主要完成大多少的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化及部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定查询表的顺序,是否利用索引等,最后生成相应的执行操作。如果是select语句,服务器还会查询内部的缓存。如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。
3.存储引擎层,存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。
4.数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。
aaarticlea/png;base64,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" alt="" />
Δ 每个连接的查询都在一个进程中的线程完成。
Δ 服务器负责缓存线程,所以服务层不需要为每个新建的连接创建或者销毁线程(可以使用线程池)。
> 认证流程
1、当客户端(应用)连接到MySQL服务器时,服务器需要对其进行认证。认证基于用户名、原始主机信息和密码。如果使用了安全套接字的方式连接,还可以使用X.509证书认证。
2、一旦客户端连接成功,服务器会继续验证该客户是否具有执行某个查询的权限(例如对某个库某张表执行查询语句)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWoAAAEsCAYAAADq2fmSAAAgAElEQVR4Ae2dC9xVU/rHVypRVApFKNW/QUiMVBK51uR+iXGZyjUmIxOayW0mFRMGuTYm4xISk0HGJSp3xRAhqpGSS7pJiG77//kus479nvecfc5+z3n3u88+v/X5vO/Zl7XWXuu7z37Os5/1rGfV8jzPM0oiIAIiIAKxJbBRbFumhomACIiACFgCEtT6IoiACIhAzAlIUMf8Bql5IiACIiBBre+ACIiACMScgAR1zG+QmicCIiACdfJFUKtWrVRW5yjijmn/J8eZcueR+oJoQwREoKgE8taonTAu6tVVmQiIgAiIQE4CteRHnZORMoiACIhAjRLIW6Pmtd692tdoi3XxWBHQ9yJWt0ONSSiBvAV1QvuvbomACIhA7AnI9BH7W6QGioAIlDsBadTl/g1Q/0VABGJPIG9BLVtk7O9ljTRQ34sawa6LlhmBvAV1mXFRd0VABEQgNgRko47NrVBDREAERCAzAWnUmbnoqAiIgAjEhkDeglq2yNjcs1g1RN+LWN0ONSahBPIW1Antv7olAiIgArEnkLegJtZH0uJ9/PDDD2b58uWhb9KaNWtyllmxYoV5+umnM+YbOXKkyaeOjIVjdjCJ34uYIVZzRMDkLaiTwArB7P8bNmyYGThwYIVjnP/xxx+zdvepp54yBx98cNbz7sTXX39tTj/9dLdrTjrpJDNv3jy77wT1rFmzzPnnn5/Kow0REAERyEQgdJjTUtWqv/32W9OwYUOzww47VOKw0047pY5t2LDBfP/992bp0qWpY4sWLTLr1q2z+61atTL/+c9/zCuvvGJatGiRykO9G2300+/e6tWrbVwUyjz77LOG+l9//XVDG/xp5cqV5u233/YfKrltbNSkUv1elBxwNbgsCeTtnlfqDyRCsnnz5lZYIojRcE844QTTq1ev1I2njwgcBKtfUCOc69WrZ+rWrZvK69/48MMPzZdffmm23HJLe/jVV181l1xySSpL/fr1zZw5cww/AhtvvLH5+OOPzY477mg1d+p++eWXU3lLbaPUvxelxlvtLU8CeQvqUsezfv1689JLL1ktuG/fvlZoNm7cONWtd999124vWLDAvPbaa6Z79+6pcwjTadOmGT4zJQQ0wtoJavI89thj5qijjjK333671a4HDBiQqaiOiYAIiEBOAmVjo65du7bBbox9uWPHjgbzxKGHHmruvPNO07p1a2sSQRNGa/YL6ZwEs2S4/vrr7Zk33njDNGrUyGrpaOqZ/hYuXJilFh0WAREQAWPKxkbNze7WrZuZOnWq+eyzz0yzZs3M0KFDzZAhQ6xwvuqqq6z5AvPIJptsUum70b59+8B43M4E4AquXbvWau3vvPOOufTSS63GzbkJEyaY8ePHm4kTJ7qsJf3p+i0bdUnfRjU+5gTyFtQx70fO5uFhgT26SZMmpnPnzvaPgbx27doZzmHauPrqq+2gX5s2bczkyZNNgwYNbL2rVq0yX3zxhR2MzHmh/2XArPLpp5+axYsXG+rjR4IfCI61bdvW1KlTx9qpEXDOGyTfupVPBESgvAjkLahLXWPabbfdrFaLO9yMGTPs3+jRoyvd7dmzZ9sBRyeksVlvuummoYQ0lW699dZW2O+6666pazz66KOmZ8+eth1o7tjMEeClnEr9e1HK7NX28iGQt6BOApLNNtvMzJ071/z1r381Xbt2rdSl7bbbzpor/C58CHXsymETg4e48eEtMmrUqLDFlV8EREAEUgTyHkzEFunskanSCd9g9uCVV15pDj/88FA9nT9/vrnxxhvNiBEjzOabb246deoUqnwpZS7H70Up3R+1NRkEykqj5pZhG0bbxbc5PeFr7f8xYuAPjTjs7EG8PPAuwaOESTb+hGsg6bzzzjOXXXaZtZH7z2tbBERABNIJlI0fdXrH89lnggoDgNtvv30+2QPzEFMEoc0PhUscQ6jjOqgkAiIgAtkISFBnI6PjIiACIhATArJRx+RGlGozZKMu1TundpcSgbwFdSl1Sm0VAREQgSQRkOkjSXdTfREBEUgkAWnUibyt6pQIiECSCOQtqGWLTNJtL15f9L0oHkvVJALZCOQtqLNVoOMiIAIiIALVS0A26urlq9pFQAREoGAC0qgLRqgKREAERKB6CeQtqGWLrN4bUaq163tRqndO7S4lAnkL6lLqlNoqAiIgAkkiIBt1ku6m+iICIpBIAqE06vTXXO1XDP1a7jwS+YSoUyIQAwKhBHUM2qsmxJAAP1BKIiAC1UdApo8qsHWCSctQVQGeioiACIQmII06NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCdSJ9nK6mgiIQK1atQShDAhstdVWZvLkyaZDhw4F91YadcEIVYEIiIAIVCawZMkSc/DBB5t33nmn8smQR2p5nueFLFP22Z1GJHRl/1WoEgB9f6qEraQKPfbYY+a3v/2t+eyzz0yjRo3Ms88+azp16lTlPkijrjI6FRQBERCBzAQ22mgj07FjR3PKKaeYlStXmkMPPdTMmDEjc+Y8jkpQ5wFJWURABEQgLAHenO65556iCOtAQc2F3J9rpPYrDgSVOw/3vdCnCIhAZQK1a9cuirAOFNSywVYGryMiIAIiEIZAMYR1oKCmMQhrv8DWfsWx13Llkf4mEeaLq7wiUG4EChXWgYJaD2O5fZ3UXxEQgeoiUIiwDhTU1dVg1Vv6BNLfJEq/R+qBCFQ/gaoK60BBrYex+m+criACIlBeBKoirAMFdXnhU2/DEJBZLAwt5RWBigTCCuvAWB88jCQ063JOn3zyiWnVqlVOBCtWrDDTp083PXv2rJR35MiR5qKLLjIbb7xxpXM6IAIikDwCs2fPNn/4wx8CO7bNNtuY//u//zNz5841vXr1MsuWLcuYvyw06pdfftkKyObNm5utt97abLfddubDDz80devWNRzjr1mzZvYvndJ9991np35+/fXX5ocffrB/Ls+GDRvcpv0kz+mnn546dtJJJ5l58+bZfQT1mjVrzKxZs8z555+fylOqGzKLleqdU7ujILDzzjubM88802yxxRaBf1tuuaXp16+fadq0qVm+fHnWpgVq1EnSpJlnj8BetGiR6dy5swXyi1/8wrz33nt2m+M9evSoAAohy3z9zTff3Oyxxx4VzrHDfP5jjjnGHl+9erWdHLRu3To7r3+nnXYyr7/+uvn2228rlGM66dtvv13hmHZEQASSRaBt27ZmyJAheXdq4sSJWbVpKikLjToXraVLl5r58+dbTdvlReD++te/Nnzuueee5qWXXjKYQPxC9ogjjnDZ7fFTTz3VtGvXzgwbNsz+mnLyyCOPNNy077//3oY7RMtOQpKNujTuIm9x+SbyRqmcpb+RZmonCtBtt92W6VSsjvF833rrrRXeuIvZwECNOkk26rfeesug5SJ409MNN9xgHnzwQXPzzTenTtWpU8ecccYZ5uSTTzbXXHONFbIDBw409957b4U8bqdr167m4osvNkcddZS5/fbbrXY9YMAAd1qfIhCKwFdffWVat26ds8xTTz1l9ttvv4z5OHf11VebF198MeN5/0GeC7672ExHjRrlP2W3eUUvZurfv7/ZfffdzYUXXhhY7XfffWeuuOIKc95559l89BXbr0u81e67775ut8qf1Ll+/fqs5ZEHyI9MadWqVaZ3795WmeM8b+HFToGCutgXq8n60IrTTR+ffvqpOf74422zOP+Pf/zDbL/99vYLhL1oxx13NKNHj7bmEUZp+eL7jf2vvPKK2W233UzDhg1tHddff739sr/xxhvmkEMOyXpjyUzYwx122KEmkRR07Sg1r4IaWqKF0TY3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" alt="" />
1、MySQL会解释查询,并创建内部数据结构(解析树),然后对其进行各种优化,包括重写查询、决定表的读取顺序,以及选择合适的索引等。
3.并发控制和锁的概念
当数据库中有多个操作需要修改同一数据时,不可避免的会产生数据的脏读。这时就需要数据库具有良好的并发控制能力,这一切在MySQL中都是由服务器和存储引擎来实现的。
解决并发问题最有效的方案是引入了锁的机制,锁在功能上分为共享锁(shared lock)和排它锁(exclusive lock)即通常说的读锁和写锁。当一个select语句在执行时可以施加读锁,这样就可以允许其它的select操作进行,因为在这个过程中数据信息是不会被改变的这样就能够提高数据库的运行效率。当需要对数据更新时,就需要施加写锁了,不在允许其它的操作进行,以免产生数据的脏读和幻读。锁同样有粒度大小,有表级锁(table lock)和行级锁(row lock),分别在数据操作的过程中完成行的锁定和表的锁定。这些根据不同的存储引擎所具有的特性也是不一样的。
MySQL大多数事务型的存储引擎都不是简单的行级锁,基于性能的考虑,他们一般都同时实现了多版本并发控制(MVCC)。这一方案也被Oracle等主流的关系数据库采用。它是通过保存数据中某个时间点的快照来实现的,这样就保证了每个事务看到的数据都是一致的。详细的实现原理可以参考《高性能MySQL》第三版。
4.事务
1.简单的说事务就是一组原子性的SQL语句。可以将这组语句理解成一个工作单元,要么全部执行要么都不执行。在MySQL中可以使用如下命令操作事务:
start transaction;
select ...
update ...
insert ...
commit;
注意:默认MySQL中自动提交是开启的:
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec)
2.事务具有ACID的特性:
原子性(atomicity):事务中的所有操作要么全部提交成功,要么全部失败回滚。
一致性(consistency):数据库总是从一个一致性状态转换到另一个一致性状态。
隔离性(isolation):一个事务所做的修改在提交之前对其它事务是不可见的。
持久性(durability):一旦事务提交,其所做的修改便会永久保存在数据库中。
3.事务的隔离级别:在SQL标准中定义了四种隔离级别:
READ UNCOMMITTED(读未提交):事务中的修改即使未提交也是对其它事务可见
READ COMMITTED(读提交):事务提交后所做的修改才会被另一个事务看见,可能产生一个事务中两次查询的结果不同。
REPEATABLE READ(可重读):只有当前事务提交才能看见另一个事务的修改结果。解决了一个事务中两次查询的结果不同的问题。
SERIALIZABLE(串行化):只有一个事务提交之后才会执行另一个事务。
4.MySQL中可以利用如下语句查询并临时修改隔离级别:
5.死锁:两个或多个事务在同一资源上相互占用并请求锁定对方占用的资源,从而导致恶性循环的现象。MySQL的部分存储引擎能够检测到死锁的循环依赖并产生相应的错误。InnoDB引擎解决死锁的方案是将持有最少排它锁的事务进行回滚。
5.MySQL存储引擎及应用方案
1.MySQL采用插件式的存储引擎架构,可以根据不同的需求为不同的表设置不同的存储引擎。可以通过如下命令显示数据库中表的状态信息,以vtu_info表为例,显示如下:
mysql> show table status like 'vtu_info'\G
*************************** 1. row ***************************
Name: vtu_info
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 32
Avg_row_length: 512
Data_length: 16384
Max_data_length: 0
Index_length: 16384
Data_free: 0
Auto_increment: 13843
Create_time: 2015-09-16 18:34:23
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec) mysql>
Name:显示的是表名
Engine:显示存储引擎,该表存储引擎为MyISAM
Row_format:显示行格式,对于MyISAM有Dynamic、Fixed和Compressed三种。非别表示表中有可变的数据类型,表中数据类型为固定的,以及表是压缩表的环境。
Rows:显示表中行数
Avg_row_length:平均行长度(字节)
Data_length:数据长度(字节)
Max_data_length:最大存储数据长度(字节)
Data_free:已分配但未使用的空间,包括删除数据空余出来的空间
Auto_increment:下一个插入行自动增长字段的值
Create_time:表的创建时间
Update_time:表数据的最后修改时间
Collation:表的默认字符集及排序规则
Checksum:如果启用,表示整个表的实时校验和
Create_options:创建表示的一些其它选项
Comment:额外的一些注释信息,根据存储引擎的不同表示的内容也不胫相同。
2.存储引擎介绍:
InnoDB引擎:
1.将数据存储在表空间中,表空间由一系列的数据文件组成,由InnoDB管理;
2.支持每个表的数据和索引存放在单独文件中(innodb_file_per_table);
3.支持事务,采用MVCC来控制并发,并实现标准的4个事务隔离级别,支持外键;
4.索引基于聚簇索引建立,对于主键查询有较高性能;
5.数据文件的平台无关性,支持数据在不同的架构平台移植;
6.能够通过一些工具支持真正的热备。如XtraBackup等;
7.内部进行自身优化如采取可预测性预读,能够自动在内存中创建hash索引等。
MyISAM引擎:
1.MySQL5.1中默认,不支持事务和行级锁;
2.提供大量特性如全文索引、空间函数、压缩、延迟更新等;
3.数据库故障后,安全恢复性差;
4.对于只读数据可以忍受故障恢复,MyISAM依然非常适用;
5.日志服务器的场景也比较适用,只需插入和数据读取操作;
6.不支持单表一个文件,会将所有的数据和索引内容分别存在两个文件中;
7.MyISAM对整张表加锁而不是对行,所以不适用写操作比较多的场景;
8.支持索引缓存不支持数据缓存。
Archive引擎:
1.只支持insert和select操作;
2.缓存所有的写数据并进行压缩存储,支持行级锁但不支持事务;
3.适合高速插入和数据压缩,减少IO操作,适用于日志记录和归档服务器。
Blackhole引擎:
1.没有实现任何存储机制,会将插入的数据进行丢弃,但会存储二进制日志;
2.会在一些特殊需要的复制架构的环境中使用。
CSV引擎:
1.可以打开CSV文件存储的数据,可以将存储的数据导出,并利用excel打开;
2.可以作为一种数据交换的机制,同样经常使用。
Memory引擎:
1.将数据在内存中缓存,不消耗IO;
2.存储数据速度较快但不会被保留,一般作为临时表的存储被使用。
Federated引擎:
能够访问远程服务器上的数据的存储引擎。能够建立一个连接连到远程服务器。
Mrg_MyISAM引擎:
将多个MYISAM表合并为一个。本身并不存储数据,数据存在MyISAM表中间。
NDB集群引擎:
MySQL Cluster专用。