前言
mysql这块,是阅读了《MySQL技术内幕:InnoDB存储引擎(第2版)》,再参照一些博文整理的阅读笔记。
概述
数据库系统和文件系统在特点上是有很大区别的,但数据库系统是在文件系统的基础上发展起来的,它对数据的管理更有效应。我们应该去了解数据库的各种类型的文件。下面的说明限于mysql和innodb存储引擎,其它数据库或引擎可能有不小的区别。主要可以分为下面几类
- 参数文件
- 日志文件
- socket文件
- pid文件
- mysql表结构文件
- innodb存储引擎文件
参数文件
my.cnf是我们经常会去修改的文件,修改配置可以让mysql更好地为我们提供服务。
mysql启动时会去启动my.cnf文件,可以通过mysql --help | grep my.cnf查看读取顺序,读取的是他们的并集,如果配置项有冲突的话,会以最后一个一个配置文件为准
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
根据使用配置上的不同,我们可以分为
- 静态参数,即只能在配置文件中修改,而不能在运行时修改
- 动态参数,在运行时可以修改,通过 SET [global|session] key=value的方法设置全局的或者会话级别的
我们可能通过SHOW VARIABLES key来查看对应的值,动态参数在数据库重启后是会失效的,因为重启会去读取配置文件。
日志文件
日志文件记录了各种影响数据库的活动,可以帮助我们对数据库进行诊断,从而更好地进行优化。
常用的日志文件有:
-
- 错误日志
- 慢查询日志
- 查询日志
- 二进制日志
下面对这些日志进行分析
- 错误日志
- 该日志记录了数据库在启动、运行、关闭时的所有错误信息和部分警告、正确信息
- 我们可以修改配置:log_error=/var/log/mysqld.log(默认记录在data/主机名.error文件中)
- 如果数据库启动没有成功,我们可以去配置文件中找到相应的错误日志目录,再对日志进行分析。如果启动成功,可能通过SHOW VARIABLES LIKE 'log-error'找到文件进行分析
- 慢查询日志
- 该日志记录了超过了运行阈值时间的SQL,从而进行SQL语句层面的优化
- 我们可以设置:slow_query_log=1(0表示不开启,1表示开始,默认不开启),long_query_time=long_query_time(设置阈值时间,Mysql5.1后,以微秒为时间单位),log_queries_not_using_indexes=1(是否记录未使用查询,0表示不记录,1表示记录)
- SHOW VARIABLES LIKE 'slow_query_log_file',我们可以找到慢查询日志文件进行分析
- 除了文件,也可以通过表的方法进行记录,便于查询和分析
- 查询日志
- 该日志记录了对mysql数据库请求的信息、查询
- 我们可以设置:general_log=1(0表示不开启,1表示开始,默认不开户),log_output=FILE,TABLE(设置通用日志的输出格式为文件和表)
- SHOW VARIABLES LIKE 'general_log_file'',我们可以找到慢查询日志文件进行分析
- 二进制日志
- 该日志记录了对mysql数据库进行更改了所有操作(包括修改操作但没有影响数据库的操作)
-
我们可以设置:server-id = 1(集群中节点id),log-bin = binlog(文件名,默认在dataDir下),log-bin-index = binlog.index(二进制的索引文件)
- SHOW VARIABLES LIKE 'log_bin',我们可以找到慢查询日志文件进行分析
- 这里配置比较多,max_binlog_size->单个配置文件最大大小,binlog_cache_size->单个事务的缓存大小,innodb_support_xa保证二进行日志与存储引擎同步,log_salve_update把master的二进制文件写到自己(slave)的二进制文件中
- bin_format有三种格式,STATEMENT记录的是逻辑语句(5.1以前基于这种格式会存在主从不一致的问题),ROW会记录表行的更改情况,MIX复合模式。
- 用mysqlbinlog查看二进制文件
套接字文件
mysql提供TCP/IP和socket两种方式,mysql.sock文件就是用于本地socket连接使用。SHOW VARIABLES LIKE 'socket',查看文件路径。
pid文件
数据库实例启动,会把自己的进程id写入到这个文件。
SHOW VARIABLES LIKE 'pid_file',查看文件路径。
表结构定义文件
参考链接
无