作者:IT邦德
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
(Web\java\Python)工作,主要服务于生产制造
现拥有 Oracle 11g OCP/OCM、
Mysql、Oceanbase(OBCA)认证
分布式TBase\TDSQL数据库、国产达梦数据库以及红帽子认证
从业8年DBA工作,在数据库领域有丰富的经验
擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
文章目录
前言
工作中要用到MySQL,面试被问到MySQL,此篇文档讲MySQL的文件结构做了详细的阐述
一、导读
MySQL主要文件类型有如下几种:
参数文件:MySQL实例启动的时候在哪里可以找到数据库文件,
并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类型以及定义作用域。
日志文件:记录 MySQL对某种条件做出响应时候写入的文件,
包括错误日志、慢查询日志、全查询日志、二进制日志、中继日志、Redo 日志、Undo 日志
Socket文件:当用 linux 的 mysql 命令行窗口登录的时候需要的文件
Pid 文件:mysql 实例的进程文件
MySQL表结构文件:存放 MySQL表结构定义文件
存储引擎文件:记录存储引擎信息的文件。
二、参数文件
2.1 参数文件的位置
默认的参数文件为/etc/my.cnf,但是也不排除其他位置的参数文件,
具体要看启动的命令。
在 mysqld 启动的时候,可以加上--defaults-file 参数,该参数指定了参数文件的名称。
Linux中的默认位置为:/etc/my.cnf
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
三、 socket 文件
Linux 系统下 本地连接 mysql 可以采用 linux 域套接字 socket 方式 ,
需要一个套接字 socket 发文件,
可以由参数 socket控制,一般默认在/tmp 目录下,
也可以通过如下 2 种方式查看:
3.1 操作系统查找
-bash-4.1$ ps -ef | grep mysql
3.2 命令行查找
mysql> show variables like ‘socket’;
如果 socket 录 文件丢失,那么会导致不能从本地登录 mysql ,可以通过重启的方式来重新生成。
四、 pid 文件
当 mysql 实例启动的时候,会将自己的进程 id 写入一个文件中,
该文件即为 pid 文件,由参数 pid_file 控制,
默认路径位于数据目录下,可以通过以下方式查看:
mysql> show variables like '%datadir%';
mysql> show variables like 'pid_file';
五、表结构文件
innodb 包括 ibd 和 frm,当你启用了 innodb_file_per_table,表被存储在他们自己的表空间里。
mysql> show variables like 'innodb_file_per_table';
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 表的元数据
✓ 变更缓冲区
✓ 双写缓冲区
✓ 撤销日志
5.1 frm
frm为表结构文件
[root@Jeames pecvd]# strings aoi.frm
5.2 ibd
ibd为数据文件
[root@Jeames pecvd]# strings aoi.ibd
六、日志文件
日志文件记录了影响 mysql 数据库的各种类型活动,
常见的日志文件有错误日志、二进制日志、慢查询日志、全查询日志、redo 日志、undo 日志。
6.1 错误日志
错误日志对 mysql的启动、运行、关闭过程进行了记录,
mysql dba 在遇到问题时候,第一时间应该查看这个错误日志文件,
该文件不但记录了出错信息,还记录了一些警告信息以及正确信息,
这个 error 日志文件类似于 oracle 的 alert 文件,只不过默认情况下是以 error 结尾。
可以通过 show variables like 'log_error';
DBA 在遇到问题的时候,第一时间应该查看这个错误日志文件,
该文件不但记录了出错信息,还记录了一些警告信息以及正确信息,
这个 error 日志文件类似于 Oracle的 alert 文件,只不过默认情况下是以 err 结尾。
可以通过“show variables like 'log_error';”命令查看错误日志的路径。
如下所示:
6.2 全查询日志
全查询日志记录了所有对数据库请求的信息,
正确的 SQL 才会被记录下来(错误写法的 SQL 语句不会记录),
包括 show、查询 select 语句、权限不足的语句(ERROR 1044 (42000): Access denied for user)。
默认位置在变量 datadir 下,默认文件名为:主机名.log。
MySQL 的通用查询日志默认情况下是不开启的。当需要进行采样分析时手工开启:
mysql> show variables like 'general_log';
##日志开启
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 层记录的二进制日志文件。
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)进行实时同步。
6.4 慢查询日志
当查询超过一定时间没有返回结果的时候,才会记录进慢查询日志。
• 慢查询日志可以帮助 DBA 找出执行效率缓慢的 SQL 语句,为数据库优化工作提供帮助。
• 慢查询日志默认是不开启的,建议开启慢查询日志。
• 当需要进行采样分析时手工开启。
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”,默认存放在表空间所在目录。
查看参数设置:show variables like ‘innodb%log%’;
6.6 undo
8.0 中的 Undo 日志
开始从 L SQL 理 层面非常方便的管理 Undo 表空间,MySQL 服务启动后,
默认有两个 Undo 表空间:undo01,undo02。这两个默认产生的 Undo 表空间文件,
不能在 SQL 层面来管理。直接删除会被 MySQL 阻止。
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 库恢复。
大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系方式👇🏻👇🏻👇🏻
版权归原作者 IT邦德 所有, 如有侵权,请联系我们删除。