mysql--2-- 数据存储文件及6类日志
数据存储文件
配置文件:
windows系统 : my.ini
linux系统 : my.cnf
物理文件:
数据库文件保存目录: mysql安装目录/data/ ; 新建一个数据库, data目录下会生成一个对应数据库名的文件夹;
不同存储引擎对应的表文件:
myisam存储引擎的表: 表名.MYD (表数据文件) ; 表名.MYI (表索引信息文件) ; 表名.frm (mysql8.0之前主要存储表结构信息的文件)
innodb存储引擎的表: 表名.idb (独享表的数据和索引信息文件) 或者 表名.idbata (共享表的数据和索引文件)
六类日志文件
查询日志:
主要记录查询语句, 默认关闭, 不推荐开启 (耗资源)
show variables like "%general_log%"; 查询 查询日志是否开启和日志文件位置
general_log 查询日志是否开启变量
general_log_file 查询日志位置
set global general_log = "on"; 开启查询日志
开启查询日志后, 没执行一次查询, 查询日志会记录下对应的信息, 如下图
使用set设置变量的值只会对当前数据库生效,如果mysql重启就会失效,永久生效的方法是将变量加到配置文件中. (mysqld选项中增加)
慢查询日志:
记录mysql中运行时间超过long_query_time值的sql. 建议开启, 有利于排查sql的问题
show variables like "%slow%";
slow_query_log 慢查询是否开启
slow_query_log_file 慢查询日志位置
show variables like "long_query_time"; 慢查询阈值
set gloabal long_query_time = 3; 设置慢查询阈值
测试:
select sleep(3);
查看对应日志文件信息
错误日志:
记录mysql服务运行中产生的异常错误 (注: 这个异常不是指sql异常,指的是服务异常)
show variables like "log_error"; 查看错误日志位置
二进制日志:
记录数据库的变化, 包含DML,DDL语句. 误删数据库时, 可以通过二进制文件恢复数据
show variables like "log_bin"; 查看二进制日志是否开启
show binary logs; 查看所有的二进制日志文件
show master status; 查看当前二进制日志文件
reset master; 删除所有的二进制日志文件
flush logs; 清空所有的日志文件
show binlog events in "二进制日志文件"; 查询指定二进制文件信息,包含数据变化记录的节点
使用二进制文件恢复数据:
先模拟操作:
create database mytest; 创建mytest数据库
use mytest; 进入mytest数据库
创建表 插入数据
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
insert into `user`(username,age)values('name1',10);
insert into `user`(username,age)values('name2',20);
insert into `user`(username,age)values('name3',30);
//删除表数据 删除表 删除数据库
delete from user where id > 0;
drop table user;
drop database test;
开始数据恢复
/usr/local/mysql/bin/mysqlbinlog --start-position=初始节点 --stop-position=结束节点 /usr/local/mysql/bin/mysql-bin.000007 | mysql -uroot -p
输入root用户的密码,执行完成数据恢复
注: 开始节点和结束节点可以通过 show binlog events in "二进制日志文件" 命令查看, "mysql-bin.000007" 是我正在使用的二进制日志文件. 如下图
中继日志: (暂不做解释)
主要是在主从中做运用,同时这个文件会记录主节点binlog日志,再到从节点根据这个文件进行数据恢复
事务日志:
1.重做日志: 主要是在事务已经提交了但是数据还未刷新到磁盘,mysql宕机了,在一次开启mysql服务的执行, 保证数据的一致性.
2.回滚日志:
主要是在事务没有提交,在下一次mysql服务重启的时候执行
当我们执行rollback命令的时候
本作品采用《CC 协议》,转载必须注明作者和本文链接