MySQL数据库会在data目录下面简历一个以数据库为名的文件夹,用来存储数据库中的表文件数据。不同的数据库引擎,每个表的扩展名也不一样 ,例如: MyISAM用“.MYD”作为扩展名,Innodb用“.ibd”。
.FRM 文件(8.0之前)
无论是那种存储引擎,创建表之后就一定会生成一个以表明命名的'.frm'文件。frm文件主要存放与表相关的 数据信息,主要包括表结构的定义信 息。当数据库崩溃时,用户可以通过frm文件来恢复数据表结构。
.MYD文件
“.MYD”文件是MyISAM存储引擎专用,存放MyISAM表的数据。每一个MyISAM表都会有一个“.MYD”文件与 之对应,同样存放于所属数据库的文件夹 下, 和“.frm”文件在一起。
.MYI文件
“.MYI”文件也是专属于MyISAM存储引擎的,主要存放MyISAM表的索引相关信息。对于MyISAM存储来说, 可以被cache 的内容主要就是来源 于“.MYI”文件中。 每一个MyISAM表对应一个“.MYI”文件,存放于位置 和“.frm”以及“.MYD”一样。
.ibd文件与.ibdata文件
这两种文件都是存放Innodb数据的文件,之所以有两种文件来存放Innodb的数据(包括索引),是因为 Innodb的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是独享表空间存放存储数 据。 .ibd 独享表空间存储方式 每个表一个“.ibd”文件 文件存放在和MyISAM数据相同的位置。 .ibdata 共享存储表空间 所有表共同使用一个(或者多个,可自行配置)ibdata文件
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具 体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为 10,意思是运行10S以上的语句。默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这 个参数
慢查询相关日志 slow_query_log :是否开启慢查询日志,1表示开启,0表示关闭。 slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统 则会默认给一个缺省的文件host_name-slow.log long_query_time :慢查询阈值,当查询时间多于设定的阈值时,记录日志 log_output:日志存储方式。log_output='FILE'表示将日志存入文件,默认值是'FILE'。 log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。MySQL数据 库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output='FILE,TABLE'。日志记录到系 统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,又需要能够获 得更高的系统性能,那么建议优先记录到文件。
使用set global slow_query_log=1开启了慢查询日志只对当前数据库生效,如MySQL重启后则会失效。如果要永久生效,就必须修改配置文件my.cnf(其它系统变量也是如此)。
mysql 配置文件 linux my.cnf windows my.ini 修改my.cnf文件 slow_query_log=1 slow-query-log-file=/www/server/data/mysql-slow.log long_query_time=3 之后重启MySQL服务器即可
日志分析工具mysqldumpslow
错误日志(Error Log)是 MySQL 中最常用的一种日志,主要记录 MySQL 服务器启动和停止过程中的信息、服务器在运行过程中发生的故障和异常情况等。
在 MySQL 配置文件中,错误日志所记录的信息可以通过 log-error 和 log-warnings 来定义,其中,log-err 定义是否启用错误日志功能和错误日志的存储位置,log-warnings 定义是否将警告信息也记录到错误日志 中。 将 log_error 选项加入到 MySQL 配置文件的 [mysqld] 组中,形式如下: [mysqld] log-error=dir/{filename} 其中,dir 参数指定错误日志的存储路径;filename 参数指定错误日志的文件名;省略参数时文件名默认为 主机名,存放在 Data 目录中。
在 MySQL 中,通过 SHOW 命令可以查看错误日志文件所在的目录及文件名信息。
在 MySQL 中,可以使用 mysqladmin 命令来开启新的错误日志,以保证 MySQL 服务器上的硬盘空间。
mysqladmin 命令的语法如下:
mysqladmin -uroot -p flush-logs
执行该命令后,MySQL 服务器首先会自动创建一个新的错误日志,然后将旧的错误日志更名为filename.err-old。
二进制日志(Binary Log)也可叫作变更日志(Update Log),是 MySQL 中非常重要的日志。主要用于记录数据库的变化情况,即 SQL 语句的 DDL 和 DML 语句,不包含数据记录查询操作。
在 MySQL 中,可以通过在配置文件中添加 log-bin 选项来开启二进制日志,格式如下:
log-bin=dir/[filename]
其中,dir 参数指定二进制文件的存储路径;filename 参数指定二进制文件的文件名,其形式为 filename.number,number 的形式为 000001、000002 等。
每次重启 MySQL 服务后,都会生成一个新的二进制日志文件,这些日志文件的文件名中 filename部分不会改变,number 会不断递增。
如果没有 dir 和 filename 参数,二进制日志将默认存储在数据库的数据目录下,默认的文件名为hostname-bin.number,其中 hostname 表示主机名。
log-bin=mysql-bin 开启binlog日志 binlog_format=mixed binlog日志记录的方式(sql,行,混合) server-id = 1 mysql服务运行的id
查看当前mysql全部的二进制文件:
查看当前的二进制文件:
查看二进制文件内容
show binlog events 查询第一个二进制文件 show binlog events in 'mysql-bin.000003'\G; 查询指定二进制文件
PURGE MASTER LOGS TO 'filename.number'; 删除指定二进制编号之前的二进制日志 RESET MASTER; 删除所有二进制日志文件 flush logs 删除所有日志
/bin/mysqlbinlog --start-position=96625 --stop-position=97758 dir_data/binlog_filename | mysql -uroot -p start-position 开始节点 stop-position 结束节点 dir_data data目录路径 binlog_filename binlog文件名
//根据时间恢复数据 mysqlbinlog --start-datetime='2020-09-27 22:22:22' --stop-datetime='2020-09-27 22:30:00' /www/server/data/mysql-bin.000036 | mysql -uroot -p //直接执行binlog日志 mysqlbinlog /www/server/data/mysql-bin.000036 | mysql -uroot -p