MySQL—MySQL架构

news/2024/9/23 9:22:58/

MySQL—MySQL架构

MySQL逻辑架构图如下:

MySQL逻辑架构图

  • Connectors连接器:负责跟客户端建立连接;
  • Management Serveices & Utilities系统管理和控制工具
  • Connection Pool连接池:管理用户连接,监听并接收连接的请求,转发所有连接的请求到线程管理模块;
  • SQL Interface SQL接口:接受用户的SQL命令,并且返回SQL执行结果;
  • Parser解析器:SQL传递到解析器的时候会被解析器验证和解析;
  • Optimizer查询优化器:SQL语句在查询之前会使用查询优化器对查询进行优化,explain语句查看的SQL语句执行计划,就是由此优化器生成;
  • Cache和Buffer查询缓存:在MySQL5.7中包含缓存组件,在MySQL8中移除了;
  • Pluggable Storage Engines存储引擎:存储引擎就是存取数据、建立与更新索引、查询数据等技术的实现方法。

MySQL日志文件

MySQL是通过文件系统对数据索引后进行存储的,MySQL从物理结构上可以分为日志文件和数据及索引文件。MySQL在Linux中的数据索引文件和日志文件通常放在/var/lib/mysql目录下。MySQL通过日志记录了数据库操作信息和错误信息。

常用日志文件如下:

  1. 错误日志:/var/log/mysql-error.log
  2. 二进制日志:/var/lib/mysql/mysql-bin
  3. 查询日志: general_query.log
  4. 慢查询日志: slow_query_log.log
  5. 事务重做日志: redo log
  6. 中继日志: relay log
  7. undo log

可以通过以下命令,来查看日志使用信息:

show variables like 'log_%';

日志使用信息

错误日志:error log

  • 默认开启,记录运行过程中所有严重的错误信息,及每次启动和关闭的详细信息;
  • 通过log_error和log_warnings配置
    • log_error:指定存储位置;
    • log_warnings:配置警告信息级别
      • log_warnings= 0:不记录告警日志
      • log_warnings= 1:告警信息写入错误日志
      • log_warnings 大于 1:表示各类告警信息,例如:有关网络故障的信息和重新连接信息写入错误日志。
配置
vim /etc/my.cnf

添加如下内容:

错误日志配置

# 错误日志
log_error=/var/log/mysql-error.log
log_warnings=2

重启MySQL

systemctl restart mysqld

配置成功

二进制日志bin log

二进制日志bin log默认是关闭的,需要通过配置来开启,可以记录数据库所有的DDL语句和DML语句,不包括DQL语句。

binlog主要用于实现mysql主从复制、数据备份、数据恢复。

配置中mysql-bin是binlog日志文件的basename,binlog日志文件的完整名称: mysql-bin.000001。

server_id=1
log-bin=mysql-bin

通用查询日志general query log

默认关闭,由于通用查询日志会记录用户的所有操作,其中还包含增删查改等信息,在并发操作大的环境下会产生大量的信息从而导致不必要的磁盘IO,会影响MySQL的性能。如果不是为了调试数据库,不建议开启查询日志。

查询日志查看

#启动开关
general_log={ON|OFF}
#日志文件变量,而general_log_file如果没有指定,默认名是host_name.log
general_log_file=/var/lib/mysql/机器host_name.log

慢查询日志slow query log

默认关闭,通过以下设置开启。记录执行时间超过long_query_time秒的所有查询,便于收集查询时间比较长的SQL语句。

开启配置:

#开启慢查询日志
slow_query_log=ON
# 慢查询的阈值,单位秒
long_query_time=10
#日志记录文件
#如果没有给出fi1e_name值,默认为主机名,后缀为-s1ow.log。
#如果给出了文件名,但不是绝对路径名,文件则写入数据目录。
s1ow_query_log_file=slow_query_log.1og

查看阈值:

show global status 1ike '%s1ow_queries%';
show variables like '%slow_query%' ;
show variab1es like 'long_query_time%';

MySQL数据文件

查看MySQL数据文件

show variables like  '%datadir%';

查看MySQL数据文件

我之前建立了一个sjdwz_test库,库中有表tab_test使用的是是InnoDB存储引擎,有表myisam_tab使用的是MyISAM存储引擎。

sjdwz_test库

进入到刚才输出的数据文件目录:可以看到有一个sjdwz_test(库名)为名字的文件夹:

截图

进入后,查看文件:

查看文件

说明

ibdata文件:使用系统表空间存储表数据和索引信息,所有表共同使用一个或者多个ibdata文件。

ibdata文件

  • InnonDB存储引擎的数据文件
    • 表名.frm文件:主要存放与表相关的元数据信息,包括:表结构的定义信息
    • 表名.ibd文件:一张表一个ibd文件,存储表数据和索引信息;
  • MyISAM存储引擎的数据文件
    • 表名.frm文件:主要存放与表相关的元数据信息,包括:表结构的定义信息
    • 表名.myd文件:主要存放数据;
    • 表名.myi文件:主要存放索引。

http://www.ppmy.cn/news/1425639.html

相关文章

服务器清理挖矿问题

top -c ps -ef netstat -antp # 查所有端口链接 ls -al /proc/$PID/exe # 查执行文件 kill -9 $PID # 杀进程 // 查文件 /usr/lib/systemd/system /usr/lib/systemd/system/multi-user.target.wants /etc/rc.local /etc/inittab /etc/rc0.d/ /etc/rc1.d/ /etc/rc2.d/…

会议室预约小程序开源版开发

会议室预约小程序开源版开发 支持设置免费预约和付费预约、积分兑换商城、积分签到等 会议室类目,提供多种类型和设施的会议室选择,满足不同会议需求。 预约日历,展示会议室预约情况,方便用户选择空闲时段。 预约记录&#xff0…

深入剖析跨境电商平台风控机制,探索测评安全与稳定的秘诀

在跨境电商测评市场鱼龙混杂的当下,测评过程中可能隐藏的陷阱保持高度警觉。多年的测评经验告诉我们,选择一个适合的测评系统对于项目的成功至关重要。近年来,测评技术如雨后春笋般涌现,市场上涌现出众多测评系统,覆盖…

MacOS Python版本管理(pyenv)

1. 通过 homebrew 安装 pyenv brew update brew install pyenv 2. 修改 zsh profile 否则通过pyenv切换python版本会不生效 # 编辑 .zshrc or ~/.bash_profile vim ~/.zshrc# 在配置下面增加 export PYENV_ROOT"$HOME/.pyenv" export PATH"$PYENV_ROOT/shi…

Qt实现XYModem协议(七)

1 概述 XMODEM协议是一种使用拨号调制解调器的个人计算机通信中广泛使用的异步文件运输协议。这种协议以128字节块的形式传输数据,并且每个块都使用一个校验和过程来进行错误检测。使用循环冗余校验的与XMODEM相应的一种协议称为XMODEM-CRC。还有一种是XMODEM-1K&am…

linux捕获特定的信号并打印堆栈信息

在Linux中,你可以使用gcore命令生成核心转储文件,然后使用gdb来分析这个文件,打印出堆栈信息。 首先,你需要设置一个信号处理器来捕获特定的信号,并在处理器中调用gcore命令来生成核心转储文件。 以下是一个简单的示…

Android RecyclerView的LayoutManager配置

RecyclerView的item布局方式依赖于其配置的布局管理器。不同的布局管理器可以实现不同的界面效果。 LayoutManager介绍 RecyclerView可以通过setLayoutManager设置布局管理器,该方法的源码如下: /*** Set the {link LayoutManager} that this RecyclerV…

力扣打卡第一天

101. 对称二叉树 C: class Solution { public:bool isSymmetric(TreeNode* root) {return check(root->left,root->right);}bool check(TreeNode *p,TreeNode *q){ /**定义check方法用来检查两棵树是否是镜像的*/if (!p && !q) return true; /* 如…