问:日常工作中你有没有留意MySQL有哪些文件?随便说几个,顺便说说它们各自有什么用?
答:日常工作中我有了解10个MySQL相关文件。 分别是:
- 参数配置文件
- 错误日志文件
- 慢查询文件
- 查询日志文件
- binlog文件
- redolog文件
- socket文件
- pid文件
- 表结构定义文件
- 表空间文件
参数配置文件
问:那你说说MySQL的参数配置文件叫什么?
答:MySQL的参数配置文件叫:my.cnf 。 MySQL在启动的时候会去读取加载这个配置文件中的参数。并使用这个参数启动。而且这个my.cnf 并不是必须的,因为在大部分参数在编译时都有自己的默认值。
问:怎么找到MySQL的配置文件呢?
答:可以使用命令:mysql --help | grep my.cnf 找到这个配置文件
错误日志文件
问:说一下你对MySQL错误日志文件的了解吧!
答:错误日志文件中会记录MySQL的 启动、运行、关闭的信息。一般当我们发现MySQL启动不了时,第一时间都会去查看这个日志中都记录了哪些错误信息。
一般情况下,我们都会在my.cnf中加入配置:
#warning & error loglog-warning = 1log-error = /home/mysql/log/mysql.err
这样当数据库启动异常时,我们就去 /home/mysql/mysql/log/目录下找对应的错误日志,排错。
未指定log-error地址则将错误日志写入控制台。
慢查询日志
问:说说看MySQL的慢查询日志。
答:慢查询其实就是在说,SQL执行的速度很慢。具体多慢算是慢查询呢?可以通过配置文件人为控制。
比如可以在 my.cnf 这样配置:
# slow query log
long_query_time = 1 # 执行时间超过1s的sql都是慢查询
slow_query_log = 1 # 开启慢查询
slow_query_log_file = /var/lib/mysql/698489d3f194-slow.log
另外,默认情况下 MySQL不会帮我们记录慢查询日志,需要我们主动通过配置开启。 开启慢查询日志后,默认情况下,MySQL会认为执行时间超过10s的SQL才是慢SQL,才会记录到慢查日志中。**慢查询
查询日志
问:说一下MySQL的查询日志吧。
答:见名知意,查询日志中会记录:所有对MySQL请求的信息,无论SQL有没有被正确的执行,都会被记录进这个查询日志中。
同样可以在 my.cnf 中这样配置,来控制查询日志的记录位置
# general query log
general_log = 1 # 开启查询日志记录
general_log_file = /var/lib/mysql/698489d3f194.log
bin log
问:了解MySQL的binlog吗?谈谈看!
答:binlog就是传说中的MySQL的二进制日志,和查询日志不同的是:所有对数据库产生修改的操作才会被记录到binlog中。所以像select 、show xxx这种不会对数据库产生修改的类型的SQL只能在slow log中才能找到。像update、insert、delete 这样的SQL才会被记录进binlog中。
问:接着说说binlog一般有什么用吧!
答:binlog常见的作用有如下几点:
- 主从复制(replication)我们线上使用的数据库都是一主两从或者是一主多从的数据库集群。目的是为了做读写分离嘛。也就是让从库承担主库的读流量。
- 数据恢复:比如线上的数据被不小心误删除了,可以借助binlog将数据恢复如初。
- 审计:可以通过审计binlog来分析,是否存在SQL注入的请况。
bin log
**
redo log
问:说说看redo log?
答:redo log是MySQL的重做日志文件。它让MySQL拥有了崩溃恢复的能力。所谓崩溃恢复是指,服务器宕机、或者MySQL意外Crash后,MySQL重启启动可以将崩溃前内存中的数据恢复如初的能力。
redo log
事务的两阶段提交
socket文件
问:socket文件是Mysql的什么文件?
答:socket文件吧,一般是在/tmp目录下。在Unix操作系统中本地登陆MySQL时其实就是借助于这个socket文件实现的。
插入问题:本地登陆和远程登陆的区别?
答:直观的看,本地登陆就是你先登陆上操作系统,进入bash中,然后再通过 mysql -uroot -p的方式登陆MySQL。
远程登陆就比如你在你的笔记本上通过网络远程登陆百度云上的MySQL。
pid文件
问:pid文件是Mysql的什么文件?
答:在Linux操作系统中,所有的程序都是有自己的进程ID的,MySQL也不例外。MySQL实例启动之后会把自己的进程ID写入到一个文件中,这个文件就叫做PID文件。
默认这个PID文件会在数据库目录下,文件名为:主机名.pid。
表结构定义文件和表空间文件
问:什么是表结构定义文件和 表空间文件?
答:在MySQL中数据是以数据表的形式组织起来的,不管你使用的哪种存储引擎,每个数据表都会有一个对应的表结构定义文件。它里面记录了表结构定义信息。一般这个表结构定义文件的后缀都是 .frm。
表空间文件是数据库真正存储数据的文件。一般表空间文件的后缀名是 .ibd:一提到表空间大家都会说什么:共享表空间、独立表空间等等。本质上它们没啥差别,都是MySQL用来存储业务数据的文件。
表空间
问:Mysql有那么多日志,那写日志难道不会拖累MySQL的性能吗?
答:首先来说,写日志肯定会拖累MySQL的整体的性能。比如说:默认情况下,像binlog、慢查询日志,MySQL都不会帮我们主动记录,而是需要我们通过配置去主动开启!
这其实是在一定程度上暗示使用者,如果你不需要写该日志给你带来的种种好处,那么你可以选择不让MySQL记录那种日志从而换来性能上的提升。
但是MySQL记录日志的形式是:顺序的磁盘IO,只是追加写,并不是随机磁盘IO,所有其实写日志总体性能也没有那么的差!
而且记录日志自然有记录日志的好处,就比如MySQL记录binlog,可能会降低1%的性能,但是MySQL就拥有了 搭建集群、数据备份、审计的能力。写redolog后,MySQL就拥有了崩溃恢复的能力。
