MySQL 五 日志

五、MySQL日志
1、 错误日志:
    重命名原来的错误日志文件,手动冲洗日志创建一个新的,命令为:mv hostname.err  hostname.err.old mysqladmin flush-logs
2、 查询日志模式是关闭的,可以通过以下命令开启查询日志:set global generallog=1 set global logoutput='table';    
    general_log=1 为开启查询日志,0 为关闭查询日志,这个设置命令即时生效,不用重启 MySQL 服务器
3、 默认情况下,慢查询日志是不开启的,只有手动开启了,慢查询才会被记录到慢查询日志中。开启慢查询日志:set global slowquerylog='ON';
    只是对当前数据库有效,如果 MySQL 数据库重启后就会失效。所以如果要永久生效,就要修改配置文件 my.cnf,设置 slowquerylog=1 并重启 MySQL 服务器
4、 慢查询是 MySQL 中提供的一种慢查询日志,记录在 MySQL 中响应时间超过阀值的语句,具体指运行时间超过 longquerytime 值的 SQL,则会被记录到慢查询日志中
    longquerytime 的默认值为 10。MySQL 数据库并不启动慢查询日志,需要我们手动来设置这个参数,如果不是调优需要的话,一般不建议启动该参数
    慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。
    使用 mysql> show variables like '%slow_query_log%'; 来查询慢查询日志是否开启
    开启慢查询日志,MySQL 命令:mysql> set global slowquerylog=1    这种设置方式,只对当前数据库生效,如果 MySQL 重启也会失效
    开启慢查询日志,在 MySQL 的安装目录下找到 my.cnf 文件设置 slow-query-log=On 开启慢查询,慢查询默认时长为 10s,默认存储文件名为 host_name-slow.log
    永久生效,修改 MySQL 的配置文件 my.cnf    slowquerylog =1 slowquerylogfile=/tmp/mysqlslow.log
5、 Undo log(回滚日志):用于存储日志被修改前的值,从而保证如果修改出现异常,可以使用 Undo log 日志来实现回滚操作
6、 Undo log 默认存放在共享表空间中,在 ySQL 5.6 中,Undo log 的存放位置还可以通过变量 innodbundodirectory 来自定义存放目录,默认值为“.”表示 datadir 目录
7、 Undo Log实现事务原子性:事务处理过程中如果出现了错误或者用户执行了 ROLLBACK语句,Mysql可以利用Undo Log中的备份将数据恢复到事务开始之前的状态
8、 Undo log实现多版本并发控制:事务未提交之前,Undo保存了未提交之前的版本数据,Undo log中的数据可作为数据旧版本快照供其他并发事务进行快照读
9、 快照读:SQL读取的数据是快照版本,也就是历史版本,普通的SELECT就是快照读innodb快照读,数据的读取将由 cache(原本数据) + undo(事务修改过的数据) 两部分组成
10、当前读:SQL读取的数据是最新版本。通过锁机制来保证读取的数据无法通过其他事务进行修改UPDATE、DELETE、INSERT、SELECT … LOCK IN SHARE MODE、
    SELECT … FOR UPDATE都是当前读
11、Redo log指事务中操作的任何数据,将最新的数据备份到一个地方 (Redo Log)
12、redo log(重做日志):为了最大程度的避免数据写入时,因为 IO 瓶颈造成的性能问题,MySQL 采用了这样一种缓存机制,先将数据写入内存中,再批量把内
    存中的数据统一刷回磁盘。为了避免将数据刷回磁盘过程中,因为掉电或系统故障带来的数据丢失问题,InnoDB 采用 redo log 来解决此问题
13、Redo log持久化不是随着事务的提交才写入的,而是在事务的执行过程中,便开始写入redo 中。具体的落盘策略可以进行配置
14、InnoDB 使用 redo log 来实现 crash-safe 能力    。crash-safe 是指发生宕机等意外情况下,服务器重启后数据依然不会丢失的情况    
15、Redo Log实现事务持久性:防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redolog进行重做,从而达到事务的未入磁盘数据进行持久化这一特性
16、在 InnoDB 中设置 innodbflushneighbors 这个参数的值为 0,来规定 MySQL 只刷当前脏页,MySQL 8 这个值默认是 0
17、指定Redo log 记录在{datadir}/ib_logfile1&ib_logfile2 可通过innodb_log_group_home_dir 配置指定目录存储
18、一旦事务成功提交且数据持久化落盘之后,Redo log中的对应事务数据记录就失去了意义,所以Redo log的日志文件是循环写入的
19、Redo log参数
    指定Redo log日志文件组中的数量 innodb_log_files_in_group 默认为2
    指定Redo log每一个日志文件最大存储量innodb_log_file_size 默认48M
    指定Redo log在cache/buffer中的buffer池大小innodb_log_buffer_size 默认16M
20、Redo buffer 持久化Redo log的策略, Innodb_flush_log_at_trx_commit:
    1)取值 0 每秒提交 Redo buffer --> Redo log OS cache -->flush cache to disk[可能丢失一秒内的事务数据]
    2)取值 1 ,默认值,每次事务提交执行Redo buffer --> Redo log OS cache -->flush cache to disk[最安全,性能最差的方式]
    2)取值 2 每次事务提交执行Redo buffer --> Redo log OS cache 再每一秒执行 ->flush cache todisk操作
21、bin log(二进制日志):是一个二进制文件,主要记录所有数据库表结构变更,比如,CREATE、ALTER TABLE 等,以及表数据修改,比如,INSERT、UPDATE、DELETE    
22、binlog 默认是关闭状态,可以在 MySQL 配置文件(my.cnf)中通过配置参数 log-bin = [base-name] 开启记录 binlog 日志,如果不指定 base-name,
    则默认二进制日志文件名为主机名,并以自增的数字作为后缀,比如:mysql-bin.000001,所在目录为数据库所在目录(datadir)    
23、查询 binlog 是否开启:show variables like 'log_%';    
24、binlog 的作用如下:
    1)恢复(recovery):某些数据的恢复需要二进制日志。比如,在一个数据库全备文件恢复后,用户可以通过二进制日志进行 point-in-time 的恢复;
    2)复制(replication):其原理与恢复类似,通过复制和执行二进制日志使一台远程的 MySQL 数据库(一般称为 slave 或者 standby)与一台 MySQL 数据库
        (一般称为 master 或者 primary)进行实时同步;
    3)审计(audit):用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入攻击。
25、binlog 对于事务存储引擎的崩溃恢复也有非常重要的作用,在开启 binlog 的情况下,为了保证 binlog 与 redo 的一致性,MySQL 将采用事务的两阶段提交协议。
    当 MySQL 系统发生崩溃时,事务在存储引擎内部的状态可能为 prepared(准备状态)和 commit(提交状态)两种,对于 prepared 状态的事务,是进行提交操作还
    是进行回滚操作,这时需要参考 binlog,如果事务在 binlog 中存在,那么将其提交;如果不在 binlog 中存在,那么将其回滚,这样就保证了数据在主库和从库之间的一致性。
26、binlog 格式分为 STATEMENT、ROW 和 MIXED 三种
    STATEMENT    基于语句的复制
    ROW            基于行的复制
    MIXED        是 MySQL 默认使用的二进制日志记录方式,但 MIXED 格式默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
27、redo log 和 binlog 的区别:
    1)redo log 是物理日志,记录的是“在某个数据页上做了什么修改”。binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”。
    2)redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。
    3)redo log 是循环写的,空间固定会用完;binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。
28、redo log 和 binlog 是怎么关联的?
    它们有一个共同的数据字段,叫 XID。崩溃恢复的时候,会按顺序扫描 redo log:如果碰到既有 prepare、又有 commit 的 redo log,就直接提交;
    如果碰到只有 parepare、而没有 commit 的 redo log,就拿着 XID 去 binlog 找对应的事务。
29、MySQL 怎么知道 binlog 是完整的?
    statement 格式的 binlog,完整的标识是最后有 COMMIT 关键字。
    row 格式的 binlog,完整的标识是最后会有一个 XID event 关键字。
30、MySQL 中可不可以只要 binlog,不要 redo log?不可以,binlog 没有崩溃恢复的能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值