zoukankan      html  css  js  c++  java
  • 第3章 文件

      MySQL会用到的文件

    3.1 参数文件

      mysql启动的时候会读取的配置文件,也是之前装Mysql时候需要修改的配置文件,比如修改配置文件允许远程访问。MySQL的配置文件有多个,按照顺序读取,如果有重复的字段设置以最后一个为准。

      

      没有配置文件也是可以启动的,但是是按照编译时候默认的参数来启动的,既然是编译时候默认的那也就不能修改,所以还是得有一个参数文件。

    3.1.1 什么是参数

      参数就是参数啊……启动的时候的配置,例如缓存池的大小,是否允许非localhost的请求访问数据。可以通过show variables结合like指令搜索查看某个想确定的参数。

    3.1.2 参数类型

      参数类型分为动态和静态,动态类型的参数在运行期间可以修改,静态参数MySQL启动以后就不能修改。对动态参数的修改又分为两种,一种是session级别一种是global级别,即修改后的结果是只在当前会话生效还是全局都生效。

      首先看到当前全局的read_buffer_size的大小。

      

      然后修改了read_buffer_size的大小

      

      但是修改之后查看全局的read_buffer_size的大小并没有改变

      

      改变的是session级别的read_buffer_size

      

      如果想要对全局的动态变量进行修改需要制定@@global参数

    3.2 日志文件

    3.2.1 错误日志

      记录着mysql运行期间所有的错误记录,也包括警告等信息。在show variables里查看错误日志的位置。

    3.2.2 慢查询日志

      用于sql语句的优化,在执行所有sql语句的时候如果某个sql语句的执行时间大于指定的阈值,就会写入慢查询日志里,通过分析慢查询日志可以找到需要优化的sql语句。

      我电脑上是14.14的版本,和书上的版本不一样,相关的变量的名称也不一样。所以我首先检索和slow相关的所有变量,可以看到下面两个个变量是和书上的变量相对应的,是否开启慢查询和慢查询日志的位置。

      long_query_time对应着慢查询的阈值。

      

      如果某些查询没有使用索引,那么即使他的查询时间没有超过阈值,但是他仍然有优化的空间,所以也希望把没有使用索引的sql语句放到查询日志里。log_queries_not_using_indexes对应着开启这一功能。

     

      

      随着MySQL运行时间的增长,慢查询日志的长度也会增加,人肉去看这个日志就会不现实,为此MySQL提供了两种优化方案。

      一种是使用mysqldumpslow命令,该命令提供了对慢查询日志的检索功能。

      一种是不直接查看慢查询的文本日志,而是查看慢查日志记录的对应的表里。该表存储在mysql.slow_log的位置。

      这个太乱了,我还是喜欢直观的。

      这个就很不错

      但是默认是不写在这个表里的,是写在文件里的。其实不只是慢查询的日志默认写在文件里,所有的日志都是默认写在文件里的,但是可以设置成输出到表里,虽然这样会增加一定的存储开销。通过使用上面提到的set命令,并把作用域设置成global使所有会话的所有日志都输出到表里。

      

      开启慢查询的目的是为了优化sql语句,其中之一的优化方式是分析逻辑读取和物理读取的比例。物理读取是从磁盘读,逻辑读取既包含磁盘也包含缓冲池。  

    3.2.3 查询日志

      所有的sql操作都被记录在这个日志里,无论他是否被正确执行。

      首先要找到这个查询日志的文件的位置,书上没有写叫啥,我就暴力的搜索了含log的所有variables。

      

      原来它叫general_log,而且默认是关闭的,先打开。本着节省空间的目的,我决定只在session里打开。

      

      但是他不让,必须是global的

      

      现在在看这个gerenal_log已经打开了

      

      随便查询一个语句,然后vi看一哈。

      

      成了!

    3.2.4 二进制日志

      记录了所有对数据库进行修改的记录,只包括update delete操作。

    3.3 套接字文件

      本地连接MySQL可以使用套接字方式,此时需要一个套接字文件。

     

    3.4 pid文件

      MySQL启动的时候会把自己的进程ID写到PID文件里

    3.5 表结构文件

      每个表、视图都有一个以frm结尾的文件来存储该表或者试图的结构

    3.6 InnoDB存储引擎文件

    3.6.1 表空间文件

    3.6.2 重做日志文件

      类似于之前的bin日志,每次更新前先写入redo log里,并修改内存里的内容,等到时机合适的时候再把内容更新到磁盘里,这是提高效率的一种方式,同时也是安全性的体现,有了redo log就可以恢复数据库。

      redo log是按照组来组织的,至少有一组redo log,一组里至少有两个redo log,每次写的时候先往redo log1里写,写满的时候再去redo log2里写,然后循环使用。当然MySQL会在合适的时候把redo log里的内容刷到磁盘里。

      和redo log相关的参数如下

      

      file_size代表日志文件大小。in_group代表有几个日志文件组。home_dir是路径。ahead_size代表向redo log里追加的大小。

        

      这里要注意区别之前的bin log,bin log是server层的日志,在InnoDB引擎被开发出来之前,MySQL只有bin log日志,bin log日志对于所有的引擎都是可以使用的。其次二者存储的内容不同,redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”。redo log 是循环写的,空间固定会用完;binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

  • 相关阅读:
    lhgdialogv3.13 使用点滴
    CheckBoxList 取值 及选中相关用法
    repeater 及 gridview 中绑定短日期
    数据库中日期大小的判断
    父子不同窗口间刷新传值
    子级Repeater获取父级Repeater绑定项的值
    vs.net 2010 web 项目中使用 webservice
    web打印实现方案 Lodop6.034 使用方法总结
    用 showModalDialog 方法回传数据到父页中去
    vs.net2010中使用 Ajax Control Toolkit
  • 原文地址:https://www.cnblogs.com/AshOfTime/p/10426019.html
Copyright © 2011-2022 走看看