day01--MySQL基础

MySQL

第一章:MySQL介绍
1.什么是数据:
	在业务中,或者一个网站上,那些敏感,又必须保证它的安全和一致性,要求又非常高的东西。
2.发展历程:
	2.1 RDBMS :关系型数据库关系系统(单机版)
			代表:Oracle  Mysql  PG   MssQL
	2.2 NoSQL : (not only SQL )是随着互联网的发展,数据的增多。无法满足需求
			代表:MongoDB Redis  ES
	2.3 NewSQL :分布式数据库时代
			代表:TIDB polarDB TDSQL
第二章:MySQL基础
1.mysql 分支
	Oracle  polarDB mariadb RDS Tx
	
2.mysql 企业版
	5.6(5646)
	5.7(5728 5730)+双  互网(5731)
	8.0(8018 8020)+双
	
3.版本选择
	选择GA(稳定的发布版;也就是纯数字的)
		3.1:6-12个月之间的发布的版本
		3.2:GA15-20版本以上的(更新数在这个区间的,bug太多也不能用)
第二章–第一节:MySQL 体系结构
1.体系结构
	1.1 C/S结构
			C端:
        		1.自带命令(mysql本地登录   mysqldump远程连接)	
        		2.开发工具(sqlyog  navicat) 需要通过tcp/ip的方式登录
        		3.API应用接口(像zh,wordpress)
        	 S端:
        	 	mysqld(服务总进程,当数据库启动之后,就会启动这个服务)
        	
2.实例:(mysql是一个单进程,多线程的模式)
	公司:boss + 经理 + 员工 + 办公区 
	实例:mysqld + master thread + 工作线程 + 预分配的内存
	
3.mysql程序结构
	3.1 server层
		3.1.1 连接层
				1)提供连接的协议(tcp/ip  socket套接字)
				2)验证身份(用户和密码)  ===#会去加载授权表
				3)连接线程:只做数据的接收和返回,并不做任何的处理
					在连接成功和身份验证之后,会产生一个专门接收的连接线程(con_t)
						show [full] processlist; ==>可以查看所有的连接状态
		
		###连接线程与SQL线程之间的对应关系?
        		use processlist(查看到连接线程的id号)  =去匹配==> SQL的id
			##查询方式:
					use performance_schema(切入这个库)
					select thread_id,processlist_id from threads; (这个表)
					
			
		3.1.2 SQL层:会去接收连接线程的信息,并产生SQL线程(SQL_T)
				1)语法,语义(种类),权限
				2)解析器:生成解析树(#其实就是获取到多种解决的方案)
				3)优化器:(#在解析树中查找到最适合的,通过抽样式)
						#基于cost(代价),选择代价最低的执行方法,生成执行计划
				# 优化器也是通过对信息的统计,来进行粗略的评估,因为这个不是实时的。	
                		innodb_index_stats (##通过use mysql    show tables; 查找)
                		innodb_table_status
				4)执行器:需要从磁盘哪些位置上,用什么方式拿数据
						# 它只能拿到结果,但是做不了操作,只能给到引擎层
						
	3.2 engine层(FS:文件系统):负责和磁盘进行交互
				1)会找到磁盘,提取到的数据会先放到内存缓存区中,然后引擎层去缓存区中调取数据,然后在返回给SQl层
				
4.物理存储结构
	宏观:
		创建一个库 ========>  对应/data/3306/data/下的一个目录文件
		创建一个表 ========>  对应的是文件中的一个以表名标识,以.ibd结果的文件。
								# 一般存放系统的都放在mysql.ibd(系统表)中
		
	微观:
		extent:(区、簇)   连续64个的page        :数据库层
				
		page:(页)  连续4个os的block		   :文件系统层
		block:(块)  连续8个扇区    		   :文件系统层
		sector:(扇区)  512字节                 :磁盘层
		
	格式化:其实就是将一个整体的空间先分割成一个个块状。用来存放数据,
		在磁盘的底层,一个块就是block ,也就是4kB大小
		但是数据库是直接对应磁盘的,所以在IO读取速度上,一直都是一个痛点。
			而为了高效,那么在申请空间的时候,直接就是申请了一个区,也就是1M
	## 所以数据库不管是在读取还是在写入数据到数据库的时候,去申请空间的最小单元就是一个区
第二章–第二节:MySQL基础管理
一:用户管理
	1.作用:登录数据库,和管理数据库里的对象
	
	2.定义用户;
		两个部分:用户名@'白名单'
			用户名:是一个随机的字符串(数字,字符,下划线等)
			@:固定写法
			白名单:允许登录的ip的地址列表(可以是一个或多个ip列表)
		常用:
			oldguo@'localhost'   允许本地登录
			oldguo@'10.0.0.%'    允许10.0.0.0/255.255.255.0
			oldguo@'10.0.0.0/255.255.254.0'  
			oldguo@'10.0.0.5%' 
			oldguo@'%'   % :直接表所有,##如果在连接互联网的时候,就需要固定到一个单一ip
			oldguo@'10.0.0.51'
			
	3.用户管理
		a. 查询用户 
		mysql> select user,host,plugin,authentication_string from mysql.user;

		b. 创建用户
			## 创建用户,无密码
		mysql> create user oldboy@'localhost';
			## 创建用户,有密码
		mysql> create user oldguo@'localhost' identified by '123';
			## 创建用户,有密码,还修改了密码插件
		mysql> create user oldxu@'localhost' identified with mysql_native_password by '123';
	## 注意: 
		1.  8.0之后,不再支持grant一次性创建用户授权了.必须先建用户后授权.
		2.  8.0之后,密码插件改为caching_sha2_password,早期版本是mysql_native_password


		c. 修改用户
			## 修改密码
		mysql> alter user oldguo@'localhost' identified by '123';
			## 修改插件
		mysql> alter user oldguo@'localhost' identified with mysql_native_password by '123';
			## 对无密码的用户,进行加锁
		mysql> alter user oldboy@'localhost' account lock;
			## 加锁的用户,进行解锁
		mysql>  alter user oldboy@'localhost' account unlock;


		d. 删除用户 ##(删除用户,会将授予的权限一并删除)
		mysql> drop user oldboy@'localhost';
第二章–第三节:MySQL权限管理
	1.作用: 限制用户能够对数据库的对象做哪些事情
		## 在数据库中,命令即为权限 ,你需要什么命令,就授权给这个什么权限
	2.定义:
		show privileges; 显示所有的权限
			# ALL这个命令。可以包含上述的所有权限(并且也只有管理员才会有all权限)
				# 但唯独有一个,叫grant option (是管理员用户用来给别人授权的)
				
	3.对于应用用户:
		一般具备的权限:
			select  update  dalete  insert
	
	4.聊聊授权表?
		授权:就是授权给一个用户,让它对什么样的库,有什么的权限。
		授权表:其实就是对什么库做了什么样的权限。
				如果是针对全局的授权。那么就去mysql.user查找
					如果是单库的授权,就去mysql.db里查找
				## 表都放在mysql这个库中。
						use mysql;   show tables;
			### 做对比:
				user表  ## *.* (表全局范围权限) =======>相当于在linux 授权了/
				db表    ## test.* (表单库级别)  =======> 相当于给一个目录授权
				tables_priv表 ## test.t1 (单表级别) =====> 相当于给一个文件进行授权
					可以加\G,让查看的内容进行数列的方式显示
		
	5. 查询权限
				## 对某一用户进行权限的查看
					show grants for 用户名@'白名单'
					
				## 查询db表里的所有信息
					select * from mysql.db\G
	
	6.授权管理
    			授权:
    					## 给管理员授权
    			grant all on *.* to oldguo@'localhost';
    					## 给普通用户授权一个业务
    	例如: 给oldxu@'localhost' 授权为oldxu业务的应用用户
		grant select,update,delete ,insert on oldxu.* to oldxu@'localhost' ;
		
    					# 剖析命令
    						grant : 是表示授予的权限命令
    						on    : 是表示授权的范围(是所有库,还是什么)
    						to    : 是表示针对的哪一个用户
    						
    			回收:revoke
    				## 在数据库中修改权限,不像linux中,直接覆盖就行。
    				   ## 在数据库中,是需要先回收权限,在更换权限。要不然是会权限叠加
    			select   ----> update
				mysql> revoke delete on oldxu.* from oldxu@'localhost';   
第二章–第四节:MySQL连接管理
# 查看用户的来源
	show processlist;

连接方式:
	1.自带客户端程序
		socket 本地套接字文件
			默认是/tmp/mysql.sock
		是在/etc/my.cnf里设置的。也可以设置到其他位置
		
		登录方式:
			mysql -uoldguo -p123 -S /tmp/mysql.sock
			前提: 是需要提前创建这个用户
		
	2. TCP/IP 网络远程连接的方式
		mysql> create user remote@'10.0.0.%' identified by '123';
		mysql> grant all on *.* to  remote@'10.0.0.%';
		前提:需要创建 remote@'10.0.0.%' 这个用户
		
		应用:
			mysql -uremote -p123 -h10.0.0.51 -P3306
		
	3.开发者工具
		一般是给开发使用的
第二章–第五节:MySQL登录管理
1.启动
	mysqld & 
	mysqld_safe & 
	    #上述两种启动方式,一般是做调试用,如果出现报错,导致服务起不来,就会在屏幕上显示出来,也便于排查问题。 但是他们只能做启动,没有关闭的命令
	    mysqld_safe 是一个可以定制化的脚本文件,可以自行更改,并且可以在后边直接添加参数,进行临时使用。也会显示出日志会存放在哪个目录下的文件中。
	    [root@db01 data]# mysqld_safe --port=3333 &
	    	

2.通用关闭
	service mysqld stop   
	/etc/init.d/mysqld stop     
	mysql --> shutdown 	 ## 需要先登录,在进行关闭
	mysqladmin shutdown 	    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值