day128:MySQL进阶:MySQL安装&用户/权限/连接/配置管理&MySQL的体系结构&SQL&MySQL索引和执行计划
目录
1.介绍和安装
1.1 数据库分类
RDBMS(关系型数据库):Relational Database Management System
代表产品:Oracle MySQL MSSQL PG
NoSQL(非关系型数据库):Not Only SQL
代表作品:MongoDB Redis ES
NewSQL(对各种新的可扩展/高性能数据库的简称)
代表作品:spanner PolarDB(X) TDSQL TiDB 高斯
1.2 MySQL分支
1.Oracle
2.Percona
3.MariaDB
4.云厂商
1.3 MySQL获取
www.mysql.com
1.4 MySQL安装
# 1.解压
[root@localhost opt]# tar xf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz # 2.软连接
ln -s /opt/mysql-8.0.20-linux-glibc2.12-x86_64 /usr/local/mysql # 3.修改环境变量
vim /etc/profile
添加下面的内容
export PATH=/usr/local/mysql/bin:$PATH source /etc/profile # 4.创建用户 目录 配置文件
[root@localhost mysql]# useradd mysql
[root@localhost mysql]# mkdir -p /data/3306/data
[root@localhost mysql]# chown -R mysql.mysql /data
[root@localhost mysql]# vim /etc/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock # 5.初始化数据
如果没有配置文件:
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data 如果有配置文件:
[root@localhost data]# mysqld --initialize-insecure # 6.准备启动脚本
[root@localhost ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@localhost ~]# /etc/init.d/mysqld stop
Shutting down MySQL... SUCCESS!
[root@localhost ~]# /etc/init.d/mysqld start
Starting MySQL.. SUCCESS!
[root@localhost ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL.. SUCCESS!
[root@localhost ~]# /etc/init.d/mysqld status
SUCCESS! MySQL running (12134)
2.基础管理
2.1 用户管理
2.1.1 作用
1.用来登录MySQL
2.用来管理MySQL对象[ps:什么是MySQL对象??]
2.1.2 定义
语法:用户名@'白名单'
什么是白名单?? 答:IP地址范围
常见形式:
root@'%'
root@'localhost'
root@'10.0.0.%'
root@'10.0.0.2'
2.1.3 管理用户
1.查询用户
-- 查询用户
mysql> select user,host ,authentication_string ,plugin from mysql.user;
+------------------+-----------+------------------------------------------------------------------------+-----------------------+
| user | host | authentication_string | plugin |
+------------------+-----------+------------------------------------------------------------------------+-----------------------+
| mysql.infoschema | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| mysql.session | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| mysql.sys | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| root | localhost | | caching_sha2_password |
+------------------+-----------+------------------------------------------------------------------------+-----------------------+
注意: plugin,加密插件,在8.0之后做了升级,caching_sha2_password,安全性增高了.
会导致很多老的客户端程序无法连接至MySQL.早期版本是mysql_native_password.
2.创建用户/修改用户/删除用户
-- 创建用户
mysql> create user root@'10.0.0.%' identified by '123';
mysql> create user user1@'10.0.0.%' identified with mysql_native_password by '123'; -- 修改用户
mysql> alter user root@'10.0.0.%' identified with mysql_native_password by '123';
mysql> alter user user1@'10.0.0.%' account lock;
mysql> alter user user1@'10.0.0.%' account unlock; -- 删除用户
mysql> drop user user1@'10.0.0.%';
注意: 8.0 之后 ,只能先建用户后授权.
2.2 权限管理
2.2.1 权限列表
mysql> show privileges;
最常见的权限:
1.ALL ? 不包含 grant option
2.select ,insert ,update ,delete
2.2.2 授权和回收权限
-- 授权
mysql> grant all on *.* to root@'10.0.0.%'; -- 查询权限
mysql> show grants for root@'10.0.0.%'; -- 回收权限
mysql> revoke drop on *.* from root@'10.0.0.%' ;
关于权限作用范围:
*.* : 所有库下所有表
luffy.*: 单库下的所有表
luffy.user: 单表
2.3 连接管理
2.3.1 socket文件连接
-- 前提: 需要提前创建localhost白名单的用户
[root@localhost ~]# mysql -uroot -p -S /tmp/mysql.sock
2.3.2 TCP/IP方式
-- 前提 需要将登陆客户端IP加入白名单
[root@localhost ~]# mysql -uroot -p123 -h 10.0.0.111 -P3306
2.4 配置管理
2.4.1 离线配置
-- 配置文件应用顺序
[root@localhost ~]# mysqld --help --verbose |grep my.cnf
/etc/my.cnf ---> /etc/mysql/my.cnf ---> /usr/local/mysql/etc/my.cnf --> ~/.my.cnf
-- 配置文件结构
[root@localhost ~]# cat /etc/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock [mysql]
socket=/tmp/mysql.sock
注意:修改配置文件,重启数据库.
2.4.2 在线配置
-- 通过专用配置命令进行修改.
mysql> set global innodb_buffer_pool_size=16777216;
-- 查看所有可以在线配置的参数
show variables
show variables like '%date%';
3.MySQL的体系结构
不多说,直接上图.

1.连接层
连接层作用有三:
1.提供连接协议: Socket文件,TCP/IP
2.验证用户身份/授权表.
3.连接层提供了一个与sql层交互的线程
2.SQL层
SQL层作用有六:
1.接收连接层传过来的sql语句
2.验证sql语句的语法
3.验证sql语句的语义(DDL,DQL,DML,DCL)
4.解析器:解析sql语句,生成执行计划
5.优化器:从执行计划中选择最优的一条
优化???? 优化(逻辑优化,物理优化(索引)
6.执行器:执行选出来的SQL计划
1.与存储引擎层建立交互的线程
2.将要执行的sql语句传到存储引擎层
3.Engine层
作用:负责和磁盘交互
4.SQL
4.1 什么是SQL?
关系型数据库通用的语言.结构化查询语言.[ps:什么是结构化查询语言?]
4.2 SQL_MODE
常用SQL_MODE参数:[ps:SQL_MODE详解]
mysql> select @@sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
重点: ONLY_FULL_GROUP_BY ,5.7版本新特性.
4.3 数据类型
特别注意:
char(10) 定长
varchar(10) 变长
其他详细的数据类型:[ps:MySQL中的数据类型]
4.4 字符集
utf8 最多存三字节字符
utf8mb4 最多存四字节字符 [emoji表情]
4.5 SQL种类
DDL : 数据定义语言
DML : 数据操作语言
什么是DDL(数据定义语言?),什么是DML(数据操作语言?):[ps:DDL和DML的定义]
4.6 DDL的应用规范
4.6.1 对库(Database)的操作
库:
create databasedrop database
alter database
规范:
a. 生产系统禁用drop 操作b. 库名不要使用系统预留字符,不要大写字母,不要数字开头.
c. 建库是显式设置字符集.
4.6.2 对表(Table)的操作
create table
规范:
表名不要使用系统预留字符,不要大写字母,不要数字开头.ob_user;不要超过18字符.
数据类型:
合适的 简短的 足够的
注意点:
每个表要有主键.
每个列尽可能非空,或者设置默认值
每个列要加注释.
存储引擎使用InnoDB 字符集 utf8mb4
alter table
主要用途:
添加列
删除列
加索引
删索引
该类型
关于alter table还需要知道的一个点:
8.0以前:Online DDL 需要业务低估期间做. 或者使用PT-OSC.
8.0之后:添加列可以直接做.
drop table 非必要不要使用.
4.7 关于DDL/DML和MySQL执行阶段的问题
prepare MDL X 阻塞所有DML写入 DDL
exec S 降级共享锁 不阻塞DML , 阻塞DDL
commit MDL X 阻塞所有DML写入 DDL
5.索引和执行计划
5.1 什么是索引?
相当一本书中的目录.优化查询(select update delete)
5.2 索引类型
BTREE *****
RTREE(空间数据索引)
HASH(哈希索引)
FTEXT(全文索引)
5.3 BTREE 结构认识
b-tree
b+tree(b*tree) -->加强版
5.4 MySQL中如何应用BTREE?
5.4.1 聚簇索引
1.什么是聚簇索引?
InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分;
2.聚簇索引的构造条件?
Primary Key / Unique+not null / RowID
3.聚簇索引的构造细节?
叶子节点(Leaf): 在录入数据时,会按照聚簇索引逻辑顺序,存储到物理上连续的多个数据页. 从而生成了叶子节点. 并且存储相邻叶子节点的双向指针.
枝节点(No-Leaf): 选取叶子节点的ID的范围+指针.
根节点(ROOT) : No-leaf节点的ID范围+指针4.聚簇索引的优化效果?
通过ID列作为查询条件时,会起到优化效果.

5.4.2 辅助索引
...
day128:MySQL进阶:MySQL安装&用户/权限/连接/配置管理&MySQL的体系结构&SQL&MySQL索引和执行计划的更多相关文章
- my SQL下载安装,环境配置,以及密码忘记的解决,以及navicat for mysql下载,安装,测试连接
一.下载 在百度上搜索"mysql-5.6.24-winx64下载" 二.安装 选择安装路径,我的路径“C:\Soft\mysql-5.6.24-winx64” 三.环境配置 计算 ...
- 练习:python 操作Mysql 实现登录验证 用户权限管理
python 操作Mysql 实现登录验证 用户权限管理
- MySQL for OPS 03:索引和执行计划
写在前面的话 啥是索引?以一本书为例,如果想要找到某一指定章节的某一小节,书薄还好,如果书厚,可能就会找的头皮发麻.于是便出现了目录,让用户更容易查找到自己所需要的东西.索引就类似一张表的目录.其存在 ...
- python/MySQL(索引、执行计划、BDA、分页)
---恢复内容开始--- python/MySQL(索引.执行计划.BDA.分页) MySQL索引: 所谓索引的就是具有(约束和加速查找的一种方式) 创建索引的缺点是对数据进行(修改.更新.删除) ...
- MySQL的EXPLAIN命令用于SQL语句的查询执行计划
MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提供任何调整建议,但它能够提供重要的信息 ...
- 恢复Mysql丢失的root用户权限
今天安装了某个程序时, 由于程序很傻X的 新建了一个 root@localhost 用户 并把 root权限全部改为了 no 这下 我也 傻X 了.服务器上所有程序都崩溃了. 此时即使用root用 ...
- MySQL三层结构、用户权限、索引设计原则
一.守护进程是什么? Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.它不需要用户输入就能运行而且提供某种服务,不是对 ...
- mysql 8创建远程访问用户以及连接mysql速度慢的解决方法
mysql 8创建远程访问用户 [root@demo /]# mysql -u root -p #登录服务器数据库 Enter password:123xxx >user mysql; & ...
- python 获取mysql数据库列表以及用户权限
一.需求分析 需要统计出当前数据库的所有数据库名,以及每个用户的授权信息. 获取所有数据库 在mysql里面,使用命令: show databases 就可以获取所有数据库了 获取所有用户 执行命令: ...
- mysql绿色版安装问题解决(ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061))
原来一直是使用MySQL安装版没有出现过问题,今天在安装绿色版MySQL时出现了点问题 在安装成windows服务成功后,用net start mysql 启动时提示启动成功,但当我连接mysql就报 ...
随机推荐
- ES5及ES6的新增特性
介绍 es表示ECMASCript ,他是从es3,es5,es6,es5是2009.12月发布的,es6是2015.6月发布的.vue2完全支持es5的(vue3完全支持es6的),react完全支 ...
- RKO队——冲刺随笔(5)
这个作业属于哪个课程 至诚软工实践F班 这个作业要求在哪里 第五次团队作业:项目冲刺 这个作业的目标 记录冲刺计划.要求包括当天会议照片.会议内容以及项目燃尽图(项目进度) 1.昨日进展 小程序大致完 ...
- SqlServer 不能收缩 ID 为 %s 的数据库中 ID 为 %s 的文件,因为它正由其他进程收缩或为空。
SQLServer数据库通常都不建议进行SHRINKFILE操作,因为SHRINKFILE不当会造成一定的性能问题. 但是当进行了某些操作(例如某个超大的日志类型表转成分区表切换了数据文件),数据库某 ...
- mongoBD增删改查
查询方法一: db.ResDevices.find({"RegInfo.DeviceID": "d064b09ed28b2e988e4dc83adfb4c1"} ...
- cvs 常见命令
一.cvs上传一个新的工程到server 假如上传目录test到xxxx_project下1. copy test到xxxx_project2. 删除test目录及子目录下的CVS目录3. 在xxxx ...
- maven插件实现项目一键“run maven、debug maven”等命令 => 插件名:“maven helper”
1.在IDEA中下载插件 2.使用 总结:通过 "maven helper" 插件即可通过命令实现对项目的一键管理
- ORACLE触发器:插入数据时,对其中的一个字段进行默认赋值
Create trigger t_datebefore insertbegin:new.sj = to_char(sysdate,'yyyy-MM-dd HH:mm:ss')end
- vue-devtools 打开 vscode 可能会报错
据说 99% 的人不知道 vue-devtools 还能直接打开对应组件文件?本文原理揭秘 mac 电脑在 VSCode command + shift + p,Windows 则是 ctrl + s ...
- 关于PB用JDBC连接MySQL,亲测有效
以前自学过一段时间的PB,数据窗口让人印象深刻,前段时间,在西瓜视频看到有人录制了PB的教学视频,让我想起以前自学的那段时光,遇到了问题,也不知道问谁,现在网络发达,可以在网上查找问题,但是有大多数博 ...
- Action: Consider the following: If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
错误原因 在pom中引入了mybatis-spring-boot-starter ,Spring boot默认会加载org.springframework.boot.autoconfigure.jdb ...