Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的
Connectors指的是不同语言中与SQL的交互
Management Serveices & Utilities: 系统管理和控制工具
Connection Pool:连接池。管理缓冲用户连接,线程处理等需要缓存的需求
SQL Interface:SQL接口,接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调
用SQL Interface
Parser: 解析器。SQL命令传递到解析器的时候会被解析器验证和解析。
Optimizer:查询优化器。SQL语句在查询之前会使用查询优化器对查询进行优化。
Cache和Buffer: 查询缓存。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数
据.
Engine:存储引擎。存储引擎是MySql中具体的与文件打交道的子系统。
一条SQL语句执行流程:
连接层
(1)提供连接协议:TCP/IP 、SOCKET
(2)提供验证:用户、密码,IP,SOCKET
(3)提供专用连接线程:接收用户SQL,返回结果
通过以下语句可以查看到连接线程基本情况
mysql> show processlist;
SQL层
(1)接收上层传送的SQL语句
(2)语法验证模块:验证语句语法,是否满足SQL_MODE
(3)语义检查:判断SQL语句的类型
DDL :数据定义语言
DCL :数据控制语言
DML :数据操作语言
DQL: 数据查询语言
...
(4)权限检查:用户对库表有没有权限
(5)解析器:对语句执行前,进行预处理,生成解析树(执行计划),说白了就是生成多种执行方案.
(6)优化器:根据解析器得出的多种执行计划,进行判断,选择最优的执行计划
代价模型:资源(CPU IO MEM)的耗损评估性能好坏
(7)执行器:根据最优执行计划,执行SQL语句,产生执行结果
执行结果:在磁盘的xxxx位置上
(8)提供查询缓存(默认是没开启的),会使用redis tair替代查询缓存功能
(9)提供日志记录(日志管理章节):binlog,默认是没开启的。
存储引擎层(类似于Linux中的文件系统)
负责根据SQL层执行的结果,从磁盘上拿数据。
将16进制的磁盘数据,交由SQL结构化化成表,
连接层的专用线程返回给用户。
MySQL安装与部署
RPM包安装(在线安装,离线安装两种方式)-----测试开发环境常用
在线安装
添加一个mysql的yum仓库源
#yum install http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
安装mysql
# yum install mysql-community-server
离线安装
下载RPM安装包,上传至服务器
解压
创建一个文件夹(后期不用了可以直接删除文件夹,快捷方便)
# mkdir mysql
#tar xf mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar -C mysql
安装四个所需的包
#yum localinstall -y mysql-community-server-5.7.18-1.el7.x86_64.rpm mysql-community-client-5.7.18-1.el7.x86_64.rpm mysql-community-common-5.7.18-1.el7.x86_64.rpm mysql-community-libs-5.7.18-1.el7.x86_64.rpm
在线和离线安装完成后启动mysql
# systemctl start mysqld //当前启动
# systemctl enable mysqld //开机自启动
查询临时登录密码:
# awk '/temporary password/ {print $NF}' /var/log/mysqld.log
yPVr*drYb1uv
或# grep 'temporary password' /var/log/mysql.log 查询
登录数据库:
# mysql -uroot -p
Enter password:
#mysql -uroot -p ‘密码’ 可直接登录,会提醒不安全,但能用
登录后不论执行什么会提醒必须先修改密码才能继续操作
修改密码
mysql> alter user root@localhost identified by '123456';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
密码要符合密码复杂性要求,不然不能成功 如:RedHat@123
mysql> alter user root@localhost identified by 'RedHat@123';
Query OK, 0 rows affected (0.00 sec)
通用二进制方式-----生产环境常用
下载包 --glibc
[root@node4 ~]# ll mysql-5.7.14-linux-glibc2.5-x86_64.tar
-rw-r--r-- 1 root root 672716800 Jul 5 14:15 mysql-5.7.14-linux-glibc2.5-x86_64.tar
创建用户及组
# groupadd -r mysql
# useradd mysql -r -g mysql -c "MySQL Server" -s /bin/false
解压,软链接
# tar xf mysql-5.7.14-linux-glibc2.5-x86_64.tar -C /usr/local
# tar xf /usr/local/mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
创建软链接:为了方便以后升级。
# ln -sv /usr/local/mysql-5.7.14-linux-glibc2.5-x86_64 /usr/local/mysql
‘/usr/local/mysql’ -> ‘/usr/local/mysql-5.7.14-linux-glibc2.5-x86_64’
初始化
# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data
提供配置文件和服务启动脚本
# cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
修改配置文件:vim /etc/my.cnf
[mysqld]
...
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
服务脚本
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
添加系统服务,并设置开机自启动
# chkconfig --add mysqld
# chkconfig mysqld on
启动mysql
# /usr/local/mysql/bin/mysqld_safe --user=mysql &
配置环境变量:
# vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
加载使其生效。