MySQL Server体系架构自顶向下大致可以分为以下四层:
网络连接层其实就是我们的客户端,目前支持各种主流的编程语言如Java、C、Python等,它们通过各自的API与MySQL建立连接和通信。
服务层是MySQL的核心,主要包括连接池、管理工具、SQL接口、解析器、查询优化器、缓存六大部分。
存储引擎负责存储和提取MySQL中的数据,与底层文件系统进行交互。
MySQL中的存储引擎是插件式,服务层的SQL执行引擎通过存储引擎接口与具体的存储引擎进行通信,接口屏蔽了不同存储引擎之间的差异(面向接口编程实现解耦)。
MySQL支持很多的存储引擎,各有各的特点与使用场景,最常用的是InnoDB和MyISAM,其中MySQL默认的存储引擎为InnoDB,
系统文件层负责将数据和日志存储在文件系统上,与存储引擎层进行交互。主要包括数据文件、日志文件、配置文件、pid文件、Socket文件等。
错误日志(Error Log):记录系统发生的错误,默认开启。
mysql> show variables like '%log_error%';
+---------------------+---------------------+
| Variable_name | Value |
+---------------------+---------------------+
| binlog_error_action | ABORT_SERVER |
| log_error | /var/log/mysqld.log |
| log_error_verbosity | 3 |
+---------------------+---------------------+
通用查询日志(General Query Log):记录一般的查询语句。
mysql> show variables like '%general%';
+------------------+------------------------------+
| Variable_name | Value |
+------------------+------------------------------+
| general_log | OFF |
| general_log_file | /var/lib/mysql/localhost.log |
+------------------+------------------------------+
二进制日志:记录对MySQL数据库的更改操作,并记录了发生的时间、执行时长,不记录select、show这种不修改数据库的SQL。主要用于数据恢复和主从复制。
mysql> show variables like '%log_bin%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin | OFF |
| log_bin_basename | |
| log_bin_index | |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+-------+
mysql> show variables like '%binlog%';
+--------------------------------------------+----------------------+
| Variable_name | Value |
+--------------------------------------------+----------------------+
| binlog_cache_size | 32768 |
| binlog_checksum | CRC32 |
| binlog_direct_non_transactional_updates | OFF |
| binlog_error_action | ABORT_SERVER |
| binlog_format | ROW |
| binlog_group_commit_sync_delay | 0 |
| binlog_group_commit_sync_no_delay_count | 0 |
| binlog_gtid_simple_recovery | ON |
| binlog_max_flush_queue_time | 0 |
| binlog_order_commits | ON |
| binlog_row_image | FULL |
| binlog_rows_query_log_events | OFF |
| binlog_stmt_cache_size | 32768 |
| binlog_transaction_dependency_history_size | 25000 |
| binlog_transaction_dependency_tracking | COMMIT_ORDER |
| innodb_api_enable_binlog | OFF |
| innodb_locks_unsafe_for_binlog | OFF |
| log_statements_unsafe_for_binlog | ON |
| max_binlog_cache_size | 18446744073709547520 |
| max_binlog_size | 1073741824 |
| max_binlog_stmt_cache_size | 18446744073709547520 |
| sync_binlog | 1 |
+--------------------------------------------+----------------------+
show binary logs
可以用于查询二进制日志。
慢查询日志:记录所有执行时间超时的SQL语句,默认是10s。
mysql> show variables like '%slow_query%';
+---------------------+-----------------------------------+
| Variable_name | Value |
+---------------------+-----------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /var/lib/mysql/localhost-slow.log |
+---------------------+-----------------------------------+
mysql> show variables like '%long_query_time%';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
用于存放MySQL启动所需要的配置信息,如my.conf、my.ini等。
db.opt文件:记录这个数据库默认使用的字符集和校验规则。
frm文件:存储与表相关的元数据信息,包括表结构的定义信息等,每个表都有一个.frm文件。
MYD文件:MyISAM引擎专用,用于存储表的数据,每个表都有一个.MYD文件。
MYI文件:MyISAM引擎专用,用于存储表的索引,每个表都有一个.MYI文件。
ibd和ibddata文件:存放InnoDB的数据文件(包括索引)。InnoDB存储引擎有两种表空间方式:独享表空间和共享表空间。独享表空使用.ibd文件存放数据,且每一个表对应的一个.ibd文件。共享表空间使用.ibddata文件存放数据,所有表共同使用一个(或多个,可自行配置).ibddata文件。
ibdata1文件:系统表空间数据文件,存储表元数据、Undo日志等。
ib_logfile0、ib_logfile1文件:Redo log日志文件。
pid文件是mysqld应用程序在linux环境下的一个进程文件,存放自己的进程id。
socket文件也是在linux下才有的,用户在linux环境下客户端连接可以不通过TCP/IP网络而直接使用Socket来连接MySQL。
更多精彩内容关注本人公众号:架构师升级之路