《MySQL系列-InnoDB引擎13》文件-参数文件

Posted DATA数据猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《MySQL系列-InnoDB引擎13》文件-参数文件相关的知识,希望对你有一定的参考价值。

文件

mysql数据和InnoDB存储引擎表中的各种类型的文件,这些文件如下:

  • 参数文件:MySQL启动时的数据库文件,指定初始化参数,介绍各种参数类型,以及定义某种内存结构的大小等
  • 日志文件:用来记录MySQL实例对某种条件做出响应时写入的文件,如错误日志、二进制日志、慢查询日志、查询日志等
  • socket文件:当用UNIX域套接字方式进行连接时需要的文件
  • pid文件:MySQL实例的进程ID文件
  • MySQL表结构文件:用来存放MySQL表结构定义文件
  • 存储引擎文件:因为MySQL表存储引擎的关系,每个存储引擎都会有自己的文件来保存各种数据。这些存储引擎真正存储了记录和索引等数据。

参数文件

  当MySQL实例启动时,数据库会先去读一个配置参数,用来寻找数据库的各种我恩据所在文职以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等。在默认情况下,MySQL实例会按照一定的顺序在指定的位置进行读取,用户只需要通过命令mysql --help | grep my.cnf来寻找即可。

  MySQL数据库参数的作用和Oracle数据库的参数极其类似,不同的是,Oracle实例在启动时若找不到参数文件,是不能进行状态(mount)操作的。MySQL稍微有所不同,MySQL实例可以不需要参数文件,这时所有的参数取决于编译MySQL时指定的默认值和源代码的指定参数的默认值。但是,如果MySQL实例在默认的数据库目录下找不到MySQL架构,则启动同样会失败,可通过错误日志查看。

  MySQL的参数文件是以文本方式进行存储的,用户可以直接通过一些常用的文本编辑器来进行参数的修改。

什么是参数?

简单的说,可以把数据库参数看成一个键值对。

比如参数datadir是键,那么他的值就是/var/lib/mysql/

  • 可以通过SHOW VARIABLES查看数据库中所有参数,也可以通过LIKE来过滤参数名。

    mysql> show variables like 'datadir%';
    +---------------+-----------------+
    | Variable_name | Value           |
    +---------------+-----------------+
    | datadir       | /var/lib/mysql/ |
    +---------------+-----------------+
    1 row in set (0.00 sec)
    
  • 从MySQL 5.1版本开始,可以通过information_schema架构下的global_variables视图进行查找:

    select * 
    from global_variables 
    where variable_name like 'datadir%'
    
  • 从MySQL 5.7.6开始information_shcema.global_variables已经开始被舍弃,为了兼容性,此时需要打开show_compatibility_56

    # 1.查询global_variables异常
    mysql> select * from global_variables where variable_name like 'innodb_buffer%'                                                                          \\G;
    ERROR 3167 (HY000): The 'INFORMATION_SCHEMA.GLOBAL_VARIABLES' feature is disabl                                                                          ed; see the documentation for 'show_compatibility_56'
    ERROR:
    No query specified
    
    # 2.查看show_compatibility_56状态
    mysql> show variables like '%show_compatibility_56%';
    +-----------------------+-------+
    | Variable_name         | Value |
    +-----------------------+-------+
    | show_compatibility_56 | OFF   |
    +-----------------------+-------+
    1 row in set (0.00 sec)
    
    # 3.临时开启show_compatibility_56,重启后失效
    # 需要修改my.cnf,添加"show_compatibility_56=1"后永久生效
    mysql> set global show_compatibility_56=on;
    Query OK, 0 rows affected (0.00 sec)
    
    # 4.再次查询
    mysql> select * from global_variables where variable_name like 'datadir%';
    +---------------+-----------------+
    | VARIABLE_NAME | VARIABLE_VALUE  |
    +---------------+-----------------+
    | DATADIR       | /var/lib/mysql/ |
    +---------------+-----------------+
    1 row in set, 1 warning (0.00 sec)
    
    

参数类型

MySQL数据库参数可以分为两类:

  • 动态参数
  • 静态参数

  动态参数意味着可以在MySQL实例运行中进行更改,静态参数说明在整个实例生命周期内都不得进行更改,就好像是只读的。可以通过SET命令对动态参数值进行修改,SET的语法如下:

SET
| [global | session] system_var_name=expr
| [@@global. | @@session. | @@]system_var_name=expr

  可以看到这里有global和session关键字,它们表明该参数的修改是基于当前会话还是整个实例的生命周期。有些动态参数只能在会话中进行修改,如autocommit;而有些参数修改完后,在整个实例生命周期中都会生效,如binlog_cache_size; 而有些参数既可以在会话中又可以在整个生命周期内生效,如read_buffer_size。

  但是需要注意的是,通过set @@global.system_var_name=expr;方法对变量的全局值进行修改,在这次的实例生命周期内都有效。但MySQL实例本身并不会对参数文件中的该值进行修改。也就是说,在下次启动时MySQL实例还是会读取参数文件。若想在数据库实例下一次启动时参数保留当前修改的值,那么必须通过修改参数文件实现。

以上是关于《MySQL系列-InnoDB引擎13》文件-参数文件的主要内容,如果未能解决你的问题,请参考以下文章

《MySQL系列-InnoDB引擎27》表-文件格式

《MySQL系列-InnoDB引擎21》文件-PID文件

《MySQL系列-InnoDB引擎20》文件-套接字文件

《MySQL系列-InnoDB引擎12》启动关闭与恢复

《MySQL系列-InnoDB引擎12》启动关闭与恢复

《MySQL系列-InnoDB引擎23》文件-InnoDB存储引擎文件-表空间文件