美文网首页mysql-DBA
MySQL的体系结构与基础管理

MySQL的体系结构与基础管理

作者: 静如止水yw | 来源:发表于2020-01-05 21:29 被阅读0次

一、MySQL的工作模型

MySQL主要分为客户端模型和服务端模型

  • 服务端程序:mysqld
  • 客户端程序:mysql mysqldump mysqladmin
  • 连接协议:
(1) 网络套接字:
TCP/IP网络连接串 ---> mysql -uroot -p123 -h10.0.0.51  -P3306
(2) 本地套接字:
socket本地连接串 ---> mysql -uroot -p123 -S /tmp/mysql.sock
图1 体系结构

二、MySQL实例

实例=mysqld+MAster Thread+worker Threads+专用内存


图2 实例流程图

三、mysqld程序结构

1. SQL是什么

结构化查询语言,关系型数据库中的专用命令。mysql的程序结构:连接层、SQL层、存储引擎层。


图3 mysqld程序结构

2. 一条SQL语句的执行逻辑

(1)连接层
a. 提供连接协议:TCP/IP、SOCKET
b. 提供验证:用户、密码、IP、SOCKET
c. 提供专用连接线程:接收用户SQL,返回结果
通过以下语句可以查看到连接线程基本情况
mysql> show processlist;
(2)SQL层***
a. 接收上层传送的SQL语句
b. 语法验证模块:验证语句语法,是否满足SQL_MODE
c. 语义检查:判断SQL语句的类型
   DDL : 数据定义语言
   DCL : 数据控制语言
   DML : 数据操作语言
   DQL : 数据查询语言
d. 权限检查:用户对库表有没有权限
e. 解析器:对语句执行前,进行预处理,生成解析树(执行计划),简单的说就是生辰多种执行方案
f. 优化器:根据解析器得出的多种执行计划,进行判断,选择最优的执行计划.
   代价模型:资源(CPU IO MEM) 的耗损评估性能好坏.
g. 执行器:根据最优执行计划,执行SQL语句,产生执行结果(执行结果:在磁盘的xxxx位置上).
h. 提供查询缓存(默认是没有开启的),会使用redis tair替代查询缓存功能
i. 提供日志记录(日志管理章节):binlog(默认是没开启的)
(3)存储引擎层(类似与Linux中的文件系统)
a. 负责根据SQL层执行的结果,从磁盘上拿数据.
b. 将16进制的磁盘数据,交由SQL结构化成表.
c. 连接层的专用线程返回给用户.
图4 一条SQL语句的执行逻辑

3. 逻辑结构

图5 数据库的逻辑结构
  • 库:库名(database) / 库属性(schema)
  • 表:表名、表属性、字段(列/表结构)、数据行(行)

4. MySQL对象物理结构

  • 宏观:一个库对应一个目录
  • 微观:如下图
    图6 MySQL对象物理结构
    表的段、区、页
    每一长数据表(segment段)都包含有extent区(默认是1M),每一个extent包含有连续的64个page(默认16KB),一个page包含4个连续的os block(默认是4K),一个os block包含连续的8个扇区(默认是512B)

四、MySQL基础管理

1. MySQL用户管理

  • 作用:登录和管理对象
  • 定义:用户名@'白名单'
用户名:不要太长,要和业务有关
白名单支持的方式(常用的几种方式):
wordpress@'10.0.0.%'    #10网段任意地址
wordpress@'10.0.0.0/255.255.255.0'  #23位
wordpress@'10.0.0.5%'  #50-59
wordpress@'localhost'  #本地
其他:
wordpress@'10.0.0.56' 
wordpress@'%'  #任意地址
wordpress@'10.0.0.%' 255.255.255.0  #24位
  • 用户管理操作
增加用户:
mysql> create user wyw@'10.0.0.%' identified by '123';
查询用户:
mysql> desc mysql.user;    ---->  authentication_string
mysql> select user,host,authentication_string from mysql.user;
修改用户:
mysql> alter user wyw@'10.0.0.%' identified by '123456';
删除用户:
mysql> drop user wyw@'10.0.0.%';

2. mysql权限管理

  • 权限管理操作
  mysql> grant all on *.* to wordpress '%' identified by '123';
  • 常用权限介绍:
ALL:
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:超级管理员才具备的,给别的用户授权的功能
  • 权限作用范围
*.*                  ---->管理员用户
wordpress.*          ---->开发和应用用户
wordpress.t1
  • 企业授权案例
(1)授权一个管理员用户wyw, 可以从10网段任意地址登录管理数据库
mysql> grant all on *.* wyw@'10.0.0.%' identified by '123' with grant option;
(2)授权一个业务用户app,可以从10网段地址访问app库的所有表
mysql> grant select,update,insert,delete on app.* to app@'10.0.0.%' identified by '123';
(3)授权一个开发用户dev,可以对dev库进行业务开发
mysql> grant select,create,insert on dev.* to dev@'10.0.0.%' identified by '123';
  • root管理员密码忘记或被篡改如何处理
# 关闭数据库,并启动到单用户模式
/etc/init.d/mysqld stop 或者 systemctl stop mysqld
mysqld_safe --skip-grant-tables --skip-networking &
    --skip-grant-tables  #连接层关闭验证模块,所有验证表不加载
    --skip-networking  #连接层关闭TCP/IP协议,禁止远程访问.

#无密码登录MySQL并修改密码
mysql> flush privileges;
mysql> alter user root@'localhost' identified by '123';
#重启数据库到正常模式
/etc/init.d/mysqld restart
mysql -uroot -p123
  • 查询用户权限
mysql> show grants for app@'10.0.0.%';
+---------------------------------------------------------------------+
| Grants for app@10.0.0.%                                             |
+---------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'app'@'10.0.0.%'                              |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `app`.* TO 'app'@'10.0.0.%' |
+---------------------------------------------------------------------+
  • 回收权限
mysql> remove delete,drop on app.* from app@'10.0.0.%';   
mysq> show grants for app@'10.0.0.%';
+-------------------------------------------------------------+
| Grants for app@10.0.0.%                                     |
+-------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'app'@'10.0.0.%'                      |
| GRANT SELECT, INSERT, UPDATE ON `app`.* TO 'app'@'10.0.0.%' |
+-------------------------------------------------------------+

3. MySQL连接管理

  • 自带客户端工具
(1) mysql
-u  用户名
-p  密码
-h  IP
-P  端口
-S  socket位置
-e  免交互
<   导入SQL脚本
案例:
1. TCP连接串远程登录
注:需提前创建用户
例子: 
mysql> grant all on *.* to oldguo@'10.0.0.%' identified by '123';
[root@db01 data_3306]# mysql -uoldguo -p -h 10.0.0.51 -P 3306
Enter password:
2. socket连接方式
注:需要提前创建好localhost用户
mysql> grant all on *.* to oldguo@'localhost' identified by '123';
[root@db01 data_3306]# mysql -uoldguo -p -S /tmp/mysql.sock 
Enter password:
3. 免交互式的登录
[root@db01 ~]# mysql -uroot -p -e "show processlist"
4. 导入SQL脚本
mysql -uroot -p < t100w.sql  #命令行导入
mysql> source /root/world.sql   #在数据库里导入
(2) mysqladmin
#修改密码
mysqladmin -uroot -p123456 password 123
mysql -uroot -p123
#关闭数据库
mysqladmin -uroot  -p123 shutdown
#重启数据库
systemctl start mysqld(或者/etc/init.d/mysql start)

如何验证一个用户是通过远程还是通过本地登录的(show processlist)

图7 验证数据库是从本地登录还是远程登录
  • 第三方开发工具
    sqlyog、navicat、workbench
  • 应用程序连接
php-mysql
pip install mysql
jar
go

4. MySQL启动关闭

  • 启动方式:
    systemctl ---->mysql.server start ----->mysqld_safe ---->mysqld(service启动方式(centos6版本的启动))
systemctl start mysqld       
/etc/init.d/mysql start
mysql_safe &   ## 不打印日志到前台
mysqld    ## 打印日志在前台

5. MySQL初始化配置

  • 配置方法(优先级)
    源码安装定制<初始化配置文件< 命令行启动时定制
  • 初始化配置文件
mysqld --help --verbose|grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 
                      my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default
##依次从左到右读取,后面的会覆盖前面的 
MySQL配置文件的默认读取顺序
/etc/my.cnf
basedir/my.cnf
datadir/my.cnf
--defaults-extra-file
~/.my.cnf
#建议一个mysql实例一个配置文件
  • 配置文件书写格式
[root@db01 data_3306]# cat /etc/my.cnf 
[mysqld]               
user=mysql
port=3306
basedir=/usr/local/mysql57
datadir=/data/mysql/data_3306
server_id=6
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock

标签项  --->[mysqld]
服务器端:[mysqld],[mysqld_safe]  ---> 影响到MySQL启动
客户端:  [clinet],[mysql],[mysqldump]  ---> 影响本地客户端程序

配置项 ----->key=value
  • 命令行(mysqld mysqld_safe)
--default
--skip-grant-tables
--skip-networking
  • 优化配置文件
mysqld --defaults-file=/opt/a.cnf & (需要提前准备好配置文件)

相关文章

网友评论

    本文标题:MySQL的体系结构与基础管理

    本文链接:https://www.haomeiwen.com/subject/ngrcactx.html