2019-04-04-day02-MySQL-第二章-体系结构及基础管理

0.有感而发

0.1 关于学习的几个阶段
0.2 听懂
0.3 面试能说明白
0.4 工作岗位上能干明白
0.5 变通和自主学习

1. 体系结构

1.1 C/S(客户端/服务端)模型介绍

image.png

TCP/IP方式(远程、本地):

mysql -uroot -poldboy123 -h 10.0.0.51 -P3306

Socket方式(仅本地):

mysql -uroot -poldboy123 -S /tmp/mysql.sock
image.png

1.2 实例介绍

实例=mysqld后台守护进程+Master Thread +干活的Thread+预分配的内存

公司=老板+经理+员工+办公室

1.3 mysqld程序运行原理

1.3.1 mysqld程序结构

image.png

1.3.2 一条SQL语句的执行过程

1.3.2.1 连接层

(1)提供连接协议:TCP/IP 、SOCKET
(2)提供验证:用户、密码,IP,SOCKET
(3)提供专用连接线程:接收用户SQL,返回结果

通过以下语句可以查看到连接线程基本情况

mysql> show processlist;

1.3.2.2 SQL层 (重点)**

(1)接收上层传送的SQL语句
(2)语法验证模块:验证语句语法
(3)语义检查:判断SQL语句的类型
      DDL :数据定义语言
      DCL :数据控制语言
      DML :数据操作语言
      DQL:数据查询语言
(4)权限检查:用户对库表有没有权限
(5)解析器:进行SQL的预处理,产生执行计划
(6)优化器:根据解析器得出的多种执行计划,进行判断,选择最优的执行计划        代价模型:资源(CPU IO MEM)的耗损评估性能好坏(7)执行器:根据最优执行计划,执行SQL语句,产生执行结果执行结果:在磁盘的xxxx位置上
(8)提供查询缓存(默认是没开启的),会使用redis tair替代查询缓存功能
(9)提供日志记录(日志管理章节):binlog,默认是没开启的。1.3.2.3 存储引擎层(类似于Linux中的文件系统)负责根据SQL层执行的结果,从磁盘上拿数据。将16进制的磁盘数据,交由SQL架构化成表,由连接层的专用线程返回给用户。

1.4 逻辑结构

1.4.1 库:

库名,库权限,库数据类型等

1.4.2 表(二维表)

列:字段
行:记录

MySQL为了将来数据的准确、规范、有意义,对于传统认知的二维表添加了更多的功能

表属性:权限,存储引擎,字符集
列属性:数据类型、约束、其他属性(默认值,自增长,注释)

1.5 物理存储结构引入

1.5.1 库的物理存储结构用文件系统的目录来存储

1.5.2 表的物理存储结构

MyISAM(一种引擎)的表
user.frm:列的相关信息
user.MYD:数据行
user.MYI:索引信息
==========================
InnoDB(默认的存储引擎)的表: 
time_zone.frm:存储列相关信息
 time_zone.ibd:数据行+索引

1.5.3 表的段、区、页(16k)(了解)

页:最小的存储单元
区:1个或多个连续的页
段:一个表就是一个段,包含一个或多个区

2. 基础管理

2.1 用户、权限管理

2.1.1 用户

作用:登录,管理数据库对象
定义:用户@'白名单'
白名单: 允许哪些IP能够登录数据库
支持的方式

oldboy@'%'                     :所有地址
oldboy@'10.0.0.%'           :10.0.0.0/24 网段的地址
oldboy@'localhost'           :本地主机
oldboy@'10.0.0.5.%'       10.0.0.50~10.0.0.59
oldboy@'10.0.0.0/255.255.254.0'  :子网掩码不是24位的管理

操作:
增:

mysql> create user oldboy@'10.0.0.%' identified by '123';

查:

mysql> select user ,host ,authentication_string from mysql.user

改:

mysql> alter user oldboy@'10.0.0.%' identified by '456';

删:

mysql> drop user oldboy@'10.0.0.%';

2.1.2 权限介绍

SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE

ALL 以上所有权限,一般是普通管理员拥有的
with grant option:超级管理员才具备的,给别的用户授权的功能
应用用户:SELECT,INSERT, UPDATE, DELETE
权限管理操作:grant 权限 on 对象 to 用户 identified by '密码';
需求例子:windows机器的navicat登录到linux中的MySQL,管理员用户。

grant   all    on      对象     to     用户      identified by      '密码';

对象:

*.*                                 --->chmod 755 -R /                  ----》针对管理员oldboy.*                         chmod 755 -R /oldboy            ----->应用用户oldboy.t1                         chmod 755 -R  /oldboy/t1
mysql> grant   all    on      *.*   to     root@'10.0.0.%'      identified by      '123';

需求:创建一个应用用户app用户,能从windows上登录mysql,并能操作app库。

mysql> grant select ,update,insert,delete on app.* to app@'10.0.0.%' identified by '123';

开发人员用户授权流程:

1.权限
2.对谁操作
3.你从哪来
4.密码要求提示:

"8.0在grant命令添加新特性建用户和授权分开了grant 不再支持自动创建用户了,不支持改密码授权之前,必须要提前创建用户"
**查看授权:

mysql> show grants for  app@'10.0.0.%';

回收权限:

revoke  delete on app.*  from app@'10.0.0.%';

2.2 连接管理

2.2.1 自带客户端命令mysql

常用参数:

-u                   用户
-p                   密码
-h                   IP
-P                  端口
-S                  socket文件
-e                   免交互执行命令
<                    导入SQL脚本

登录方法一——远程登录:

[root@db01 ~]# mysql -uroot -p -h 10.0.0.51 -P3306
Enter password:

登录方法一——远程登录:

mysql> select @@socket;
+-----------------+| @@socket  
 |+-----------------+| /tmp/mysql.sock |

[root@db01 ~]# mysql -uroot -p -S /tmp/mysql.sock
Enter password:
[root@db01 ~]# mysql -uroot -p -e "select user,host from mysql.user;
Enter password:
[root@db01 ~]#
[root@db01 ~]# mysql -uroot -p <world.sql
Enter password:
[root@db01 ~]

2.3 多种启动方式介绍

image.png

提示:
以上多种方式,都可以单独启动MySQL服务
mysqld_safe和mysqld一般是在临时维护时使用。
另外,从Centos 7系统开始,支持systemd直接调用mysqld的方式进行启动数据库

2.4 初始化配置

2.4.1 初始化配置的方法

预编译
配置文件
命令行

2.4.2 初始配置文件

初始化配置文件的默认读取路径

[root@db01 ~]# mysqld --help --verbose |grep my.cnf/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

初始化配置文件读取顺序

/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

默认情况下,MySQL启动时,会依次读取以上配置文件,如果有重复选项,会以最后一个文件设置的为准。但是,如果启动时加入了--defaults-file=xxxx时,以上的所有文件都不会读取

配置文件的书写方式

[标签]
配置项=xxxx
标签类型:服务端、客户端
服务器端标签:[mysqld][mysqld_safe][server]
客户端标签:[mysql][mysqldump][client
]配置文件的示例展示:

[root@db01 ~]# cat /etc/my.cnf
[mysqld]
user=mysql
basedir=/data/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=6port=3306
log_error=/data/mysql/mysql.log
[mysql]
ocket=/tmp/mysql.sockprompt=Master
 [\\d]>

2.5 多实例的应用

2.5.1

准备多个目录

mkdir -p /data/330{7,8,9}/data

2.5.2 准备配置文件

vim /data/3307/my.cnf
[mysqld]
basedir=/data/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
log_error=/data/3307/mysql.log
port=3307
server_id=7

vim /data/3308/my.cnf
[mysqld]
basedir=/data/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
log_error=/data/3308/mysql.log
port=3308
server_id=8

vim /data/3309/my.cnf
[mysqld]
basedir=/data/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
log_error=/data/3309/mysql.log
port=3309
server_id=9

2.5.3 初始化三套数据

mv /etc/my.cnf /etc/my.cnf.bak
mysqld --initialize-insecure  --user=mysql --datadir=/data/3307/data --basedir=/data/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3308/data --basedir=/data/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3309/data --basedir=/data/mysql

2.5.4 systemd管理多实例

cd /etc/systemd/system
cp mysqld.service mysqld3307.service
cp mysqld.service mysqld3308.service
cp mysqld.service mysqld3309.service
vim mysqld3307.service
ExecStart=/data/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
vim mysqld3308.serviceExecStart=/data/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
vim mysqld3309.serviceExecStart=/data/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf

2.5.5 授权

chown -R mysql.mysql /data/*
2.5.6 启动

systemctl start mysqld3307.service
systemctl start mysqld3308.service
systemctl start mysqld3309.service

2.5.7 验证多实例

netstat -lnp|grep 330
image.png

mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'"mysql -S /data/3308/mysql.sock -e "show variables like 'server_id'"mysql -S /data/3309/mysql.sock -e "show variables like 'server_id'"

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • 0.有感而发 0.1 关于学习的几个阶段 0.2 听懂 0.3 面试能说明白 0.4 工作岗位上能干明白 0.5 ...
    MySQL_oldguo阅读 3,209评论 6 14
  • # 一、框架概述 # 课程概述 1. laravel 4天(之前TP框架还是很大的区别)(国外框架) 2. 在线教...
    关进一阅读 354评论 0 0
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,347评论 1 45
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,067评论 1 32
  • 身在异乡为异客,他乡遇故知。有朋自远方来,不亦说乎? 今天就来个不期而遇,不见不散。 因为007,才有了这次的聚会...
    李子心诚阅读 221评论 0 0