(一)日志文件
1、错误日志
错误日志记录了MySQL Server运行过程中所有较为严重的警告和错误信息,以及MySQL Server每次启动和关闭的详细信息。在默认情况下是关闭的,若要开启该功能需要在启动时开启log-error选项,默认存放在数据目录下,以hostname.err命名,可在配置中(以下不说明均指my.cnf)加入:log-error=“D:\mysql.err”,则错误日志保存在D盘mysql.err文件中。
注:1、包括以下日志,理论上在配置文件中加入和在启动时通过命令参数加入都是可以的,但是笔者在自己电脑上测试时通过命令参数并没有起作用,且需要设置的很多时重启参数中可能会忘记加入某设置,所以建议加载my.cnf中.
2、flushlogs命令:告诉MySQL备份旧日志文件并生成新的日志文件,备份文件以“.old”结尾。
2、二进制文件
通过设置:log-bin=“存储路径及文件名”打开记录功能,会将所有修改数据库数据的Query以二进制形式记录到日志文件中,包括:Query语句,每一条Query执行的时间,消耗资源,相关事务信息等。
注:binlog是事务安全的
常用参数:
1)--max_binlog_size:设置binlog的最大存储上限
2)--binlog-do-db:需要对某个数据库记录binlog
3)--binlog-ignore-db:指定忽略某个数据库的binlog记录
注:2)和3)中数据库不是指操作的数据库,而是Query所处的数据库,例如Query在A库,此时更新B库,则指的是A库相关操作是否要记录binlog中
mysql-bin.index文件记录所有Binary Log的绝对路径
3、更新日志
自从MySQL增加了binlog功能后,就很少使用更新日志了。从5.0版本开始,MySQL已经不再支持更新日志。
4、查询日志
记录MySQL中所有的Query,可通过log=“存储路径及文件名”开启该功能。
注:由于该日志体积比较大,开启后对性能也有较大的影响,应该慎用
5、慢查询日志
记录执行时间较长的Query。通过设置log-slow-qyeries=“存储路径及文件名”开启该功能。
6、InnoDB的在线REDO日志
InnoDB的事务安全性主要是通过在线REDO日志和记录在表空间的UNDO信息来保证的。
(二)数据文件
1、.frm文件
与表相关的元数据信息,包括表结构的定义信息等。
2、.MYD文件
是MyISAM存储引擎专用的,存放MyISAM表的数据
3、.MYI文件
是MyISAM存储引擎专用的,存放MyISAM表的索引相关信息
4、.ibd文件和ibdata文件
都是用来存放InnoDB数据的文件,包括索引。
1)独享表空间:使用.ibd文件来存放数据,每个表一个.ibd文件。
其缺点:如果使用裸设备,每个表一个裸设备,可能造成裸设备数量非常大,而且不太容易控制,实现比较困难
2)共享存储表空间:使用ibdata文件,所有表共同使用一个或多个ibdata文件,可通过innodb_data_home_dir和innodb_data_file_path两个参数共同配置。
其缺点:InnoDB限制了只有最后一个ibdata文件能够配置成自动扩展类型。当我们需要添加新的ibdata文件时,只能添加在innodb_data_file_path配置的最后,而且必须重启MySQL才能完成添加工作。
这两种方式各有优缺点,但是考虑到扩展性以及可借鉴其他方式进行控制,故推荐使用.ibd文件存储数据
(三)Replication相关文件
1、master.info文件
存在于slave端的数据目录下,存放了该Slave的Master端的相关信息。
2、relay log 和 relay log index
1)mysql-relay-bin.xxxxn文件用于存放Slave端的I/O线程从Master端读取的Binary Log信息,然后由Slave端的SQL线程从该relay log中读取并解析相应的日志信息,转化成Master所执行的Query语句,接着在Slave端应用,达到主从备份的目的
2)mysql-relay-bin-index文件记录Relay Log存放位置的绝对路径
3、relay-log-info文件
存放通过Slave的I/O线程写入本地的relay log相关信息,以便Slave端的SQL线程及某些管理操作随时能够获取当前复制的相关信息。
(四)其他文件
1、my.cnf
MySQL的系统配置文件,linux下默认在/etc目录下。配置中包含多种参数选项组,每一种参数组都通过中括号给了固定的组名,如:[client]、[mysqld]等
2、pid文件
是mysqld应用程序在Unix/Linux环境下的一个进程文件,存放着自己的进程id
3、Socket文件
Unix/Linux环境下,客户端连接可以不通过TCP/IP网络,而直接使用Socket来连接MySQL。
参考:《MySQL性能调优与架构设计》