一、数据库的概述;
二、数据库的分类;
三、Mysql的概述:
四、Mysql存储原理:
五、案例:centos7搭建Mysql5.7;
六、Sql语句操作之增删改查;
七、Sql语句操作之授权;
八、Mysql基本优化操作;
九、Mysql存储引擎的应用;
十、Mysql配置文件详解:
一、数据库的概述;
概述:数据库(Database)是按照数据结构组织、存储和管理数据的仓库,它产生于距今六十多年前,数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统,在各个方面得到了广泛的应用。在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件。数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。
二、数据库的分类;
关系型数据库:数据拥有固定的存储结构,通过库--表--行--列的方式存储,存储时会有表的结构化关系,过程如下:解析sql语句--连接层--磁盘存取--结构化成表,;
优势:1.容易理解,二维表的结构非常贴近现实世界,二维表格,容易理解;
2.使用方便,通用的sql语句使得操作关系型数据库非常方便;
3.易于维护,数据库的ACID属性,大大降低了数据冗余和数据不一致的概率;
瓶颈:1.海量数据的读写效率,对于网站的并发量高,往往达到每秒上万次的请求,对于传统关系型数据库来说,硬盘I/O是一个很大的挑战。
2.高扩展性和可用性,在基于web的结构中,数据库是最难以横向拓展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库没有办法像webServer那样简单的通过添加更多的硬件和服务节点来拓展性能和负载能力。
关系型数据库到非关系型数据库的演变:关系型数据库的最大优点就是事务的一致性,这个特性,使得关系型数据库中可以适用于一切要求一致性比较高的系统中。比如:银行系统。但是在大部分网页应用中,对这种一致性的要求不是那么的严格,允许有一定的时间间隔,所以关系型数据库这个特点不是那么的重要了。相反,关系型数据库为了维护一致性所付出的巨大代价就是读写性能比较差。而像微博、facebook这类应用,对于并发读写能力要求极高,关系型数据库已经无法应付。所以必须用一种新的数据结构存储来替代关系型数据库。所以非关系型数据库应用而生。
非关系型数据库:NoSQL主要指那些非关系型的、分布式的,主要代表MongoDB,Redis、CouchDB。NoSQL提出了另一种理念,以键值来存储,且结构不稳定,每一个元组都可以有不一样的字段,这种就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,为了获取用户的不同信息,不需要像关系型数据库中,需要进行多表查询。仅仅需要根据key来取出对应的value值即可,所以避免了关系型数据库复杂的查询关系,可以大大增加查询的效率;
三、Mysql的概述:
概述:MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下公司。是一个真正的多用户、多线程SQL数据库服务器。SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言。MySQL是以一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。SQL是一种标准化的语言,它使得存储、更新和存取信息更容易;
四、Mysql存储原理:
Mysql整体架构:
1.连接池:最上层负责和客户端进行连接,比如jdbc,odbj这样的数据库连接的API,在这一层有连接池的概念,类似于线程池,连接池可以同时处理很多个数据库请求。同时这一层有SSL的安全概念,可以确保连接是安全的;
2.SQL接口:当SQL语句进入MySQL后,会先到SQL接口中,这一层是封装层,将传过来的SQL语句拆散,将底层的结果封装成SQL的数据格式;
3.解析器:这一层负责将SQL语句进行拆分,验证,如果语句有问题那么就返回错误,如果没问题就继续向下执行;
4.优化器:对SQL查询的结果优化处理,产生多种执行计划,最终数据库会选择最优化的方案去执行,尽快返会结果。比如selecta,bfromcwhered。在这里会先查询c表中符合d的数据并将他们的ab项进行投影,返回结果,并不会直接把整张表查出来;
5.缓存:对要查询的SQL语句进行hash后缓存,如果下一次是相同的查询语句,则在SQL接口之后直接返回结果;
6.存储引擎:MySQL有很多种存储引擎,每一种存储引擎有不同的特性,他们负责组织文件的存放形式,位置,访问文件的方法等等。比较常用的有innoDB,MyISAM,MAMORY等;
7.文件系统:真正存放物理文件的单位;
存储引擎:
1.innoDB:支持事务,具有事务提交、回滚、崩溃恢复等机制,它的设计是为处理巨大数据量时的最大性能设置的,它的CPU效率是任何磁盘的关系数据库引擎所不能匹敌的,InnoDB存储引擎完全与Mysql服务器整合,为在内存中缓存数据和索引而维持它自己的缓冲池,InnoDB表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上也无影响;InnoDB不创建目录,使用InnoDB时,MySQL将在MySQL数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件;
优点:支持事务,事务隔离级别,事务采用MVCC做多版本控制;
支持外键,具有安全的约束性;
主键是唯一的聚集索引,和数据存放在一起,效率高;
可以有非聚集索引,非聚集索引单独存放,可以通过其查到聚集索引;
对于死锁情况,innoDB会将持有最少排它锁的事务回滚;
支持分区、表空间、类似于Oracle;
缺点:占用磁盘较多,占用内存较多(缓存);
读效率慢于MyISAM;
不存储总行数;
生产环境场景:
业务需要事务的支持;
行级锁定对高并发有很好的适应能力;
业务数据更新较为频繁的场景,如微博,论坛等;
业务数据一致性要求较高,比如银行业务;
硬件设备内存较大,利用InnoDB较好的缓存能力来提高内存利用率;
2.MyISAM:是mysql5.5版本之前的默认的存储引擎,它的前身是ISAM,MyISAM管理非事务表,提供告诉存储和检索,以及全文搜索能力,从而受到web开发者的喜爱;MyISAM引擎创建数据库,将产生3个文件。文件的名字以表名字开始,扩展名之处文件类型:frm文件存储表定义、数据文件的扩展名为.MYD(MYData)、索引文件的扩展名时.MYI(MYIndex);
优点:查询访问较快,因为读的时候不加锁;
支持多种存储方式:静态表,动态表,压缩表等;
存储总行数;
通过key_buffer_size设置缓存索引,调高访问的性能,减少磁盘I/O的压力;
缺点:写入效率慢,因为写的时候会给整张表加锁;
没有事务的概念;
数据恢复起来比较困难;
数据写入过程中阻塞用户对数据的读取;
数据读取过程中阻塞用户对数据的写入;
生产环境场景:
公司业务不需要事务的支持;
一般单方面的读取数据的需求较多,或者单方面写入数据的需求较多,不适合双方面;
服务器硬件资源相对比较差;
总结:
?如果要提供提交、回滚、崩溃恢复能力的事物安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择;
?如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率;
?如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果;
?如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。Archive非常适合存储归档数据,如记录日志信息可以使用Archive;
使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能,在数据库中可以使用命令showengines查看存储引擎;
五、案例:centos7搭建Mysql5.7;
案例环境:
系统类型
IP地址
主机名
所需软件
硬件
Centos7.bit
...
my.linuxfan.cn
mysql-5.7.12.tar.gz
boost_1_59_0.tar.gz
内存:4G
CPU核心:2
案例步骤:
?下载安装Mysql软件程序;
?优化调整Mysql程序;
?初始化Mysql数据库服务;
?测试连接访问数据库;
?下载安装Mysql软件程序;
[root
my~]#wget