MySQL物理文件类型有哪几种(笔试题会经常问)
一、日志文件类型有如下几种:
1. 错误日志文件(error log):记录的是MySQL异常,或则MySQL链接有误
2. 二进制日志(binarg log):用于数据恢复、数据库的主从配置
3. 事务日志(rado undo log):事务的开启会存储到rado log日志以及撤销日志 undo log,稍后会刷入磁盘中
4. 慢查询日志(slow query log):可用于查询项目中的哪些sql语句查询较慢。
5. 查询日志(query log):用于查询缓慢的语句日志
二、数据库的文件:
1. .frm文件:(MySQL表的引擎是MyISAM的,存储的是该引擎的创建表或则其他操作的语句)。
2. .myd文件:(MySQL表的引擎是MyISAM的,存储的是该引擎的所有数据)。
3. .myi文件:(MySQL表的引擎是MyISAM的,存储的是该引擎的所有索引)。
4. .ibd和ibdata文件:(MySQL表的引擎是innodb的,存储的是该引擎的索引以及数据)。
1.1 错误日志文件:
在MySQL数据库中,错误日志默认是开启的,默认情况下,错误日志默认情况存储在data目录下的。
错误日志信息可以自己自定义的,错误日志记录所记录的是可以通过 log_error 和 log_warnings来操作的,其中log_error是查看错误日志是否有开启,log_warnings是开启如果有警告错误是否也要写入错误日志中。
show variabiles like “%log_error%” // 检测是否开启错误日志
show variables like ‘%log_warnings%’; // 是否开启警告日志写入错误日志中 1 是 0 否
1.2 二进制日志文件(用于数据恢复、数据库主从复制):
* 二进制日志,也就是我们常说的binlog,二进制日志记录了MySQL所有修改数据库的操作,然后以二进制的形式记录到日志文件中,
* 默认情况下二进制日志是没有开启,需要自己手动去MySQL配置文件中修改(启动:log_bin=[file_name]保存二进制日志的文件名。路径是自己定义的)
* 使用命令检测是否开启二进制日志文件
show variables like '%log_bin%';
* 添加配置MySQL的my.ini或则my.cnf中,因为新版本数据库中存在bug,必须指定 server-id=1变量名自己随便设置
server-id = 1
log_bin = mysql-bin
* 作用:
以二进制形式记录更改数据库的sql语句(insert、update、delete、drop、create、alter)等操作都会被记录
* 启动二进制日志会降低MySQL1%的性能,但保障数据的完整性,对于重要的数据库值得以性能换完整。
* 二进制文件存储的路径一般存在(MySQL的data目录下):
查看二进制的基本命令:
show binlog events\G; // 查看二进制日志文件详细信息
show binary logs; // 查看二进制日志列表
show master status;// 查看最新的二进制日志
实例:
在你的服务器上测试,先用该命令清除下原有的二进制日志记录
flush logs // 清除二进制日志
reset master; // 刷新二进制日志
1. 首先先创建一个表:
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
2. 为这个表添加几条数据
insert into user values(1,'123');
insert into user values(2,'123');
insert into user values(3,'123');
3. 将二进制日志文件中的数据备份一份导出来(一般这一步都是定时导出)
/www/server/mysql/bin/mysqlbinlog /www/server/data/mysql-bin.000001 > /www/server/data/user_test.log;
将二进制日志文件 导入到 data user_test.log 目录中,导出路径自己自定义
4. 然后模拟误删操作:
delete from user;
5. 然后使用MySQL的命令恢复数据:
/www/server/mysql/bin/mysql -uroot -p -e "source /www/server/data/user_test.log"; // 你导出的二进制日志文件
然后再查询数据库是否有数据,如果有数据就成功了
这里还有一些根据时间恢复、根据二进制日志文件id恢复,这就不多演示了。
2.3 慢查询日志:
查看是否开启了慢查询日志:
show varaibles like '%log_slow_queries%';
查看慢查询的默认定义:
show varaibles like '%slow_query_log%';
如果没有开启慢查询日志:到MySQL的配置文件中配置
slow_query_log
slow_query_log_file=[file_name]//慢查询日志保存路径
long_query_time=2; // 最大等待时间
测试慢查询:
1. 先让MySQL查询语句睡眠4秒,超过最大等待时间,然后看看慢查询日志是否有该条查询慢的sql语句
select sleep(4);
select count(*) from user;
如果有的话,证明成功了。