txt 2019-12-11
Server : mysqld
Client :
#TCP/IP方式(远程、本地) mysql -uroot -p123456 -h 10.0.0.51 -P3306 #socket方式(仅本地) mysql -uroot -p123456 -S /tmp/mysql.sock
实例=mysqld --- > master thread ---> 干活的线程 + 预分配的内存结构 公司=boss 经理 员工 办公室
实例=mysqld+master thread + N thread + 内存区域
(
连接层
(1)提供连接协议:TCP/IP 、SOCKET
(2)提供验证:user、password,IP,SOCKET
(3)提供专用连接线程:接收用户SQL,返回结果
通过以下语句可以查看到连接线程基本情况mysql> show processlist;
SQL层
(1)接收上层传送的SQL语句
(2)语法验证模块:验证语句语法,是否满足SQL_MODE
(3)语义检查:判断SQL语句的类型
(4)权限检查:用户对库表有没有权限
(5)解析器:对语句执行前,进行预处理,生成解析树(执行计划),说白了就是生成多种执行方案.
(6)优化器:根据解析器得出的多种执行计划,进行判断,选择最优的执行计划(7)执行器:根据最优执行计划,执行SQL语句,产生执行结果
存储引擎层(简单介绍)
负责根据SQL层执行的结果,从磁盘上拿数据。
将16进制的磁盘数据,交由SQL结构化化成表,
连接层的专用线程返回给用户。
库:物理存储,相当于linux中的目录
表:元数据(表名,表属性,表列)
MyISAM(一种引擎)的表: .MYI 索性相关信息 .MYD 存储数据行 .frm 列的信息 -rw-r----- 1 mysql mysql 10816 Apr 18 11:37 user.frm -rw-r----- 1 mysql mysql 396 Apr 18 12:20 user.MYD -rw-r----- 1 mysql mysql 4096 Apr 18 14:48 user.MYI InnoDB(默认的存储引擎)的表: .frm: 存储列相关信息 .ibd: 数据行+索引(IOT) -rw-r----- 1 mysql mysql 8636 Apr 18 11:37 time_zone.frm -rw-r----- 1 mysql mysql 98304 Apr 18 11:37 time_zone.ibd
段:一个非分区表就是一个段(segment)
区:大小为1M,默认是连续的64个page(extent)
页:MySQL最小的IO单元,默认为16kb(page)
用户的作用:登录mysql,管理MySQL的逻辑对象
用户的定义方式
用户的定义:用户名,白名单(主机列表) 'localhost' '10.0.0.1' '10.0.0.%' ## '10.0.0.5%' '10.0.0.0/255.255.254.0' 'oldguo.com' 'db01' '%'
#创建用户 create user '10.0.0.%'; #删除用户 drop user '10.0.0.%'; #查看用户 select user,host from mysql.user; #设置用户密码 alter user '10.0.0.%' identified by '123456'; #创建用户同时创建密码 create user '10.0.0.%' identified by '123456';
8.0版本以前,grant 可以创建用户并授权。8.0版本以后必须先创建用户在授权
权限的作用:开启用户管理对象的能力
grant all on wordpress.* to '10.0.0.%' identified by '123';
*.* 全库级别,一般为管理员 wordpress.* 单库级别,应用或开发 wordpress.t1 单表级别,很少使用
应用用户一般给
select,insert,update,delete
中小公司,开发人员leader
SELECT,INSERT, UPDATE, DELETE,CREATE,ALTER,CREATE VIEW,SHOW VIEW,CREATE ROUTINE, ALTER ROUTINE,EVENT, TRIGGER
```
/etc/init.d/mysqld stop
mysqld_safe --skip-grant-tables --skip-networking &
--skip-grant-tables //跳过授权表
--skip-networking //禁用TCP/IP连接方式
flush privileges;
alter user ‘localhost‘ identified by ‘123456‘;
quit
/etc/init.d/mysqld restart
mysql -uroot -p123456
本地 -- 使用socket
本地登录的用户,需要提前授权localhost相关用户
mysql -uroot -p123 -S /tmp/mysql.sock
远程 -- TPC/IP
mysql -uoldguo -p -h10.0.0.51 -P3306
mysql 自带命令
命令:mysql 参数 -u 登录用户 -p 登录密码 -h 连接的IP -P 端口号 -S socket文件 -e 非交互式登录 -V 查看版本信息 < 导入数据库