暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL文件结构是什么样的

原创 SQL6080 2023-09-05
207

参数文件
告诉 MySQL 实例启动时在哪里可以找到数据库文件,并且制定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还会介绍各种参数的类型。
查看
SHOW VARIABLES LIKE '%%';
SELECT * FROM GLOBAL_VARIABLES
日志文件
用来记录 MySQL 实例对某种条件作出响应时写入的文件。
错误日志 (error log)
对 MySQL 的启动、运行、关闭过程进行了记录。MySQL DBA 在遇到问题时应该首先查看该文件。
参数:
log_error
慢查询日志 (slow query log)
慢查询日志可帮助 DBA 定位可能存在的问题的 SQL 语句,从而进行 SQL 语句层面的优化
参数:
log_slow_queries:开启慢查询日志
log_output:慢查询输出格式 FILE/TABLE
long_query_time:慢查询时间
log_queries_not_using_indexes:记录没有使用索引的语句
long_query_io:记录超过指定逻辑 I/O 次数的SQL 语句
long_query_type
0:不将 SQL 语句记录到 slow log
1:表示根据运行时间将 SQL 语句记录到 slow log
2:表示根据逻辑 I/O 次数将 SQL 语句记录到 slow log
3:表示根据运行时间及逻辑 I/O 次数将 SQL 语句记录到 slow log
查看:
select slow_log
slow_log 使用的是 CSV 引擎,对大数据量下的查询效率可能不高。可以转换到 MyISAM,并在 start_time 列上添加索引进一步提高查询效率。
查询日志 (log)
记录了所有对 MySQL 数据库请求的信息,无论这些请求是否得到了正确的执行。
二进制日志 (binlog)
记录了对 MySQL 数据库执行更改的所有操作,但是不包括 SELECT 和 SHOW 这类操作。
作用:
恢复(recovery):某些数据的恢复需要二进制日志
复制(replication):其原理与恢复类似,通过复制和执行二进制日志使一台远程的 MySQL 数据库与一台 MySQL 数据库进行实时同步。
审计(audit):永和可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入的攻击
参数:
log-bin[=name]:启用二进制日志。默认二进制日志文件名为主机名,后缀名为二进制日志的序列号,所在路径为数据库所在的目录。
max_binlog_size:指定了单个二进制日志文件的最大值,如果超过该值,则产生二进制日志文件,后缀名 +1,默认大小为 1G。
binlog_cache_size:binlog 缓冲的大小由 binlog_cache_size 决定,默认大小为 32K。binlog_cache_size 是基于会话的,如够用时会把缓冲日志写入一个临时文件中。通过 SHOW GLOBAL STATUS 命令查看 binlog_cache_use(使用缓冲写二进制日志的次数)、binlog_cache_disk_use(记录使用临时文件写二进制日志的次数) 的状态,判断是否合适
sync_binlog=[N]:表示每写缓冲多少次就同步到磁盘。如果将 N 设为 1,则写操作不使用操作系统的缓冲来写二进制日志。
binlog-do-db:表示需要写入哪些库的日志
binlog-ignore-db:表示需要忽略哪些库的日志
log-slave-update:如果当前数据库是复制中的 slave 角色,则它不会从 master 取得并执行的二进制日志写入自己的二进制日志文件中去。如果需要,则需要设置。
binlog_format:
STATEMENT:二进制日志文件记录的是日志的逻辑 SQL 语句。
ROW:记录表的更改情况。
MIXED:MySQL 默认采用 STATEMENT 格式进行二进制日志文件的记录,但是在一些情况下会使用 ROW 格式
NDB
使用 UUID()、USER()、CURRENT_USER()、FOUND_ROWS()、ROW_COUNT() 等不确定函数。
使用了 INSERT DELAY 语句
使用了用户定义函数(UDF)
使用了临时表
socket 文件
当用 UNIX 域套接字方式进行连接时需要的文件。套接字文件可由 socket 控制。一般在 /tmp 目录下,名为 mysql.sock。
pid 文件
MySQL 实例的进程 ID 文件。
参数
pid_file:默认为主机名.pid
MySQL 表结构文件
用来存放 MySQL 表结构定义文件,每个表都会有与之对应的文件。frm 还用来存放视图的定义,该文件是文本文件,可以直接使用 cat 命令进行查看。
存储引擎文件
因为 MySQL 表存储引擎的关系,每个存储引擎都会有自己的文件来保存各种数据。这些存储引擎真正存储了记录和索引等数据。
表空间文件
由于设置参数 innodb_file_per_table=ON,因此产生了单独的 .ibd 独立表空间文件。这些单独的表空间存储该表的数据、索引和插入缓冲 BITMAP 等信息,其余信息如回滚信息、插入缓冲索引页、系统事务信息、二次写缓冲等还是存放在默认原来的共享表空间中。
重做日志文件
在 InnoDB 存储引擎目录下会有两个名为 ib_logfile0 和 ib_logfile1 的文件。每个 InnoDB 存储引擎至少有 1 个重做日志文件组,每个文件组下至少有 2 个重做日志文件。在日志组中每个重做日志文件的大小一致,并以循环写入的方式运行。
参数:
innodb_log_file_size:指定每个重做日志文件的大小
innodb_log_files_in_group:指定了日志文件组中重做日志文件的数量,默认为 2
innodb_mirrored_log_groups:指定了日志镜像文件组的数量,默认为 1
innodb_log_group_home_dir:指定了日志文件组所在路径,默认为 ./,表示在 MySQL 数据库的数据目录下。
和 binlog 的区别:
记录的范围不同:二进制日志会记录所有与 MySQL 数据库有关的日志记录,而 InnoDB 存储引擎的重做日志只记录有关该存储引擎本身的事务日志。
记录的内容不同:无论用户将二进制日志的记录格式设为什么,其记录的都是关于一个事物的具体操作内容,即该日志的逻辑日志。而 InnoDB 存储引擎的重做日志文件记录的是关于每个页的更改的物理情况。
写入的时间不同:二进制日志文件仅在事务提交前提交,即只写磁盘一次,不论这是该事务多大。而在事务进行的过程中,却不断有重做日志条目被写入到重做日志文件中。
innodb_flush_log_zt_trx_commit:表示在提交操作时,处理重做日志的方式
0:当提交事务时,并不将事务的重做日志写入磁盘上的日志文件,而是等待主线程每秒的刷新。
1:在执行 commit 时,将重做日志缓冲同步写到磁盘,即伴有 fsync 的调用
2:将重做日志异步写到磁盘,即写到文件系统的缓存中。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论