1、慢查询是指:某些sql语句执行完毕所花费的时间特别长,超过了指定的时间。慢查询日志不仅包括SELECT语句,还包括INSERT、DELETE、UPDATE、CALL等DML操作。
mysql自带了对慢查询日志的统计分析工具mysqldumpslow。
2、二进制日志(binlog),记录了所有修改了数据库的语句,或者有可能会改变数据库的语句,换句话说,select、show这种不修改数据库的操作,二进制日志是不会进行记录的,二进制日志主要用于时间点恢复(备份恢复),以及主从复制结构。
二进制日志有3种记录方式,三种方式如下:
statement模式:记录对数据库做出修改的语句,比如,update A set test='test',如果使用statement模式,那么这条update语句将会被记录到二进制日志中,使用statement模式时,优点是binlog日志量少,IO压力小,性能较高,缺点是为了能够尽量的完全一致的还原操作,除了记录语句本身以外,可能还需要记录一些相关的信息,而且,在使用一些特定的函数时,并不能保证恢复操作与记录时完全一致。
row模式:记录对数据库做出修改的语句所影响到的数据行以及这些行的修改,比如,update A set test='test',如果使用row模式,那么这条update语句所影响到的行所对应的修改,将会记录到binlog中,比如,A表中有1000条数据,那么当执行这条update语句以后,由于1000条数据都会被修改,所以会有1000行数据被记录到二进制日志中,以及它们是怎样被修改的,使用row模式时,优点是能够完全的还原或者复制日志被记录时的操作,缺点是记录日志量较大,IO压力大,性能消耗较大。
mixed模式:混合使用上述两种模式,一般的语句使用statment方式进行保存,如果遇到一些特殊的函数,则使用row模式进行记录,这种记录方式被称之为mixed,看上去这种方式似乎比较美好,但是在生产环境中,为了保险起见,一般会使用row模式。
参数:
log_bin : 是否开启二进制日志,只读变量。只能通过修改my.cnf的方式,设置log_bin的值,即日志文件前缀名,后缀名会进行自动编号。设置后即会自动生成日志。如下
sql_log_bin :当前会话操作是否会被记录于二进制日志,会话界别的变量,只能在当前会话中使用set sql_log_bin命令进行设置
binlog_format : 二进制日志的记录方式,值可以为statement、row、mixed。
max_binlog_size :设置单个二进制日志文件的最大大小,以字节为单位,超过此值大小,则二进制日志文件会自动滚动,比如设置为500M为524288000
sync_binlog :由于二进制日志一开始在内存中,如果为1,则表示每1次事务提交之后,就从内存同步到磁盘。
0是由文件系统决定什么时候刷写,这可能取决于文件系统的缓存机制,当此值设置为0时,一旦操作系统宕机,那么将丢失未从内存中同步到磁盘中的binlog,所以,当此值设置为0时,安全性最差,但是性能最高。
当此值设置为1时,安全性最高,性能最差。
除了0和1,还能设置为N。比如3。值设置的越大,有可能丢失的日志数据将会越多,当然,性能会越好。
在追求安全的情况下,推荐设置为1。
但是听说,此值设置为0和设置为1时在性能上的差距还是比较明显的,如果设置为0或N,最好为操作系统准备带有备用电源的缓存。
二进制日志长这样
命令行下使用 mysqlbinlog命令查看二进制日志