目录
-
MysqI会产生几种日志?
- 错误日志(error log)
error log主要记录MySQL在启动、关闭或者运行过程中的错误信息,在MySQL的配置文件my.cnf中,可以通过l0gerror=/var/log/mysqld.10g 执行mysql错误日志的位置。
- 慢查询日志(slow query log)
- Ø MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。
- Ø long_query_time的默认值为10,意思是运行10秒以上的语句。
- Ø由他来查看哪些SQL超出了我们的最大忍耐时间值,比如一条sql执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒的sql,结合之前explain进行全面分析。
- Ø 默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数。Ø当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件。
- 在生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MSQL提供了日志分析工具mysqldumpslow。
- 一般查询日志(general log)
general log 记录了客户端连接信息以及执行的SQL语句信息,通过MySQL的命令
- 重写日志(redo log)
- 回滚日志(undo log)
- 二进制日志(bin log)
-
binlog作用是什么?
- 在redolog之后执行,记录所有的一条条的sql(不包括查询sql),主要用于灾备恢复和主从同步
- 但时间操作和其他一些系统变量等数据可能难以恢复
-
redolog作用是什么?
记录数据修改之后的值,在undo log执行之后执行,是记录在磁盘上的数据结构,用于宕机时内存更新但是没有来得及写入磁盘那部分的数据恢复
-
undolog作用是什么?
主要是回滚,记录数据修改之前的值,mvcc并发控制可能会利用undo log返回之前的版本
-
Mysql日志是否实时写入磁盘?
-
bin log刷盘机制是如何实现的?
参数:sync_binlog
binlog 写入策略:
- sync binog=0 的时候,表示每次提交事务binlog不会马上写入到磁盘,而是先写到page cache,相对于磁盘写入来说写page cache要快得多,不过在Mysq!崩溃的时候会有丢失日志的风险。
- sync binlog=1 的时候,表示每次提交事务都会执行 fsync 写入到磁盘;3、sync binlog的值大于1 的时候,表示每次提交事务都 先写到page cach,只有等到积累了N个事务之后才fsync 写入到磁盘,同样在此设置下Mysq!崩溃的时候会有丢失N个事务日志的风险。
- 很显然三种模式下,sync binlog=1 是强一致的选择,选择0或者N的情况下在极端情况下就会有丢失日志的风险,具体选择什么模式还是得看系统对于一致性的要求。
-
redo log&undo log刷盘机制是如何实现的?
change buffer存储脏页,存储之前要用到undo log和redo log
innodb_flush _log_at_trx_commit
取直0:每秒触发一次缓存日志回写磁盘操作,并调用操作系统fsync刷新IO缓存。
取值1:每次提交事务都立即调用操作系统fsync刷新IO缓存。
取值2:每次都把redo 1og写到系统的page cache中,由系统接管什么时候写入磁盘
一个事务的刷盘步骤(重要!!):
-
MySQL的binlog有有几种录入格式?分别有什么区别?
logbin格式:
- binlog_format=STATEMENT(默认):数据操作的时间,同步时不一致每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每- 条sql语句和每一行的 数据变化,减少了bin0g日志量,节约10,提高性能。缺点是在某些情况下会导致 master-slave中的数据不一致( 如sleep()函数,last_insert_id(),以及user-defined functions(udf)等会出 现 问题)
- binlog format=ROW:批量数据操作时,效率低 不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出 现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的 问题。缺 点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。
- binlog_format=MIXED:是以上两种level的混合使用,有函数用ROW,没函数用STATEMENT,但是无法识别系统变量
-
Mysq!集群同步时为什么使用binlog?优缺点是什么?
直接同步磁盘表的二进制数据也可以,但是容易出问题,如果有修改或者更复杂的操作,同步中断后就很难继续同步了
标签:知识点,面试题,log,binlog,写入,MySQL,磁盘,日志 From: https://blog.csdn.net/qq_51586702/article/details/137061542binlog是mysql提供的日志,所有存储引擎都可用,
- 如上所述,支持增量同步
- binlog还可以供其他中间件读取,比如同步到hdfs中
- 如果复制表数据:
- 不支持某个阶段回放
- 直接复制数据过程中一旦中断复制(比如断网)很难确定复制的offset