MySQL-数据库文件

1. 概述

  数据库文件主要包含MySQL数据库层面文件和存储引擎层面2中类型的文件。

1) 数据库层面的文件有参数文件(my.cnf/my.ini),错误文件(error log),慢查询文件(slow log),通用查询文件(genral log),二进制文件(bin log),中继日志文件(relay log),审计日志(auidt log),套接字文件(socket),进程id文件(pid file)和表结构文件(.frm)

2)存储引擎层面文件有redo log和undo log日志文件

2. 数据库层面文件介绍

2.1 参数文件

  参数文件用户保存默认或用户自定义操作选项。用于mysqld服务启动。

1) 查看实例启动过程中读取参数文件的优先级顺序

mysql --help|grep -A1 'Default options'
mysqld --verbose --help |more

2) 命令参数配置(参数类型:按是否可以在线修改参数划分成两类,动态参数和静态参数)

mysql> set [global|session] parameter=value;

3) 查看参数

扫描二维码关注公众号,回复: 9759501 查看本文章
mysql> show variables;
mysql> show vairalbes like '%parameter%';

2.2 错误日志文件

  错误日志记录MySQL启动,运行,关闭过程中出现的问题。一般存放在数据目录下

show variables like 'log_error';
select @@log_error;

SELECT VARIABLE_NAME, VARIABLE_VALUE FROM performance_schema.global_variables WHERE VARIABLE_NAME in ( 'log_error', 'log_warnings');

2.3 二进制日志(binary log)

  用于记录真正执行更改的所有操作(DML语句),并且记录了语句发生时间、执行时长、操作的数据等等。不包含那些没有修改的任何数据的语句,不会记录show,select语句。

  1)二进制日志中常用的定义格式:

    1、语句(statement):默认的记录格式;

    2、行(row):定义的并非数据本身而是这一行的数据是什么;

    3、混合模式(mixed):交替使用行和语句、由mysql服务器自行判断。

    其中基于行的定义格式数据量会大一些但是可以保证数据的精确性。

  2)开启/关闭二进制日志

-- 写入文件方式(永久)
vi /etc/my.cnf
[mysqld]
log-bin [=DIR \ [filename]]

-- 命令方式(临时)
set global log-bin = 1;

  3)删除二进制日志:

  二进制日志会记录大量的信息(其中包含一些无用的信息)。如果很长时间不清理二进制日志,将会浪费很多的磁盘空间。但是,删除之后可能导致数据库崩溃时无法进行恢复,所以若要删除二进制日志首先将其和数据库备份一份,其中也只能删除备份前的二进制日志,新产生的日志信息不可删(可以做即时点还原)。也不可在关闭mysql服务器之后直接删除因为这样可能会给数据库带来错误的。若非要删除二进制日志需要做如下操作:导出备份数据库和二进制日志文件进行压缩归档存储。

-- 1. 使用RESET MASTER语句可以删除所有的二进制日志

mysql> reset master; 
mysql> show binary logs;

-- 2. 根据文件或时间点来删除二进制日志

mysql> PURGE { BINARY | MASTER } LOGS {TO 'log_name' | BEFORE datetime_expr }

-- 其中TO'log_name'表示把这个文件之前的其他文件都删除掉,也可使用BEFORE datetime_expr删除指定时间之前的二进制文件。

mysql> PURGE BINARY LOGS TO 'mysql-bin.000007';
mysql> PURGE BINARY LOGS BEFORE '2020-03-10 10:26:36'; #使用时间来删除二进制日志

2.4 慢查询日志(slow log)

  记录所有超过long_query_time时间的语句记录。可以通过mysqldumpslow工具或percona-toolkit工具查看慢查询日志文件,帮助DBA优化慢查询语句。

-- 相关参数
SELECT
      VARIABLE_NAME
     ,VARIABLE_VALUE
-- ,GROUP_CONCAT("'",VARIABLE_NAME,"'")
FROM
    performance_schema.global_variables 
WHERE
    VARIABLE_NAME in ( 'slow_query_log', 'slow_query_log_file','long_query_time','');

慢查询日志分析工具

-- 按照查询时间维度输出top 10
mysqldumpslow -s t -t 10 <slow_query_log_file>

3. innodb存储引擎日志

  innodb存储引擎层面主要有两种日志(redo log和undo log)。innodb的多版本是通过使用undo和回滚段来实现。InnoDB是索引组织表,每行记录实现三个隐藏列(DB_ROW_ID, DB_TRX_ID, DB_ROLL_PTR)分别代表每行记录行号,事务ID和回滚指针。

3.1  redo log日志文件

   redo log用于记录事务操作变化,记录数据被修改后的值。

  redo log记录了所有对innodb数据库的所有操作。它是用来做数据库的crash recover的,是保证数据安全的重功能。InnoDD存储引擎中,默认有2个日志文件(ib_logfile0,ib_logfile1)

3.2 undo log日志文件 | 回滚段(undo log seg)

  对记录做变更操作时不仅会产生redo记录,也会产生undo记录。

  undo log只记录变更前的旧数据,undo记录默认记录到系统表空间(ibdata1), mysql5.6之后可以设置单独undo 表空间。

猜你喜欢

转载自www.cnblogs.com/wandering-mind/p/12463011.html