mysql BINlog日志的3种模式,及binlog模式的选择
log
1、错误日志(Error Log)
作用:记录mysql服务进程mysqld在启动、关闭或运行过程中遇到的错误信息
位置:/etc/my.cnf
[mysqld_safe]
log-error=/data/3306/mysql_oldboy3306.err
#此处可以不写等号后边,默认是:/data/主机名
2、查询日志(Query Log)
1)、普通查询日志(The General Query Log)
作用:记录客户端连接信息和执行的sql语句信息;(工作中一般不打开)
mysql> show variables like"%general_log%";
+------------------+-----------------------------------+
| Variable_name | Value |
+------------------+-----------------------------------+
| general_log | OFF |
| general_log_file |/application/mysql/data/moban.log |
+------------------+-----------------------------------+
2 rows in set (0.00 sec)
开启设置: set global general_log = ON ;
mysql> showvariables like "%general_log%";
+------------------+------------------------------------+
|Variable_name | Value |
+------------------+------------------------------------+
|general_log | ON |
|general_log_file | /application/mysql/data/moban2.log |
+------------------+------------------------------------+
2rows in set (0.00 sec)
位置: /application/mysql/data/ moban2.log
2)、慢查询日志(The Slow Query Log)
作用:记录执行时间超出指定值(long_query_timme)的SQL 语句;
设置:/etc/my.cnf
[mysqld]
long_query_time = 1
#超过1秒写入慢查询日志
log-slow-queries = /data/3306/slow.log
#记录位置
log_queries_not_using_indexes
#没使用索引的日志记录到log
mysql> set global log_queries_not_using_indexes = ON;
mysql> show variables like ‘%indexe%%‘;
+-------------------------------+-------+
| Variable_name |Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF |
+-------------------------------+-------+
3、二进制日志(binary log)记录数据被修改的相关信息;
位置:[mysqld]
log-bin = /data/3306/mysql-bin
mysql> show variables like‘%log_bin%‘;
+---------------------------------+-------+
| Variable_name |Value |
+---------------------------------+-------+
| log_bin |ON |记录binlog
| log_bin_trust_function_creators | OFF |
| sql_log_bin |ON |临时不记录binlog
+---------------------------------+-------+
binlog
1、Statement Level模式(早期默认)
简介:每一条会修改数据的sql都会记录到master的bin-log中。Slave在复制的时候sql线程会解析成和原来master端执行过的相同语句来执行。
优点:不需要记录每一行数据的变化,减少bin-log的日志量,节约IO,提高性能。因为他只记录在master上所执行语句的细节,以及执行语句时候的上下文的信息。
缺点:很多新功能的加入在复制的时候容易导致出现问题。
2、Row Level 模式:
简介:日志中会记录成每一行数据被修改的模式,然后再slave 端在对相同的数据进行修改.
优点:在row level模式下,bin-log中可以不记录执行的sql语句的上下文相关的信息。仅仅只需要记录那一条记录被修改了。所以row level的日志内容会非常清楚记录下每一行数据修改的细节,非常容易理解。而且不会出现某些特点情况下的存储过程,或function 以及triggeer的调用和触发无法被正确复制的问题.
缺点:所有执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,可能会产生大量的日志呢。
3、Mixed (前两种的混合模式):根据执行的每一条具体的sql语句来区分对待记录日志的形式;
4、调整模式的方法:
查看当前:show variables like ‘$binlog_format%‘;
在配置文件修改:
[mysqld]
binlog_format=mixed
binlog_format=Row
binlog_format=Statement
在线修改立即生效方法:
登录mysql后:
set session binlog_format = ‘statement‘;
set session binlog_format =‘row‘;
set session binlog_format =‘mixed‘;
全局修改:set global binlog_format = "ROW" ;
退出登录后查看:show variables like "%binlog_format%";
全局修改:
set global binlog_format = "ROW" ;
set global binlog_format = ‘statement‘;
set global binlog_format = ‘mixed‘;
范例:
全局修改:set global binlog_format = "ROW" ; 注意是row 模式,查看区别
刷新binlog: mysqladmin -uroot -p123456 flush-logs
查看binlog: mysqlbinlog --base64-output=decode-rows -v mysql-bin.000005
本文出自 “思想大于技术” 博客,谢绝转载!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。