• 客户端与服务器端模型
    mysql属于cs架构,需要客户端的支持才能连接。mysql启动后会生成端口号和套接字socket,分别用户远程登陆和本地套接字登陆。  
  • 应用程序如何连接到MySQL—TCP/IP
    远程连接: mysql -uroot -p123456 -h 10.0.0.200
  • 客户端程序如何连接到MySQL—套接字
    本地连接:mysql -uroot -p123456 -S /tmp/mysql.sock
    默认情况下myqsl -uroot -p123456 采用的是本地连接
  • MySQL服务器构成
    mysql服务启动后,就在内存区开辟一块空间,运行mysql程序,该程序等待外来连接,当有连接进入,去开始处理并在磁盘上查询请求所需的数据,最后将数据发送出去,该服务继续等待下一个连接......,直到mysql服务关闭,此程序才会关闭,并且mysql的内存回收并不会交给操作系统处理,而是由自身的子程序进行回收所有不必要的内存空间。由此可见,mysql是在操作系统上开辟了一块与外界隔离的空间运行的。
    • MySQL在启动过程
    – 启动后台守护进程,并生成工作线程
    – 预分配内存结构供MySQL处理数据使用
    • 实例是什么?
    MySQL的后台进程+线程+预分配的内存结构
  • MySQLD服务器程序构成

    链接层:mysql通过合格的通信协议接收连接请求,然后验证用户名,密码,若连接成功,则给该请求创建线程,最后将接收到的sql转交给SQL层。
    SQL层:SQL层接收到SQL后,用解析器将sql语句解析为执行计划,可能解析出很多种执行计划,这是优化器会找到一个耗费资源最少的交给查询执行器,由查询执行器负责执行这个执行计划,最后告诉存储引擎应该取出哪些数据交给线程。其中我们会经常获取相同的数据,为了避免sql语句每次查询都需要解析和执行,数据库将相同的数据交给查询高速缓存保存,这样下一次查询就直接从高速缓存中获取数据。所有的查询日志将保存在查询日志记录中。
    存储引擎层:存储引擎是充当不同表类型的处理程序的服务器组件。
       • 存储引擎用于:
       – 存储数据
       – 检索数据
       – 通过索引查找数据
       • 双层处理
       – 上层包括SQL解析器和优化器
       – 下层包含一组存储引擎
       • SQL 层不依赖于存储引擎:
       – 引擎不影响SQL处理
       – 有一些例外
  • SQL处理流程

     

  • 依赖于存储引擎的功能
    • 存储介质
    • 事务功能
    • 锁定
    • 备份和恢复
    • 优化
    • 特殊功能:
      – 全文搜索
      – 引用完整性
      – 空间数据处理
     
  • 数据库的逻辑结构
  • MySQL如何使用磁盘
    程序文件随数据目录一起存储在服务器安装目录下。执行各种客户机程序、管理程序和实用程序时将创建程序可执行文件和日志文件。首要使用磁盘空间的是数据目录。
    • 服务器日志文件和状态文件:
    包含有关服务器处理的语句的信息。日志可用于进行故障排除、监视、复制和恢复。
    • InnoDB 日志文件:
    (适用于所有数据库)驻留在数据目录级别。
    • InnoDB 系统表空间:
    包含数据字典、撤消日志和缓冲区。
    每个数据库在数据目录下均具有单一目录(无论在数据库中创建何种类型的表)。
    数据库目录存储以下内容:
    - 数据文件:
    特定于存储引擎的数据文件。这些文件也可能包含元数据或索引信息,具体取决于所使用的存储引擎。
    - 格式文件 (.frm):
    包含每个表和/或视图结构的说明,位于相应的数据库目录中。
    - 触发器:
    与某个表关联并在该表发生特定事件时激活的命名数据库对象。
    数据目录的位置取决于配置、操作系统、安装包和分发。典型位置是 /var/lib/mysql。
    MySQL 在磁盘上存储系统数据库 (mysql)。mysql 包含诸如用户、特权、插件、帮助列表、事件、时区实现和存储例程之类的信息。

 

最后我们来看看mysql数据在系统中是如何存放数据的。默认情况下数据放放/application/mysql-5.6.36/data/目录下: 

[root@db01 mysql]# cd /application/mysql-5.6.36/data/mysql/
[root@db01 mysql]# ls
columns_priv.frm  general_log.CSM    help_topic.frm          plugin.MYI        servers.MYI               tables_priv.MYI            time_zone_transition.MYI
columns_priv.MYD  general_log.CSV    help_topic.MYD          proc.frm          slave_master_info.frm     time_zone.frm              time_zone_transition_type.frm
columns_priv.MYI  general_log.frm    help_topic.MYI          proc.MYD          slave_master_info.ibd     time_zone_leap_second.frm  time_zone_transition_type.MYD
db.frm            help_category.frm  innodb_index_stats.frm  proc.MYI          slave_relay_log_info.frm  time_zone_leap_second.MYD  time_zone_transition_type.MYI
db.MYD            help_category.MYD  innodb_index_stats.ibd  procs_priv.frm    slave_relay_log_info.ibd  time_zone_leap_second.MYI  user.frm
db.MYI            help_category.MYI  innodb_table_stats.frm  procs_priv.MYD    slave_worker_info.frm     time_zone.MYD              user.MYD
event.frm         help_keyword.frm   innodb_table_stats.ibd  procs_priv.MYI    slave_worker_info.ibd     time_zone.MYI              user.MYI
event.MYD         help_keyword.MYD   ndb_binlog_index.frm    proxies_priv.frm  slow_log.CSM              time_zone_name.frm
event.MYI         help_keyword.MYI   ndb_binlog_index.MYD    proxies_priv.MYD  slow_log.CSV              time_zone_name.MYD
func.frm          help_relation.frm  ndb_binlog_index.MYI    proxies_priv.MYI  slow_log.frm              time_zone_name.MYI
func.MYD          help_relation.MYD  plugin.frm              servers.frm       tables_priv.frm           time_zone_transition.frm
func.MYI          help_relation.MYI  plugin.MYD              servers.MYD       tables_priv.MYD           time_zone_transition.MYD
[root@db01 mysql]# 

#以上都是mysql自身系统的源数据文件
   .frm  表结构文件
   .myd   表数据文件
   .myi  表索引文件

最后修改于 2019-08-01 10:12:28
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇