mysql文件

一、简介

我们在学习和使用mysql中,不可避免的涉及到与mysql相关的文件打交道,了解mysql文件更有助于理解mysql的运行原理和日常使用。mysql的文件主要包括几种类型:

  • 配置文件:指定一些mysql运行的参数,比如在哪可以找到数据库文件,内存结构大小等;

  • 日志文件:用来记录影响mysql实例的文件,比如错误日志、二进制日志、慢查询日志、查询日志等;

  • socket文件:当用Unix域套接字方式进行连接时需要的文件;

  • pid文件:mysql实例的进程id文件;

  • mysql表结构文件:用来存放mysql表结构定义文件;

  • 存储引擎文件:存储记录和索引等数据;

二、配置文件

使用下面的命令可以查看mysql的配置文件:

# 左边的优先加载,如果都没有就使用代码中的默认配置
$ mysql --help|grep cnf
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf 
                      order of preference, my.cnf, $MYSQL_TCP_PORT,

在mysql中有动态参数和静态参数,动态参数可以再mysql运行期间修改,比如事务的隔离级别。查看修改配置:

# 查看全局参数
show global variables;
show global variables like '%name%';
# 修改全局参数
set global read_buffer_size=8192;
# 查看当前会话参数
show variables;
show variables like '%name%';
# 修改当前会话参数
set read_buffer_size=8192;

三、日志文件

日志文件记录了影响mysql数据库的各种类型的活动。mysql数据库常见的日志文件有:错误日志、二进制日志、慢查询日志和查询日志。

  • 错误日志:记录mysql启动、运行、关闭过程。使用show variables like '%log_error%';查看日志位置;、

  • 慢查询日志:记录查询慢的语句,帮助定位可能存在问题以及可以优化的SQL,通过设置一个值,大于这个值的sql语句就会被记录到慢查询日志中;

  • 查询日志:记录了所有对mysql请求的信息,无论这些请求是否得到了正确执行。查看查询日志是否打开和位置:

    > show variables like '%general_log%';
    +------------------+-----------------+
    | Variable_name    | Value           |
    +------------------+-----------------+
    | general_log      | OFF             |
    | general_log_file | raspberrypi.log |
    +------------------+-----------------+
    2 rows in set (0.004 sec)

    和慢查询日志一样,可以设置log_output=TABLE将查询记录记录在mysql.general_log表中;

  • 二进制日志:记录了对mysql数据库执行的所有更改操作,但不包括select和show这类操作,因为这类操作并没有对mysql进行修改,若操作本身没有导致数据库发生变化可能也会写入二进制文件,二进制日志可以用于数据的恢复、复制和审计;

四、Socket文件

在UNIX系统下本地连接mysql可以采用UNIX域套接字方式。这种方式需要一个套接字(socket)文件。

> show variables like 'socket';
+---------------+-------------------------+
| Variable_name | Value                   |
+---------------+-------------------------+
| socket        | /run/mysqld/mysqld.sock |
+---------------+-------------------------+

五、pid文件

当mysql实例启动时,会将自己的进程id写入一个文件中,即pid文件。

> show variables like '%pid_file%';
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| pid_file      | /run/mysqld/mysqld.pid |
+---------------+------------------------+

六、表结构定义文件

mysql数据存储是根据表划分的,mysql对于每一张表都有一个frm为后缀的文件来存储表结构定义。frm文件还用来存放视图的定义,如用户创建了一个v_a视图,那么对应地会产生一个v_a.frm的文本文件,用来记录视图的定义。

通过show variables like '%datadir%';查看表结构定义文件存储位置,下面是一个视图的表结构定义文件:

root@raspberrypi:/var/lib/mysql/test# cat v_test.frm 
TYPE=VIEW
query=select `test`.`test`.`id` AS `id`,`test`.`test`.`name` AS `name` from `test`.`test` where `test`.`test`.`id` = \'5\'
md5=d7463ae9e9d4606bcd1ea22b1836fdd4
updatable=1
algorithm=0
definer_user=wangjun
definer_host=localhost
suid=2
with_check_option=0
timestamp=2020-06-03 11:25:30
create-version=2
source=select id,name from test where id=\'5\'
client_cs_name=utf8mb4
connection_cl_name=utf8mb4_general_ci
view_body_utf8=select `test`.`test`.`id` AS `id`,`test`.`test`.`name` AS `name` from `test`.`test` where `test`.`test`.`id` = \'5\'
mariadb-version=100315

七、存储引擎文件

Last updated