尚硅谷MySQL高级学习笔记 -- 1.MySQL 的架构介绍

1、MySQL 简介

什么是 MySQL?

  1. MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。
  2. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
  3. Mysql是开源的,所以你不需要支付额外的费用。
  4. Mysl支持大型的数据库,可以处理拥有上千万条记录的大型数据库。
  5. MySQL使用标准的SQL数据语言形式。
  6. Mysql可以允许于多个系统上,并且支持多种语言,这些编程语言包括C、C++、Python、Java、Ped、PHP、Eifel、Ruby和TCL等。
  7. Mysql对PHP有很好的支持,PHP是目前最流行的Web开发语言。
  8. MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
  9. Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。

MySQL 高手是怎样练成的?

  1. mysql内核
  2. sql优化工程师
  3. mysql服务器的优化
  4. 查询语句优化
  5. 主从复制
  6. 软硬件升级
  7. 容灾备份
  8. sql编程

2、Linux 安装 MySQL

2.1、安装 MySQL

CentOS 6 通过 yum 安装 mysql 5.6

网上参考资料

  1. https://www.cnblogs.com/micfox/articles/10989905.html

  2. https://blog.csdn.net/MissDreamY/article/details/104938194


检查当前系统是否安装过 mysql

  • 检查系统是否安装其他版本的 MySQL 数据库
yum list installed | grep mysql
mysql-libs.x86_64      5.1.73-5.el6_6   @anaconda-CentOS-201508042137.x86_64/6.7
  • 有的话干掉老版本数据库
yum -y remove mysql-libs.x86_64

安装及配置

  • 拉取 rpm 包
wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
  • 通过 rpm 安装 mysql
rpm -ivh mysql-community-release-el6-5.noarch.rpm
  • 列举可用的 mysql 版本
yum repolist all | grep mysql
  • 安装 mysql-community-server 版本(好像默认自带 mysql-community-client)
yum install mysql-community-server -y

mysql 服务的启动与停止

  • mysql 服务的启动
service mysqld start
  • mysql 服务的停止
service mysqld stop
  • 查看 mysql 服务的状态
service mysql status

备注:正在启动 mysqld: [失败] 问题

  • 打下面这一套组合拳
rm -fr /var/lib/mysql/*
rm /var/lock/subsys/mysqld
killall mysqld
  • 然后启动 mysql 的服务
service mysqld start

2.2、配置 MySQL

查看安装时创建的 mysql 用户和 mysql 组

  • 查看 mysql 用户
cat /etc/passwd|grep mysql
  • 查看 mysql 用户组
cat /etc/group|grep mysql

设置远程 root

  • 启动 mysql 服务
service mysqld start
  • 设置 root 用户密码:这里面会有比较多的选项,按照提示操作即可
mysql_secure_installation
  • 登录至 mysql root 账号
mysql -uroot -p 

设置 mysql 开机启动

  • 设置 mysql 为开机自启动
chkconfig mysqld on
  • 查看是否设置成功:2、3、4都是on代表开机自动启动
chkconfig --list | grep mysqld

image-20200803172114456

  • 如果想要关闭 mysql 的开机自启动,输入如下命令,找到 mysqld ,单击空格取消 mysql 的开机自启动,Tab 键选中确定,敲击 Enter 键确定即可
ntsysv

image-20200809212113024

修改 mysql 配置文件位置

  • 进入 /usr/share/mysql/ 目录,找到 my-default.cnf 配置文件
cd /usr/share/mysql/

image-20200803200032116

  • 将其拷贝至 /etc 目录下,重命名为 my.cnf ,覆盖原有的配置文件
cp /usr/share/mysql/my-default.cnf /etc/my.cnf

image-20200803200905667

修改 mysql 字符集

查看 mysql 编码字符集

  • 如果在建库建表的时候, 没有明确指定字符集, 则采用默认客户端和服务器端的字符集都用了 latin1 ,其中是不包含中文字符的。
  • 如何查看默认的编码字符集:
show variables like '%char%';
# 或者
show variables like '%character%';

image-20200803200546415


修改配置文件

  • 打开 /etc/my.cnf 配置文件,修改字符编码
vim /etc/my.cnf
  • 修改或添加如下内容
[client]
default-character-set=utf8

[mysqld]
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci

[mysql]
default-character-set=utf8

image-20200803202236567


测试配置文件是否生效

  • 建表测试:中文无乱码
create database db01;
create table user(id int not null, name varchar(20));
insert into user values(1,'张三1');
select * from user;

image-20200803202041567

  • 查看 mysql 全局变量
show variables like '%char%';

image-20200803202450726

mysql 的安装位置

  • 执行命令
ps -ef|grep mysql

image-20200803173609488

  • 目录含义列举如下
路径解释
/var/lib/mysql/mysql 数据库文件的存放路径
/usr/share/mysql配置文件目录
/usr/bin相关命令目录
/etc/init.d/mysql服务启停相关

3、MySQL 用户组管理

3.1、用户管理相关命令

创建用户

  • 创建名称为 zhang3 的用户, 密码设为 123123;
create user zhang3 identified by '123123';

查看用和权限的相关信息

  • 查看用和权限的相关信息的 SQL 指令
select host, user, password, select_priv, insert_priv,drop_priv from mysql.user;
  1. host :表示连接类型
    • % 表示所有远程通过 TCP 方式的连接
    • IP 地址 如 (192.168.1.2,127.0.0.1) 通过制定 ip 地址进行的 TCP 方式的连接
    • 机器名 通过制定 i 网络中的机器名进行的 TCP 方式的连接
    • ::1 IPv6 的本地 ip 地址 等同于 IPv4 的 127.0.0.1
    • localhost 本地方式通过命令行方式的连接 , 比如 mysql -u xxx -p 123xxx 方式的连接。
  2. user:表示用户名
    • 同一用户通过不同方式链接的权限是不一样的。
  3. password:密码
    • 所有密码串通过 password(明文字符串) 生成的密文字符串。 加密算法为 MYSQLSHA1 , 不可逆 。
    • mysql 5.7 的密码保存到 authentication_string 字段中不再使用 password 字段。
  4. select_priv , insert_priv 等
    • 为该用户所拥有的权限。
mysql> select host, user, password, select_priv, insert_priv,drop_priv from mysql.user;
+-----------+------+-------------------------------------------+-------------+-------------+-----------+
| host      | user | password                                  | select_priv | insert_priv | drop_priv |
+-----------+------+-------------------------------------------+-------------+-------------+-----------+
| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | Y           | Y           | Y         |
| heygo     | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | Y           | Y           | Y         |
| 127.0.0.1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | Y           | Y           | Y         |
| ::1       | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | Y           | Y           | Y         |
+-----------+------+-------------------------------------------+-------------+-------------+-----------+
4 rows in set (0.04 sec)

修改当前用户的密码

set password =password('123456');

修改其他用户的密码

  • 修改李四用户的密码
update mysql.user set password=password('123456') where user='li4';
  • 注意:所有通过 user 表的修改, 必须 用 flush privileges; 命令才能生 效

修改用户名

  • 将王五的用户名修改为李四
update mysql.user set user='li4' where user='wang5';
  • 注意:所有通过 user 表的修改, 必须 用 flush privileges; 命令才能生 效

删除用户

  • 删除李四用户
drop user li4
  • 注意:不要通过 delete from user u where user='li4' 进行删除, 系 统会有残留信息保留。

3.2、MySQL 的权限管理

授予权限

  • 该权限如果发现没有该用户, 则会直接新建一个用户。
grant 权限 1,权限 2,…权限 n on 数据库名称.表名称 to 用户名@用户地址 identified by '连接口令'
  • 示例:给 li4 用户用本地命令行方式下, 授予 atguigudb 这个库下的所有 表的插删改查的权限。
grant select,insert,delete,drop on atguigudb.* to li4@localhost ;

  • 授予通过网络方式登录的的 joe 用户,对所有库所有表的全部权 限, 密码设为 123
grant all privileges on *.* to joe@'%' identified by '123';

收回权限

  • 查看当前用户权限:
show grants;
  • 收回权限命令
revoke [权限 1,权限 2,…权限 n] on 库名.表名 from 用户名@用户地址;
  • 收回全库全表的所有权限
REVOKE ALL PRIVILEGES ON mysql.* FROM joe@localhost;
  • 收回 mysql 库下的所有表的插删改查 权限
REVOKE select,insert,update,delete ON mysql.* FROM joe@localhost;
  • 注意:权限收回后, 必须用户重新登录后, 才能生效。

查看权限

  1. 查看当前用户权限:show grants;
  2. 查看所有用户权限:select * from user ;

4、MySQL 配置文件

二进制日志文件 log-bin

二进制日志文件 log-bin :用于主从复制

错误日志 log-error

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

查询日志 log

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

数据文件

  1. 数据库文件:默认路径:/var/lib/mysql
  2. frm文件:存放表结构
  3. myd文件:存放表数据
  4. myi文件:存放表索引

如何配置

  1. Windows 系统下:my.ini文件
  2. Linux 系统下:etc/my.cnf

5、MySQL 逻辑架构介绍

mysql 的分层思想

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

image-20200803205411622

mysql 四层架构

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

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

    Management Serveices & Utilities系统管理和控制工具
    SQL InterfaceSQL 接口。 接受用户的 SQL 命令, 并且返回用户需要查询的结果。 比如 select from 就是调用 SQL Interface
    Parser解析器。 SQL 命令传递到解析器的时候会被解析器验证和解析
    Optimizer查询优化器。 SQL 语句在查询之前会使用查询优化器对查询进行优化, 比如有 where 条件时, 优化器来决定先投影还是先过滤。
    Cache 和 Buffer查询缓存。 如果查询缓存有命中的查询结果, 查询语句就可以直接去查询缓存中取 数据。 这个缓存机制是由一系列小缓存组成的。 比如表缓存, 记录缓存, key 缓存, 权限缓存等
  3. 引擎层:存储引擎层,存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过APl与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。后面介绍MyISAM和InnoDB

  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 进行分类然后转发给各个对应的处理模块。
    • 解析器的主要功能:
      • 将SQL语句进行语义和语法的分析,分解成数据结构,然后按照不同的操作类型进行分类,然后做出针对性的转发到后续步骤,以后SQL语句的传递和处理就是基于这个结构的。
      • 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的
  6. Optimizer:查询优化器
    • SQL语句在查询之前会使用查询优化器对查询进行优化。就是优化客户端发送过来的 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 可插拔存储引擎的特色。
    • 从上图还可以看出,MySQL区别于其他数据库的最重要的特点就是其插件式的表存储引擎。MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身都必需的,如SQL分析器和优化器等,而存储引擎是底层物理结构的实现,每个存储引擎开发者都可以按照自己的意愿来进行开发。
    • 注意:存储引擎是基于表的,而不是数据库。

SQL 大致的查询流程

mysql 的查询流程大致是:

  1. mysql 客户端通过协议与 mysql 服务器建连接, 发送查询语句, 先检查查询缓存, 如果命中, 直接返回结果,否则进行语句解析,也就是说, 在解析查询之前, 服务器会先访问查询缓存(query cache)——它存储 SELECT 语句以及相应的查询结果集。 如果某个查询结果已经位于缓存中, 服务器就不会再对查询进行解析、 优化、 以及执行。 它仅仅将缓存中的结果返回给用户即可, 这将大大提高系统的性能。
  2. 语法解析器和预处理: 首先 mysql 通过关键字将 SQL 语句进行解析, 并生成一颗对应的“解析树”。 mysql 解析器将使用 mysql 语法规则验证和解析查询; 预处理器则根据一些 mysql 规则进一步检查解析数是否合法。
  3. 查询优化器当解析树被认为是合法的了, 并且由优化器将其转化成执行计划。 一条查询可以有很多种执行方式,最后都返回相同的结果。 优化器的作用就是找到这其中最好的执行计划。
  4. 然后, mysql 默认使用的 BTREE 索引, 并且一个大致方向是:无论怎么折腾 sql, 至少在目前来说, mysql 最多只用到表中的一个索引。

6、MySQL 存储引擎

查看 mysql 存储引擎

  • 查看 mysql 支持的存储引擎
show engines;

image-20200803211155030

  • 查看 mysql 默认的存储引擎
show variables like '%storage_engine%';

image-20200803211257403

MyISAM 引擎和 InnoDb 引擎的对比

image-20200803211313682

阿里巴巴用的是啥数据库?

  1. Percona为MySQL数据库服务器进行了改进,在功能和性能上较MySQL有着很显著的提升。该版本提升了在高负载情况下的InnoDB的性能、为DBA提供一些非常有用的性能诊断工具;另外有更多的参数和命令来控制服务器行为。
  2. 该公司新建了一款存储引擎叫xtradb完全可以替代innodb,并且在性能和并发上做得更好,阿里巴巴大部分mysql数据库其实使用的percona的原型加以修改。

image-20200803211429418

尚硅谷MySQL高级思维导图下载链接

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: mysql-connector-java-8.0.19.jar是MySQL官方提供的用于Java语言连接和操作MySQL数据库的驱动程序。它是Java应用程序与MySQL数据库进行通信的桥梁。 这个驱动程序提供了许多功能和方法,使得我们可以在Java应用程序中方便地连接和操作MySQL数据库。它支持与MySQL服务器的连接、数据库的创建与删除、表的创建与删除、数据的插入与查询等常见数据库操作。 使用mysql-connector-java-8.0.19.jar,你可以在Java应用程序中实现与MySQL数据库的连接。你需要通过提供数据库的地址、用户名、密码等连接信息来建立连接。一旦连接成功,你就可以执行SQL语句(如SELECT、INSERT、UPDATE等)来对数据库进行操作。 此外,mysql-connector-java-8.0.19.jar还提供了一些高级功能,如批量插入数据、事务处理、连接池管理等。它的性能也经过了优化,可以高效地处理大量的数据库操作请求。 当你在开发Java应用程序时需要连接和操作MySQL数据库时,可以将mysql-connector-java-8.0.19.jar添加到你的项目中,并在代码中引入相应的类和方法。这样你就可以方便地使用Java语言与MySQL数据库进行交互了。 总之,mysql-connector-java-8.0.19.jar是一个非常重要的Java驱动程序,它为我们提供了连接和操作MySQL数据库的功能,使得我们可以在Java应用程序中轻松地进行数据库操作。 ### 回答2: mysql-connector-java-8.0.19.jar是MySQL数据库的Java驱动程序。它是用Java编写的,用于与MySQL数据库进行交互。这个jar文件允许Java程序通过使用MySQL提供的各种功能来连接、查询和管理数据库。 mysql-connector-java-8.0.19.jar提供了一些重要的特性和功能。首先,它支持与MySQL数据库的连接和断开连接。它提供了连接池,可以管理和重用数据库连接,以提高性能并减少连接时间。它还支持通过SSL进行安全连接,以确保数据传输的安全性。 其次,这个jar文件允许Java程序执行SQL查询和更新数据库。它提供了一组API,用于执行SQL语句,如SELECT、INSERT、UPDATE和DELETE。通过这些API,Java程序可以方便地对数据库进行操作,获取和修改数据。 此外,mysql-connector-java-8.0.19.jar还支持事务处理,确保数据库操作的一致性和完整性。它提供了事务管理API,用于开始、提交和回滚事务。这对于处理复杂的数据库操作和确保数据的一致性非常重要。 最后,mysql-connector-java-8.0.19.jar还提供了对数据库元数据的访问。它允许Java程序获取有关数据库、表和列的信息,如表结构、索引、主键和外键等。这对于动态生成SQL查询和执行数据库架构的操作非常有用。 总而言之,mysql-connector-java-8.0.19.jar是一个重要的Java库,用于连接和操作MySQL数据库。它提供了一系列功能和API,方便了Java程序对MySQL数据库的访问和管理。无论是开发Web应用程序还是企业级应用程序,这个jar文件都是不可或缺的。 ### 回答3: mysql-connector-java-8.0.19.jar是MySQL数据库的Java官方驱动程序。它是 MySQL Connector/J 的一个版本,用于在Java应用程序中连接和操作MySQL数据库。 MySQL是一个开源的关系型数据库管理系统。为了在Java应用程序中使用MySQL数据库,需要使用适当的驱动程序来建立连接。mysql-connector-java-8.0.19.jar是一个jar文件,它包含了所有必要的类和方法,用于与MySQL数据库进行通信。 使用mysql-connector-java-8.0.19.jar,开发人员可以通过在Java程序中加载该jar文件来建立与MySQL数据库的连接。连接成功后,可以执行各种操作,如插入、更新、删除和查询数据库中的数据。 该驱动程序还提供了一些附加功能,例如连接池和事务支持。连接池可以提高应用程序的性能,通过缓存数据库连接,使其在需要时可重复使用。事务支持允许开发人员在操作数据库时确保数据的一致性和完整性。 为了使用mysql-connector-java-8.0.19.jar,需要将其添加到Java项目的类路径中。然后,可以在Java代码中导入所需的类,并使用它们来连接和操作MySQL数据库。 总之,mysql-connector-java-8.0.19.jar是一个用于在Java应用程序中连接和操作MySQL数据库的官方驱动程序。它提供了许多有用的功能和方法,使得与MySQL数据库的通信变得简单和方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

exodus3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值