mysql日志总结

(1)mysql的日志有哪些?

        ①错误日志error_log:记录Mysql启动,运行,停止期间的问题。

        ②常规日志general_log:记录所有发向mysql的请求。

        ③慢查询日志slow_query_log: 记录符合条件的查询。

        ④二进制日志binary_log: 记录全部有效的数据修改日志。(非常重要,高可用,主从备份,数据恢复,增量备份等)

        ⑤中继日志relay_log: 用于主从复制,可以看做主服务器数据库二进制日志在从服务器的副本,其内容就是增量获取主服务器的二进制日志。

(2)我们在什么情况下使用这些日志?

(3)如何通过日志来审计用户活动?

mysql存储引擎层日志:innodb的重做日志以及回滚日志;

mysql服务层日志:二进制日志,慢查询日志,通用日志。

1 二进制日志binary_log

记录了所有对mysqsl数据库的修改事件,包括增删改查和对表结构的修改。binlog记录的日志都是成功执行的。二进制日志可以帮助我们实现主从复制,基于时间点的备份和恢复。包括innodb, myisam等其他存储引擎。

1.1基于段的二进制日志

binlog_format=STATEMENT #mysql5.7之前默认的模式

优点:

        可以清楚的看出mysql执行了那些操作。记录了每一个事件执行的sql语句。日志量相对较小,节约磁盘,网络IO性能。

缺点:

      必须记录上下文信息。以保证在从服务器上执行结果和在主服务器上相同。

        但是对于UUID(),user(),now()这样的非确定函数还是没法复制,可能造成主从数据不一致。

show variables like 'binlog_format';

set session binlog_format=statement;

show binary logs查看binlog;

flush logs;刷新二进制日志,产生新的二进制日志binlog;

user statementdb;

insert into test(1,'1'),(2,'2');

update test set name='11' where id = 1

进入日志存放目录去查看日志

cd /home/mysql/sql_log

ls 查看有哪些日志

mysqlbinlog mysql-bin.000002

mysql日志总结_第1张图片

1.2基于行的日志格式 binlog_format=ROW

row格式可以避免mysql复制过程中的主从不一致问题。不记录修改sql语句,仅记录哪条数据被修改了,修改成什么样了。每修改一行都有一条日志,若批量修改基于段的日志格式只会记录这个sql语句,基于行的日志会记录所有修改每一行的数据修改日志。

优点:

        使用mysql主从复制更加安全。

        对每一行数据的修改比基于段的复制高效。

    误操作修改了数据库中的数据,同时有没有备份恢复,那么我们就可以分析二进制日志,对日志中记录的数据修改操作反向处理已达到恢复数据的目的。

缺点:

        日志量大。

解决方法:

binlog_row_image=FULL|MINIMAL|NOBLOB 默认FULL记录修改记录所在行所有列的数据,MINIMAL表示只记录修改了的前后列的数据。

1.3混合模式

        以上两种模式的混合使用,又数据库来决定日志保存方式。

2 redo日志

        mysql里常说的WAL技术,Write-Ahead Loggin,关键点就是先写日志,然后写磁盘。

当有一条记录要跟新,会清空缓存,同时把记录写到redo log里,并且更新内存,innodb执行引擎会在适当的时候将操作记录刷新到磁盘。redo log可以保证即使数据库发生异常,之前的提交记录都不会丢失。

        重做日志记录的是修改的页信息,而且只记录Innodb存储引擎本身的事务日志。

        redo日志在事务执行期间,连续写入。binlog是在事务提交之后。

        事务提交有三个步骤:(1)write prepare log在预提交日志中写入xid。(2)writer binlog。(3)write commit log。

3 undo日志

        为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个地方。然后进行数据的修改。如果出现了错误或者用户执行了ROLLBACK语句,系统可以利用Undo Log中的备份将数据恢复到事务开始之前的状态。

4中继日志(relay_log)

        用于主从复制。

relay_log=filename指定日志存放位置以及文件名前缀。设置固定名防止主机名变化影响主从复制。

默认自动删除中继日志relay_log_purge=ON。

5 错误日志

5.1 错误日志的使用场景

        (1)分析排除mysql运行错误:mysql服务器启动失败,异常重启,主从失败等

        (2)记录未经授权的访问:错误日志中会记录异常登录信息,对登录信息进行审计。

5.2 配置

        (1)log_error = $mysql/sql_log/mysql-error.log 默认将错误日志保存到数据文件中,而且错误日志名取主机名,后缀为-error.log的文件。通常情况下出于性能优化的考虑将错误日志于数据日志分离,存放到不同的文件或设备上。例如数据文件放到高速io磁盘上,错误日志放到相对性能低的磁盘上。

        (2)log_error_verbosity=[1,2,3]

        错误日志级别,默认值为2。1表示错误信息;2表示错误和警告信息;3表示错误和警告和提示信息note message;

        (3)log_error_services=[日志服务组件;日志服务组件]  mysql8以上

mysql日志总结_第2张图片

show variables like ‘log_error_services’;(默认log_filter_internal, log_sink_internal)

若去掉默认的日志过滤组件,set persist log_error_services=’log_sink_internal’;

7常规日志general_log

        记录从连接到退出为止,与mysql所有交互信息,会产生大量的日志,默认情况关闭。

8 慢查询日志

8.1慢查询日志配置

        将执行成功并且符合条件的查询记录到日志中,找到需要优化的sql。默认关闭。

        slow_query_log = ON

        slow_query_log_file=$mysql/mysql_log/slowlog.log

        long_query_time = xx秒

        log_queries_not_using_indexes=ON

8.2慢查询日志分析工具

        (1) mysqldumpslow,mysql自带工具。统计信息比较少,包括了执行sql语句,执行时间,锁定时间,发送的行数,扫描的行数。

        执行命令:查询慢查询日志前10个:mysqldumpslow -t 10 /var/lib/mysql/mysql-slow.log

mysql日志总结_第3张图片        

 

 

 

 

 

 

(2) pt-query-digest

安装:

wget https://www.percona.com/downloads/percona-toolkit/2.2.16/RPM/percona-toolkit-2.2.16-1.noarch.rpm && yum localinstall -y  percona-toolkit-2.2.16-1.noarch.rpm

pt-query-digest --version-check 版本进行升级

wget http://percona.com/get/pt-summary

检查是否安装成功:

        pt-query-digest --help

用途

查看服务器信息:

  pt-summary

查看磁盘开销

  pt-diskstats

查看mysql数据库信息

  pt-mysql-summary --user=root --password=123456

分析慢查询日志

pt-query-digest /data/mysql/data/db-slow.log

查看mysql主从同步状态

pt-slave-find --host=localhost --user=root --password=123456

查看mysql死锁信息

  pt-deadlock-logger --user=root --password=123456 localhost

查看慢查询日志中索引使用情况

  pt-index-usage --user=root --password=123456 slow_20131009.log

查看数据库表中重复的索引

pt-duplicate-key-checker --host=localhost --user=root --password=123456

对比mysql配置文件差异

  pt-config-diff /etc/my.cnf /etc/my_master.cnf

查看mysql表和文件的当前活动IO开销

pt-ioprofile

pt-find查看数据库中大于500g的表

pt-find --user=root --password=123456 --tablesize +500G

pt-kill 杀掉符合标准的mysql进程

  查看查询时间大于60s的查询并且杀掉

  pt-kill --user=root --password=123456 --busy-time 60 --print

pt-kill --user=root --password=123456 --busy-time 60 --kill

查询mysql授权

  pt-show-grants --user=root --password=123456

pt-show-grants --user=root --password=123456 --separate –revoke

验证数据库复制的完整性

pt-table-checksum --user=root --password=123456

 

你可能感兴趣的:(数据库总结)