想学明白MySQL,得先捋一捋核心的文件
「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战 (opens new window)
摘要:工作中要用到MySQL,面试被问到MySQL,此文对MySQL的文件结构做了详细的阐述
# 🍁 1.简介
MySQL主要文件类型有如下几种:
1.参数文件:MySQL实例启动的时候在哪里可以找到数据库文件,
并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类型以及定义作用域。
2.日志文件:记录 MySQL对某种条件做出响应时候写入的文件,
包括错误日志、慢查询日志、全查询日志、二进制日志、中继日志、Redo 日志、Undo 日志
3.Socket文件:当用 linux 的 mysql 命令行窗口登录的时候需要的文件
4.Pid 文件:mysql 实例的进程文件
5.MySQL表结构文件:存放 MySQL表结构定义文件
6.存储引擎文件:记录存储引擎信息的文件。
复制代码
2
3
4
5
6
7
8
9
10
# 🍁 2. 参数文件
# ✨2.1 参数文件的位置
默认的参数文件为/etc/my.cnf,但是也不排除其他位置的参数文件,具体要看启动的命令。
在 mysqld 启动的时候,可以加上--defaults-file 参数,
该参数指定了参数文件的名称。 Linux中的默认位置为:/etc/my.cnf
复制代码
2
3
4
# ✨2.2 参数文件内容
[mysqld]
#basedir=/usr/local/mysql
basedir=/usr/local/mysql5730
datadir=/usr/local/mysql/data
port=3306
#socket=/tmp/mysql.sock
log-error=/usr/local/mysql/data/log.err
server_id=55623306
log-bin
skip-name-resolve
character_set_server=utf8mb4
复制代码
2
3
4
5
6
7
8
9
10
11
12
# 🍁 3.socket 文件
Linux 系统下 本地连接 mysql 可以采用 linux 域套接字 socket 方式 ,
需要一个套接字 socket 发文件,
可以由参数 socket控制,一般默认在/tmp 目录下,
也可以通过如下 2 种方式查看:
复制代码
2
3
4
5
# ✨3.1 操作系统查找
-bash-4.1$ ps -ef | grep mysql
# ✨3.2 命令行查找
mysql> show variables like ‘socket’;
如果 socket 录 文件丢失,那么会导致不能从本地登录 mysql ,可以通过重启的方式来重新生成。
# 🍁4.pid 文件
当 mysql 实例启动的时候,会将自己的进程 id 写入一个文件中,
该文件即为 pid 文件,由参数 pid_file 控制,
默认路径位于数据目录下,可以通过以下方式查看:
mysql> show variables like '%datadir%';
mysql> show variables like 'pid_file';
复制代码
2
3
4
5
6
# 🍁5.表结构文件
innodb_data_file_path 用来指定 innodb tablespace 文件,
如果我们不在 My.cnf 文件中指定innodb_data_home_dir 和 innodb_data_file_path
那么默认会在 datadir 目录下创建 ibdata1 作为 innodb tablespace。
当你启用了 innodb_file_per_table,表被存储在他们自己的表空间里,
但是共享表空间仍然在存储其它的 InnoDB 内部数据:
✓ 数据字典,也就是 InnoDB 表的元数据
✓ 变更缓冲区
✓ 双写缓冲区
✓ 撤销日志
复制代码
2
3
4
5
6
7
8
9
10
# ✨5.1 frm
frm为表结构文件
[root@Jeames pecvd]# strings aoi.frm
复制代码
2
3
# ✨5.2 ibd
ibd为数据文件
[root@Jeames pecvd]# strings aoi.ibd
复制代码
2
3
# 🍁6.日志文件
日志文件记录了影响 mysql 数据库的各种类型活动,
常见的日志文件有:
错误日志
二进制日志
慢查询日志
全查询日志
redo 日志
undo 日志
复制代码
2
3
4
5
6
7
8
9
# ✨6.1 错误日志
错误日志对 mysql的启动、运行、关闭过程进行了记录,
mysql dba 在遇到问题时候,第一时间应该查看这个错误日志文件,
该文件不但记录了出错信息,还记录了一些警告信息以及正确信息,
这个 error 日志文件类似于 oracle 的 alert 文件,只不过默认情况下是以 error 结尾。
可以通过 show variables like 'log_error';
DBA 在遇到问题的时候,第一时间应该查看这个错误日志文件,
该文件不但记录了出错信息,还记录了一些警告信息以及正确信息,
这个 error 日志文件类似于 Oracle的 alert 文件,只不过默认情况下是以 err 结尾。
可以通过“show variables like 'log_error';”命令查看错误日志的路径。
如下所示:
复制代码
2
3
4
5
6
7
8
9
10
11
# ✨6.2 全查询日志
全查询日志记录了所有对数据库请求的信息,
正确的 SQL 才会被记录下来(错误写法的 SQL 语句不会记录),
包括 show、查询 select 语句、权限不足的语句(ERROR 1044 (42000): Access denied for user)。
默认位置在变量 datadir 下,默认文件名为:主机名.log。
MySQL 的通用查询日志默认情况下是不开启的。当需要进行采样分析时手工开启:
mysql> show variables like 'general_log';
复制代码
2
3
4
5
6
7
##日志开启 mysql> SET GLOBAL general_log=1; mysql> show variables like 'general_log'; 默认名称为:变量 datadir 下:主机名.log
# ✨6.3 二进制日志Binlog
Binlog 是 MySQL 中一个很重要的日志,记录了对数据库进行变更的操作,
但是不包括 select操作以及 show 操作,因为这类操作对数据库本身没有没有修改。
如果想记录 select和 show 的话,那就需要开启全查询日志。
另外 binlog 还包括了执行数据库更改操作时间和执行时间等信息。
binlog 是 MySQL Server 层记录的二进制日志文件。
复制代码
2
3
4
5
6
mysql> show variables like ‘%log_bin%’;
mysql> flush logs; --滚动日志 mysql> show binary logs;
二进制的主要作用有如下 2 个:
(1 )恢复 recovery 。某些数据的恢复需要二进制日志,
在全库文件恢复后,可以在此基础上通过二进制日志进行
point-to-time 的恢复(mysqldump 全量恢复+binlog增量恢复)。
(2 )复制(replication )。其原理和恢复类似,
通过复制和执行二进制日志使得一台远程的 mysql数据库(slave)
于一台 mysql 数据库(master)进行实时同步。
复制代码
2
3
4
5
6
7
8
# ✨6.4 慢查询日志
当查询超过一定时间没有返回结果的时候,才会记录进慢查询日志。
• 慢查询日志可以帮助 DBA 找出执行效率缓慢的 SQL 语句,为数据库优化工作提供帮助。
• 慢查询日志默认是不开启的,建议开启慢查询日志。
• 当需要进行采样分析时手工开启。
复制代码
2
3
4
5
mysql> show variables like ‘%long_query_time%’;
慢查询日志开启方法如下: mysql> show variables like ‘%slow_%’;
mysql> set global slow_query_log=1; mysql> show variables like ‘%slow_%’;
# ✨6.5 Redo
记录 InnoDB 等支持事务的存储引擎执行事务时产生的日志。
事务型存储引擎用于保证原子性、一致性、隔离性和持久性。
其变更数据不会立即写到数据文件中,而是写到事务日志中。
事务日志文件名为“ib_logfile0”和“ib_logfile1”,默认存放在表空间所在目录。
复制代码
2
3
4
5
查看参数设置:show variables like ‘innodb%log%’;
# ✨6.6 undo
8.0 中的 Undo 日志
开始从 L SQL 理 层面非常方便的管理 Undo 表空间,
MySQL 服务启动后, 默认有两个 Undo 表空间:undo01,undo02。
这两个默认产生的 Undo 表空间文件,
不能在 SQL 层面来管理。直接删除会被 MySQL 阻止。
复制代码
2
3
4
5
6
mysql> select name from information_schema.innodb_tablespaces where space_type='Undo';
undo表空间是不能删除的 mysql> drop undo tablespace innodb_undo_001; mysql> show errors;
# ✨6.7 中继日志
从主服务器的二进制日志文件中复制而来的事件,
并保存为二进制的日志文件。
中继日志也是二进制日志,用来给 slave 库恢复。
复制代码
2
3
4
相关推荐阅读: MySQL8.0新特性抢先看,性能又双叒提升了 (opens new window) MySQL武林秘籍,SQL学废必过考试 (opens new window) Linux7.6源码安装Mysql8 (opens new window) Oracle巡检脚本大全,服务器可直接部署 (opens new window) MySQL root密码忘记找回妙招 (opens new window) 监控神器Zabbix,从部署到应用 (opens new window) Oracle监听日志清除 (opens new window)
大家可以点赞、收藏、关注、评论我啦 、有数据库相关的问题随时联系我或交流哟~!
作者:IT邦德 链接:https://juejin.cn/post/7066210255767601188 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。