mysql技术内幕-文件
发表于:2025-03-12 | 分类: 学习

参数文件

mysql实例启动时,数据库会先读一个配置参数文件,用来寻找各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等。linux可通过mysql --help | grep my.cnf查询

mysql数据库参数文件和oracle数据库参数文件作用及其类似,不同的是oracle实例启动找不到参数文件,不能进行装载(mount)操作。mysql有所不同,可以不需要参数文件,这时所有参数取决于编译mysql时指定的默认值和源代码中指定参数的默认值。不过在默认的数据库目录找不到mysql架构,也会启动失败。

  1. 什么是参数

    可以把数据库参数看成一个键/值(key/value)对。可以通过命令show variables查看数据库中所有参数,也可以通过LIKE来过滤参数名。也可以通过global_variables视图来查找,如下所示:

    1
    2
    3
    4
    mysql > select * from
    > global_variables
    > where variable_name like 'innodb_buffer%'\g;
    mysql > show variables like 'innodb_buffer%'\g;
  2. 参数类型
    mysql参数类型分为两类:

    • 动态(dynamic)参数
    • 静态(static)参数

    动态参数可以在mysql运行中进行更改,静态参数在整个实例生命周期内不可更改,是只读的。

日志文件

mysql常用日志文件有:

  • 错误日志(error log)
  • 二进制日志(binlog)
  • 慢查询日志(slow query log)
  • 查询日志(log)
  1. 错误日志
    错误日志文件对mysql的启动、运行、关闭过程进行了记录。可通过show variables like 'log_error'来定位该文件
  2. 慢查询日志
    慢查询日志可定位存在问题的SQL语句,从而进行SQL语句层面的优化。例如可设置一个SQL语句运行时间阈值,可通过long_query_time来设置阈值,默认10,代表10秒。
  3. 查询日志
    这个日志记录了所有对mysql数据库请求的信息,无论这些请求是否得到了正确的执行。
  4. 二进制日志
    这个日志记录了对mysql数据库执行更改的所有操作,但不包括select和show这类操作,因为这类操作对数据本身并没有修改。
    二进制日志有以下作用:
    • 恢复(recovery):某些数据的恢复需要二进制日志,例如,在一个数据库全备文件恢复后,用户可以通过日志进行point-in-time的恢复
    • 复制(replication):其原理与恢复相似,通过复制和执行二进制日志使一台远程的mysql数据库(一般称为slave或standby)与一台mysql数据库(一般称为master或primary)进行实时同步。
    • 审计(audit):用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入的攻击

套接字文件

套接字文件可由参数socket控制。一般在/tmp目录下,名为mysql.sock

pid文件

该文件由参数pid_file控制,默认在数据库目录下,文件名为主机名.pid。

表结构定义文件

不论表采用何种存储引擎,mysql都有一个以frm为后缀名的文件,这个文件记录了该表的表结构定义。

InnoDB存储引擎文件

innodb存储引擎密切相关的文件包括重做日志文件、表空间文件。

  1. 表空间文件
    innodb采用将存储的数据按表空间(tablespace)进行存放的设计。在默认配置下会有一个初始大小为10MB,名为ibdatal的文件。该文件就是默认的表空间文件(tablespace file),可通过参数innodb_data_file_path设置。
  2. 重做日志文件
    默认情况下,innodb存储引擎的数据目录下会有两个名为ib_logfile0ib_logfile1的文件。在mysql官方手册中将其称为innodb存储引擎的日志文件,更准确的定义应该是重做日志文件(redo log file)。这个文件对innodb存储引擎至关重要,记录了对于innodb存储引擎的事务日志。
    当实例或介质失败(media failure)时,重做日志文件就能派上用场。
上一篇:
mysql技术内幕-表
下一篇:
mysql技术内幕-InnoDB存储引擎