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) 查看参数
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 表空间。