zoukankan      html  css  js  c++  java
  • mysql的体系管理

    (一)使用systemd管理mysql服务

    1.源码包步骤

    #编辑脚本文件 
    
    [root@db02 scripts]# vim /usr/lib/systemd/system/mysqld.service 
    
    [Unit] 
    
    Description=MySQL Server 
    
    Documentation=man:mysqld(8) 
    
    Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html 
    
    After=network.target 
    
    After=syslog.target 
    
    [Install] 
    
    WantedBy=multi-user.target 
    
    [Service] 
    
    User=mysql 
    
    Group=mysql 
    
    ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf 
    
    LimitNOFILE = 5000 
    

    2.二进制包步骤

    #编辑脚本文件 
    
    [root@db02 scripts]# vim /usr/lib/systemd/system/mysqld.service 
    
    [Unit] 
    
    Description=MySQL Server 
    
    Documentation=man:mysqld(8) 
    
    Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html 
    
    After=network.target 
    
    After=syslog.target 
    
    [Install] 
    
    WantedBy=multi-user.target 
    
    [Service] 
    
    User=mysql 
    
    Group=mysql 
    
    ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf 
    
    LimitNOFILE = 5000 
    

    #修改mysql配置文件

    [root@db02 mysql]# vim /etc/my.cnf 
    
    basedir = /application/mysql 
    
    datadir = /application/mysql/data 
    
    #启动MySQL并加入开机自启 
    
    [root@db02 mysql]# systemctl start mysqld 
    [root@db02 mysql]# systemctl enable mysqld
    

    (二)mysql连接方式

    1.第一种连接方式

    TCP/IPL连接

    2.第二种连接方式

    socket连接

    问题

    mysql    ---------------->   socket连接
    mysql-uroot-p123-h127.0.0.0.1----------->  tcp连接
    mysql -uroot -p123-hlocalhost------------> socket连接
    mysql -uroot -p123-h127.0.0.1 -S/tmp/mysql.sock--------->tcp连接
    
    
    
    
    总结:
    1.不一定-h都是TCP连接,-hlocalhost 是socket连接
    2.不一定-s都是socket连接,如果前面加了-h一定是TCP
    3.mysql默认使用的是socket
    
    
    
    为什么要默认是socket连接???
    1.安全
    2.速度快,因为用tcp的话会使用三次握手,socker不用
    

    (三)MySQL体系结构管理

    mysql的客户端: 
    
    mysql 
    
    mysqldump 
    
    mysqladmin 
    
    第三方工具: 
    
    phpmyadmin 
    
    navicat 
    
    sqlyog 
    

    mysqld一个二进制程序,后台的守护进程

    单进程
    多线程
    

    (四)MySQL服务器构成

    1.实例

    比如打开一个word文档,任务管理器会有进程,如果退出word文档则进程会结束
    
    
    比如有一个word文档他里面有2个G的内存,然而,电脑的总内存有16G,并且已经使用了15.9G ,这时,我想打开这个2个G的的文档,他是打不开的,并且中间他会一直在等,如果没有释放内存的话就会报错,
    

    2.MySQL的连接方式

    mysqld程序结构

    1.连接层 
    
    2.SQL层 
    
    3.存储引擎层
    

    同理mysql打开方式

    我有2个G的表,但是在linux中是可以打开的,因为Linux他会与分配给mysql 8个G 所以2个G的表是可以打开的
    

    总结

    - 1.MySQL的后台进程+线程+预分配的内存结构。
    - 2.MySQL在启动的过程中会启动后台守护进程,并生成工作线程,预分配内存结构供MySQL处理数据使用。
    
    
    就是windows 他没有预分配的内存结构
    linux 有预分配的内存结构
    

    关于连接层

    1.验证用户的合法性(用户名,密码,主机域(主机号)黑名单,白名单)
    2.提供两种方式 (TCP/IP,socket) -h -s
    3.提供一个和SQL层交互的专用线程
    

    SQL层

    1.接收连层传来的SQL语句
    2.检查语法
    3.检查语义
    4.解析器 解析SQL语句,生成多种执行计划
    5.优化器,在多种执行计划中选择最后的一种优化方式
    6.执行器种执行SQL语句
      6.1提供一个与存储引擎层交互的线程
      6.2接收存储引擎返回结构化的成表数据
    7.写缓存(redis,memcache)
    8.记录日志 binlog
    
    

    存储引擎层

    1572525718809

    1.接收SQL层传来的最有的SQL语句
    2.与磁盘交互,拿到数据,并结构化成表格,返回给SQL层
    3.提供一个与SQL层交互的线程
    

    (五)MySQL的结构

    1.逻辑结构

    (MySQL的逻辑结构,就是数据库管理员的操作对象)

    库 
    
    表:(真实数据+元数据) 
    
    元数据:用来描述真实数据的数据(列+其它属性(行数+占用空间大小+权限)) 
    
    列:列名字+数据类型+其他约束(非空、唯一、主键、非负数、自增长、默认值) 
    

    2.物理结构

    MySQL的物理结构是最底层的数据文件 
    
    -rw-rw---- 1 mysql mysql 12982 Oct 30 16:49 innodb_index_stats.frm 
    
    -rw-rw---- 1 mysql mysql 98304 Oct 31 16:34 innodb_index_stats.ibd 
    
    -rw-rw---- 1 mysql mysql 10684 Oct 30 16:49 user.frm 
    
    -rw-rw---- 1 mysql mysql 712 Oct 31 15:55 user.MYD 
    
    -rw-rw---- 1 mysql mysql 2048 Oct 31 16:03 user.MYI 
    

    3.MySQL的单位段

    段就是一张表,是由多个区构成

    区:区是由多个页构成 
    
    页:最小单位,16k为一页 
    
    分区表:分区表就是一个区构成一个段也就是一个表,就是分区表 
    
  • 相关阅读:
    android的几种“通知”方式简单实现(Notification&NotificationManager)
    《转》常用的正则表达式
    Http编程(二)使用Apache 的API实现
    http编程(一)使用javaAPI实现
    [随笔] 随笔、随笔
    [Java] 游戏服务器搭建 netty+spring+protobuf
    [C/C++基础--笔试突击] 概述
    [单元测试]Java单元测试,基于Mockito的第一次尝试
    [解决方法] spring-mongo mongodb 2.x 升级到 3.x 配置中出现的一些问题
    [解决方法]log4j的 highlight属性在Eclispe中显示乱码
  • 原文地址:https://www.cnblogs.com/223zhp/p/11838398.html
Copyright © 2011-2022 走看看