八股-MySQl日志

avatar
作者
猴君
阅读量:0
MySQL日志种类
种类特点用途
二进制日志(binlog || binary log)重要!记录对数据库进行更改的所有操作(表结构变化、表数据修改)
事务日志(redo log 或 undo log)重要!重做日志、回滚日志
错误日志(error log)记录MySQL启动、停止、关闭股哦成
一般查询日志(general query log)记录所有客户端的SQL语句,体量非常大,默认关闭,建议关闭
慢查询日志(slow query log)重要!解决SQL慢查询时用来找到慢查询的语句
中继日志(relay log)复制过程中产生的日志,只要针对从库
DDL日志(metadata log)DDL执行的元数据操作
慢查询日志以及慢查询的优化
命令解释
show variables like "slow_query_log";查看慢查询日志是否打开,on/off
set global slow_query_log = ON;将慢查询日志打开
set global long_query_time = 1;设置被认为慢查询的时间限制 (秒)
show global status like "Slow_queries";查看慢查询的语句个数
二进制日志(binlog)
命令解释
show binary logs显示所有二进制列表
show binlog events in "JIAHONGRUI-bin.000026" limit 10;显示日志具体内容
show variables like 'binlog_format';显示binlog的格式
binlog的格式模式
模式特点、区别
Statement模式每一条修改数据库数据的SQL都会被记录(insert、update、delete)日志文件小,对磁盘I/O压力小
Row模式每一行的具体变化都会被记录在日志中准确性比Statement高
Mixed模式上面两种模式的混合,会默认采取其中一种,在特殊情况会使用另外一种
binlog在主从复制中的做作用(同样的原理也可以用来做数据恢复)
步骤
主库将数据库中的数据变化写入到binlog
从库连接主库
从库创建一个I/O线程向主库请求更新binlog
主库创建一个binlog dump线程来发送binlog,从库中的I/O线程负责接收
从库的I/O线程接收binlog写到relay log中
从库的SQL线程读取relay log同步数据本地(也就是在执行一边SQL)

注意事项:

binlog只在事务提交的时候才会刷盘,注意参数内存的binlog_cache块,磁盘上的binlog文件,不可差分性,binlog_cache_size控制binlog_cache的大小,sync_binlog控制刷盘时机(0不要求听从系统安排,1每个事务都要刷盘,N每N个事务刷盘一次)

以下三种情况会导致binlog重新生成:binlog文件超过max_binlog_size的阈值,MySQL服务重启或停止,使用flush_logs命令

innoDB引擎下的redo_log(保证数据库的持久性和一致性)
redo_log的刷盘时机
事务提交:将log_buffer里面的redo_log刷到磁盘
log_buffer空间不足:一般占到了log_buffer总内存的一半
事务日志缓冲区满(了解)
CheckPoint:innoDB定期执行
后台线程刷新
正常的关闭服务器
redo_log丢失数据的情况
redo_log写入log_buffer但是还没有写入page_cache,此时数据库崩溃,就会出现数据丢失
redo_log已经写入page_cache,但是还没有刷新到磁盘,此时操作系统崩溃,就可能会出现数据丢失
undo_log保证事务原子性

undo_log属于逻辑日志,记录SQL语句,比如事务执行Delete语句,undo_log会相应的记录一条insert语句

总结
总结关键词
binlog日志数据恢复、主从复制、刷盘时机
redo_log数据一致性和持久性、刷盘时机、丢失数据的情况
undo_log原子性,反向记录

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!