浅谈MySQL(四)-文件

MySQL数据库包含各种类型的文件,有以下这些:

参数文件:告诉MySQL实例启动时在哪里找到数据库文件,可以指定某些初始化参数……

日志文件:用来记录MySQL实例对某些条件做出响应时写入的文件,如错误日志……

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

pid文件:MySQL实例的进程ID文件

MySQL表结构文件:用来存放MySQL表结构定义文件

存储引擎文件:因为MySQL表存储引擎的关系,每个存储引擎都会有自己的文件来保存各种数据,这些存储引擎真正的存储了记录和索引等数据。

1、参数文件:

用户可以通过命令 mysql –help | grep my.cnf   来查看MySQL读取的配置文件。mysql实例在启动时如果找不到参数文件,会通过编译时的默认值启动,但是,如果MySQL实例在默认的数据库目录中找不到mysql架构,则启动会同样失败。

1.1、参数类型:MySQL数据库中的参数分为两种

a)、动态参数:实例运行中可以修改的。通过命令set  [global | session] system_var_name=expr,session表示在会话中进行修改,如autocommit;而有些参数则影响整个实例,如binlog_cache_size;而有些参数既可以在会话中又可以在整个实例内生效,如:read_buffer_size。

举例:set read_buffer_size=15584621;

select @@session.read_buffer_size\G;

select @@global.read_buffer_size\G;

通过结果可以看出,当前会话的值被改变,但是全局的值未受影响。

b)、静态参数:实例运行生命周期内不可以修改,就好像只读(only read)

2、日志文件:

1.1、日志文件记录了影响MySQL数据库的各种类型活动,常见的日志文件有:、

a)、错误日志:MySQL遇到问题时应该首先查看该文件,该文件不仅记录了所有的错误信息,也记录了一些警告信息或正确的信息。可以通过 show variables like ‘log_error’\G;来定位该文件。

b)、慢查询日志:可以定位可能存在问题的sql语句,从而进行sql语句层面的优化。例如,可以在mysql启动的时候设置一个阈值,将运行时间超过该值的sql语句都记录到慢查询日志中,该阈值可以通过long_query_time来设置,默认值为10,代表10秒。在默认情况下,数据库并不启动慢查询日志,需要用户手动开启设置这个参数为ON。

mysql> show variables like ‘long_query_time’\G;
*************************** 1. row ***************************
Variable_name: long_query_time
Value: 10.000000
1 row in set (0.00 sec)

mysql> show variables like ‘log_slow_queries’\G;
*************************** 1. row ***************************
Variable_name: log_slow_queries
Value: OFF
1 row in set (0.00 sec)

还有一个重要的参数,log_queries_not_using_inedxes,开启之后,会记录没有使用索引的sql语句,MySQL5.6.5版本新增了一个参数log_throttle_queries_not_using_indexes,用来记录每分钟允许记录到slow log的次数,默认0,不做限制。随着慢查询日志的越来越大,分析起来不方便,可以通过命令解决:

mysqldumpslow 201702-slow.log

例如:得到运行时间最长的十条sql语句:

mysqldumpslow -s al -n 10 slow.log

MySQL5.1后,将慢查询的日志放入了slow_log表中,使得更加方便和直观。

c)、二进制日志:记录了MySQL执行更改的所有操作,不包括select和show这类,若操作没有对数据库发生改变,可能会被写入二进制日志。二进制日志还记录了更改操作的时间等额外信息,总的来说有以下几种作用:

1)恢复:某些数据的恢复需要二进制日志,例如,在一个数据库全备文件恢复后,用户可以通过二进制进行point-in-time的恢复。

2)复制:原理与恢复类似,通过复制和执行二进制日志使一台远程的mysql数据库(slave或standby)与一台mysql数据库(master或primary)进行时时同步。

3)审计:用户可以通过二进制日志中的信息进行审计,判断是否有对数据库进行注入攻击。

通过配置参数log-bin[=name] 可以启动二进制日志。如果不指定name,则默认的二进制名为主机名,后缀为二进制日志的序列号,所在路径为数据库所在目录(datadir),如:

mysql> show variables like “datadir”;
+—————+—————–+
| Variable_name | Value           |
+—————+—————–+
| datadir       | /var/lib/mysql/ |
+—————+—————–+
1 row in set (0.00 sec)

mysql> system ls -lh /var/lib/mysql/
total 173M
-rw-rw—- 1 mysql mysql   56 Apr  6  2017 auto.cnf
-rw-rw—- 1 mysql mysql  76M Sep 25 17:19 ibdata1
-rw-rw—- 1 mysql mysql  48M Sep 25 17:19 ib_logfile0
-rw-rw—- 1 mysql mysql  48M Apr  6  2017 ib_logfile1
drwx—— 2 mysql mysql 4.0K Apr  6  2017 mysql
srwxrwxrwx 1 mysql mysql    0 Sep 25 17:19 mysql.sock
drwx—— 2 mysql mysql 4.0K Apr  6  2017 performance_schema
drwx—— 2 mysql mysql  16K Jul 14 16:59 test
drwx—— 2 mysql mysql  12K Jul 22 11:33 tp3

可以看出默认情况下二进制文件没有启动,需要手动指定参数来启动。

d)、表结构定义文件:因为MySQL存储引擎的体系结构关系,MySQL数据的存储是根据表进行的,每个表都会有与之对应的文件,无论何种引擎,都会有一个。frm后缀的文件,该文件记录了该表的结构定义。

当然还有一些其他的文件,这里就不做更多的解释。

你们的支持是我前进的动力,感谢阅读。

 

 

 

 

发表评论