二、数据data目录下结构
通过命令show variables like 'datadir'查询MySQL实例的数据目录,如下所示:
mysql> show variables like 'datadir';
+---------------+-----------------------------------+
| Variable_name | Value |
+---------------+-----------------------------------+
| datadir | /home/MySQL5.7/mysql-5.7.35/data/ |
+---------------+-----------------------------------+
1 row in set (0.04 sec)
以下显示MySQL的数据目录的一级树形文件,即:data目录的树形文件。
mysql> SET @@global.slow_query_log=ON;
Query OK, 0 rows affected (0.01 sec)
mysql> show variables like 'slow_query_log';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | ON |
+----------------+-------+
1 row in set (0.06 sec)
通过执行 select sleep(11);的SQL语句,来查看慢查询日志。也可以通过设置log_output参数决定慢查询日志的输出格式,默认FILE。设置为TABLE时,通过mysql.slow_log表查看。
[root@488c1daa7967 data]# cat 488c1daa7967-slow.log
/home/MySQL5.7/mysql-5.7.35/bin/mysqld, Version: 5.7.35 (MySQL Community Server (GPL)). started with:
Tcp port: 3306 Unix socket: /tmp/mysql.sock
Time Id Command Argument
# Time: 2022-07-06T09:41:31.714129Z
# User@Host: root[root] @ gateway [172.17.0.1] Id: 5
# Query_time: 11.003121 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
use test_mysql;
SET timestamp=1657100491;
select sleep(11);
[root@488c1daa7967 data]#
关于慢查询的相关参数,如下表所示:
[root@488c1daa7967 data]# tail -f 488c1daa7967.log
/home/MySQL5.7/mysql-5.7.35/bin/mysqld, Version: 5.7.35 (MySQL Community Server (GPL)). started with:
Tcp port: 3306 Unix socket: /tmp/mysql.sock
Time Id Command Argument
2022-07-07T01:56:54.299087Z 8 Query show variables like 'general_log'
2022-07-07T02:01:43.813587Z 8 Query show variables like 'general_log'
2022-07-07T02:01:58.306156Z 9 Connect root@gateway on using TCP/IP
2022-07-07T02:01:58.308760Z 9 Query SET NAMES utf8mb4
2022-07-07T02:01:58.310713Z 9 Init DB mysql
2022-07-07T02:01:58.312276Z 9 Init DB test_mysql
2022-07-07T02:01:58.317903Z 9 Query BEGIN
2022-07-07T02:01:59.674504Z 9 Query COMMIT
4. 二进制日志文件(binary log)
二进制日志文件记录所有对MySQL数据库执行更改的操作,但不包括SELECT和SHOW命令。注意,若更新语句本身并没有导致数据变化时,该操作也会写入二进制日志文件。
关于二进制日志的相关参数,如下表所示。通过show global status like 'binlog_cache%'查询二进制日志缓冲的使用情况。Binlog_cache_disk_use表示使用临时文件写二进制日志的次数,Binlog_cache_use表示使用缓冲写二进制日志的次数,两者的比较可以看出binlog_cache_size设置值是否合理。
五、套接字文件
连接MySQL实例使用套接字方式,则需要一个套接字文件,通过show variables like 'socket';查询套接字文件路径,默认在/tmp目录下。
mysql> show variables like 'socket';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| socket | /tmp/mysql.sock |
+---------------+-----------------+
1 row in set (0.09 sec)
六、PID文件
存放MySQL实例的进程ID文件,实例启动时,生成一个进程ID文件。通过show variables like 'pid_file'查询PID文件路径,默认在数据库目录下。
mysql> show variables like 'pid_file';
+---------------+------------------+
| Variable_name | Value |
+---------------+------------------+
| pid_file | 488c1daa7967.pid |
+---------------+------------------+
1 row in set (0.08 sec)
七、表结构文件
MySQL无论采用哪种存储引擎的插件,每个表都对应一个*.frm结尾的文件,该文件存储了该表的表结构。注意,frm还可以存放视图的定义。
通过参数show variables like 'innodb_data_file_path'可以设置,也可以多个文件组成一个表空间,同时设置文件属性。该参数是静态参数,实例运行期间不能设置,只有启动前配置。
mysql> show variables like 'innodb_data_file_path';
+-----------------------+------------------------+
| Variable_name | Value |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:12M:autoextend |
+-----------------------+------------------------+
1 row in set (0.22 sec)
参数show variables like 'innodb_file_per_table'控制是否开启为每个表建立独立表空间,默认开启ON,则表空间为:表名.ibd。注意:独立表空间存储:表数据、索引、插入缓冲的BITMAP信息,其他存储在默认共享表空间中。
mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set (0.07 sec)
2. 重做日志文件(redo log)
重做日志文件记录了事务日志,称为InnoDB存储引擎的日志文件。目的是当MySQL宕机时,使用重做日志文件可以恢复宕机之前的数据,实现数据库ACID中的持久性。