zoukankan      html  css  js  c++  java
  • MySQL体系结构

    第1章 体系结构

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

    基于mysql是C/S模型所以有2中连接方式:
    第一种: TCP/IP方式(远程、本地)不支持root用户登录
    mysql -uyfc -p123 -h 10.0.1.51 -P 3306
    第二种:socket方式(仅本地)
    mysql -uroot -p123 -S /tmp/mysql.sock 
    

    1.2 实例介绍

    实例=mysqld后台守护进程+master thread+干活的Thread+预分配的内存
    形象比喻:
    公司=老板+经理+员工+办公室	
    

    第2章 mysqld程序运行原理

    2.1 一条SQL语句的执行过程

    1.1 连接层

    1. 提供TCP/IP连接协议或者socket连接协议
    2. 检查用户名、密码、端口号
    3. 生成一个专用的线程(接收SQL,返回结果)
    4. 把语句交给下一层
    

    1.2 SQL层

    1. 检查SQL语法和SQL_MODE
    2. 验证权限
    3. 验证语义
    4. 解析器对语句进行解析,生成多种执行计划
    5. 优化器基于执行代价(CPU、内存、IO的消耗),选择一种它认为最优的执行计划
    6. 执行器根据优化器选择的执行计划,执行语句。得到获取数据的方法
    7. 提供缓存查询,默认没有开启(一般用redis来代替)
    8. 提供日志记录
    

    1.3 存储引擎层

    真正和磁盘打交道的一层
    1.根据SQL的结果,去磁盘上拿到数据
    2.结构化成二维表,再由SQL层返回连接层
    3.在由连接层的线程返回给用户
    

    第3章 mysql逻辑结构和物理结构

    3.1 逻辑结构

    库
    库名,库属性
    表
    表名,表属性,表内容,表结构
    

    3.2 MySQL物理结构引入

    宏观:
    库------>   目录
    表------>
    	MyISAM(存储引擎):
    	user.frm  : 表结构
    	user.MYD  : 表数据
    	user.MYI  : 索引	
    			
    	InnoDB(存储引擎):
    	5.5.8默认引擎是InnoDB
    	time_zone.frm : 表结构
    	time_zone.ibd : 数据和索引
    
    微观:
    	段 segment :  一个表(非分区表),就是一个段,相当于一个文件系统
    	区 extent  :  连续的64个页,大小是1M
    	页 page    :  默认是连续的4个block,16K
    页:最小的存储单元,默认16k
    区:64个连续的页,共1M
    段:一个表就是一个段,包含一个或多个区
    

    第4章 初始化配置

    4.1 配置的方法

    (1) 初始化配置文件(日常) 
    (2) 预编译时(编译安装)
    (3) 命令行启动(临时维护场景  mysqld_safe 、mysqld) 
    优先级3>1>2
    

    4.2 初始化配置文件应用

    作用:

    (1)影响数据库的启动
    (2)影响到数据库的客户端连接
    (3)影响到数据初始化的功能
    

    初始化配置文件格式

    [标签]
    配置项=xxxx
    
    标签类型:服务端、客户端
    服务器端标签:
    [mysqld]
    [mysqld_safe]
    [server]
    客户端标签:
    [mysql]
    [mysqldump]
    [client]
    配置文件的示例展示:
    [root@db01 ~]# cat /etc/my.cnf
    [mysqld]
    user=mysql
    basedir=/app/mysql
    datadir=/data/mysql
    socket=/tmp/mysql.sock
    server_id=6
    port=3306
    log_error=/data/mysql/mysql.log
    [mysql]
    socket=/tmp/mysql.sock
    prompt=Master [\d]>
    

    4.3 MySQL读取配置文件读取顺序

    [root@db01 ~]# mysqld --help --verbose |grep my.cnf
    /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
    注:
    默认情况下,MySQL启动时,会依次读取以上配置文件,如果有重复选项,会以最后一个文件设置的为准。
    但是,如果启动时加入了--defaults-file=xxxx时,以上的所有文件都不会读取.
    

    第5章 多种启动方式介绍

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

    5.1 通过命令行控制启动

    [root@db01 ~]# systemctl start mysqld
    [root@db01 ~]# /etc/init.d/mysqld start
    [root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking &
    [root@db01 ~]# mysqld  --defaults-file=/tmp/a.txt &
    

    5.2 关闭数据库方法

    [root@db01 ~]# systemctl stop mysqld
    [root@db01 ~]# /etc/init.d/mysqld stop
    [root@db01 ~]# mysqladmin -uroot -p1 shutdown
    

    5.3 说明

    日常工作中就拿日常的操作去正常启动和关闭数据库
    

    第6章 多实例配置

    6.1 第一个里程:创建相关目录并授权

    [root@db01 ~]# mkdir -p /data/330{7..9}/data
    [root@db01 ~]# chown -R mysql.mysql /data/330*
    

    6.2 第二个里程: 编写配置文件

    cat > /data/3307/my.cnf <<EOF
    [mysqld]
    user=mysql                    
    basedir=/soft/mysql5726       
    datadir=/data/3307/data      
    server_id=7                   
    socket=/data/3307/mysql.sock
    port=3307
    innodb_data_file_path=ibdata1:512M;ibdata2:512M:autoextend
    EOF
    
    cat > /data/3308/my.cnf <<EOF
    [mysqld]
    user=mysql                    
    basedir=/soft/mysql5726       
    datadir=/data/3308/data       
    server_id=8                   
    socket=/data/3308/mysql.sock  
    port=3308
    innodb_data_file_path=ibdata1:512M;ibdata2:512M:autoextend
    EOF
    
    cat > /data/3309/my.cnf <<EOF
    [mysqld]
    user=mysql                    
    basedir=/soft/mysql5726       
    datadir=/data/3309/data       
    server_id=9                  
    socket=/data/3309/mysql.sock  
    port=3309
    innodb_data_file_path=ibdata1:512M;ibdata2:512M:autoextend
    EOF
    

    说明

    如果数据库安装的时候修改了ibdata大小,那么配置多实例的时候,也要指定ibdata的大小,并且要和数据库的大小是一致的
    

    6.3 第二个里程: 分别初始化数据

    mysqld --initialize-insecure --user=mysql --basedir=/soft/mysql5726 --datadir=/data/3307/data
    mysqld --initialize-insecure --user=mysql --basedir=/soft/mysql5726 --datadir=/data/3308/data
    mysqld --initialize-insecure --user=mysql --basedir=/soft/mysql5726 --datadir=/data/3309/data
    

    6.4 第四个里程: systemd管理多实例

    cat > /etc/systemd/system/mysqld3307.service <<EOF
    [Unit]
    Description=MySQL Server
    Documentation=man:mysqld(8)
    Documentation=http://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=/soft/mysql5726/bin/mysqld --defaults-file=/data/3307/my.cnf
    LimitNOFILE=5000
    EOF
    
    cat > /etc/systemd/system/mysqld3308.service <<EOF
    [Unit]
    Description=MySQL Server
    Documentation=man:mysqld(8)
    Documentation=http://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=/soft/mysql5726/bin/mysqld --defaults-file=/data/3308/my.cnf
    LimitNOFILE=5000
    EOF
    
    cat > /etc/systemd/system/mysqld3309.service <<EOF
    [Unit]
    Description=MySQL Server
    Documentation=man:mysqld(8)
    Documentation=http://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=/soft/mysql5726/bin/mysqld --defaults-file=/data/3309/my.cnf
    LimitNOFILE=5000
    EOF
    

    6.5 第五个里程: 启动多实例

    systemctl start mysqld3307
    systemctl start mysqld3308
    systemctl start mysqld3309
    

    6.6 连接测试

    mysql -S /data/3307/mysql.sock 
    mysql -S /data/3308/mysql.sock 
    mysql -S /data/3309/mysql.sock
    
    学习的进阶之路
  • 相关阅读:
    在linux上搭建sftp服务
    FTP客户端遇到150连接超时错误的处理办法
    电脑每次开机打开微软网站怎么解决
    Linux学习笔记之认识与学习Bash
    Linux学习笔记之VIM编辑器
    Linux学习笔记之文件与文件系统的压缩与打包
    Linux学习笔记之磁盘与文件系统的管理
    Linux学习笔记之目录配置
    Linux学习笔记之档案权限与目录配置
    ubuntu修改apt源
  • 原文地址:https://www.cnblogs.com/yufenchi/p/12961338.html
Copyright © 2011-2022 走看看