利用二进制还原数据库的时候,突然有点纠结,log_bin和sql_log_bin有什么区别呢?行吧,搜搜,结合自己的经验,简单说一下。
log_bin:二进制日志。

在 mysql 启动时,通过命令行或配置文件决定是否开启 binlog,而 log_bin 这个变量仅仅是报告当前 binlog 系统的状态(打开与否)。若你想要关闭 binlog,你可以通过修改 sql_log_bin 并把原来的连接 kill 掉,也可以修改 log_bin,然后重启 mysql,后者更彻底,缺点就是需要重启。
在配置文件或命令行中开启 binlog 时,可以为 log_bin 指定值(如–log_bin=mysql.bin),作为 binlog 文件的前缀名。

例如你UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的。

说白了,就是把把在mysql里面执行的语句,记录在二进制日志里面而已。
那么这些二进制日志有什么作用,你知道吗?
1:数据恢复 
如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失。 而且,你也可以利用二进制日志来还原你误操作的数据库。不过具体怎么操作还需要学的哟!

2:主从服务器之间同步数据 
主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行,以确保两个同步。因此,我们经常做的mysql-salva也是利用master的二进制日志来和master数据一致的。

二进制日志一般都不小,要是想关闭怎么办呢?
1:只有一个mysql服务器,那么可以简单的注释掉这个选项就行了。 
vim   /etc/my.cnf把里面的 log-bin 这一行注释掉,重启mysql服务即可。

那么sql_log_bin是什么东东?

sql_log_bin 是一个动态变量,修改该变量时,可以只对当前会话生效(Session),也可以是全局的(Global),当全局修改这个变量时,只会对新的会话生效(这意味当对当前会话也不会生效),因此一般全局修改了这个变量后,都要把原来的所有连接 kill 掉。

用处:
当还原数据库的时候,如果不关闭二进制日志,那么你还原的过程仍然会记录在二进制日志里面,不仅浪费资源,那么增加了磁盘的容量,还没有必要(特别是利用二进制还原数据库的时候)所以一般还原的时候会选择关闭二进制日志,可以通过修改配置文件,重启关闭二进制日志。也可以动态命令关闭sql_log_bin,然后导入数据库。

------------------------------------------------------------------------------------------------------------------------

二进制日志

1、二进制日志(binary log)介绍

  二进制日志(binary log):记录数据库里的数据被修改。

  (insert,update,delete,create,drop,alter)的相关语句;

  作用:增量数据恢复和主从复制;

2、二进制日志(binary log)调整

 mysql>  show variables like '%log_bin%';
+---------------------------------+---------------------------------------+
| Variable_name | Value |
+---------------------------------+---------------------------------------+
| log_bin | ON |记录binlog开关
| log_bin_basename | /usr/local/mysql/data/mysql-bin |
| log_bin_index | /usr/local/mysql/data/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |为OFF时,临时不记录binlog开关(增量恢复)某个时间点某些语句不记录binlog
+---------------------------------+---------------------------------------+

修改为临时不记录binlog,之后在进行数据操作,操作便不会记录到到二进制日志中。

 mysql> set session sql_log_bin = 0;
Query OK, 0 rows affected (0.00 sec) mysql> show variables like '%log_bin%';
+---------------------------------+---------------------------------------+
| Variable_name | Value |
+---------------------------------+---------------------------------------+
| log_bin | ON |
| log_bin_basename | /usr/local/mysql/data/mysql-bin |
| log_bin_index | /usr/local/mysql/data/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | OFF |
+---------------------------------+---------------------------------------+

查看日志

 [root@021rjsh216086s data]# mysqlbinlog -compact mysql-bin.000044
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#180117 16:29:53 server id 1 end_log_pos 120 CRC32 0xe9eec1e7 Start: binlog v 4, server v 5.6.38-log created 180117 16:29:53
# Warning: this binlog is either in use or was not closed properly.
BINLOG '
gQlfWg8BAAAAdAAAAHgAAAABAAQANS42LjM4LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAXAAEGggAAAAICAgCAAAACgoKGRkAAefB
7uk=
'/*!*/;
# at 120
#180117 16:30:29 server id 1 end_log_pos 199 CRC32 0xdf86372d Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1516177829/*!*/;
SET @@session.pseudo_thread_id=3/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1075838976/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 199
#180117 16:30:29 server id 1 end_log_pos 310 CRC32 0xc0c60628 Query thread_id=3 exec_time=0 error_code=0
use `test`/*!*/;
SET TIMESTAMP=1516177829/*!*/;
insert into class values (8,'咳咳') --这就是刚insert的数据,但是临时不记录binlog后,之后的insert语句就没进来
/*!*/;
# at 310
#180117 16:30:29 server id 1 end_log_pos 341 CRC32 0x8af81f01 Xid = 46
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

 

二进制日志的三种模式

  语句级:Statement (默认),包含的是原始的sql语句。

  行级:Row,包含的是行更改的信息。

  混合级:Mixed,前两种模式的结合,Mysql根据实际开销情况选择到底使用哪种模式。

 mysql>  show variables like '%binlog_format%';
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| binlog_format | STATEMENT | 默认是语句级
+---------------+-----------+
1 row in set (0.00 sec) mysql> set global binlog_format = 'ROW'; 将模式修改为行级
Query OK, 0 rows affected (0.00 sec) mysql> show variables like '%binlog_format%'; 必须退出,重新登录mysql,才能看到变成ROW
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| binlog_format | ROW |
+---------------+-----------+
1 row in set (0.00 sec)

  

之后插入一条语句 insert into class values (10,'行级');,再看二进制日志的内容

 [root@021rjsh216086s data]#  mysqlbinlog --base64-output='decode-rows' -v mysql-bin.000046         行级为row的必须用这种方式查
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#180117 17:17:17 server id 1 end_log_pos 120 CRC32 0xc178a01f Start: binlog v 4, server v 5.6.38-log created 180117 17:17:17
# Warning: this binlog is either in use or was not closed properly.
# at 120
#180117 17:17:32 server id 1 end_log_pos 192 CRC32 0x850ebcdb Query thread_id=13 exec_time=0 error_code=0
SET TIMESTAMP=1516180652/*!*/;
SET @@session.pseudo_thread_id=13/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1075838976/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 192
#180117 17:17:32 server id 1 end_log_pos 243 CRC32 0x6ab562be Table_map: `test`.`class` mapped to number 72
# at 243
#180117 17:17:32 server id 1 end_log_pos 290 CRC32 0x1371869f Write_rows: table id 72 flags: STMT_END_F
### INSERT INTO `test`.`class`
### SET
### @1=10
### @2='行级'
# at 290
#180117 17:17:32 server id 1 end_log_pos 321 CRC32 0x90e5a3ef Xid = 82
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

MySQL的log_bin和sql_log_bin 的区别的更多相关文章

  1. 用count(*)还是count(列名) || Mysql中的count()与sum()区别

    Mysql中的count()与sum()区别   首先创建个表说明问题 CREATE TABLE `result` (   `name` varchar(20) default NULL,   `su ...

  2. 第三章(附)mysql表类型MyISAM和InnoDB区别(决定了是否支持事务)

    mysql表类型MyISAM和InnoDB区别 MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问 ...

  3. (转)MySQL中In与Exists的区别

    背景:总结mysql相关的知识点. 如果A表有n条记录,那么exists查询就是将这n条记录逐条取出,然后判断n遍exists条件. select * from user where exists s ...

  4. MySQL中interactive_timeout和wait_timeout的区别【转】

    在用mysql客户端对数据库进行操作时,打开终端窗口,如果一段时间没有操作,再次操作时,常常会报如下错误: ERROR 2013 (HY000): Lost connection to MySQL s ...

  5. Mysql中函数和存储过程的区别

    Mysql中函数和存储过程的区别 存储过程: 1.       可以写sql语句 2.       inout,out构造返回值 3.       调用:call:存储过程名称 4.       可以 ...

  6. MySQL存储过程中的3种循环,存储过程的基本语法,ORACLE与MYSQL的存储过程/函数的使用区别,退出存储过程方法

    在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体 ...

  7. [转]Mysql几种索引类型的区别及适用情况

    此为转载文章,仅做记录使用,方便日后查看,原文链接:https://www.cnblogs.com/yuan-shuai/p/3225417.html Mysql几种索引类型的区别及适用情况   如大 ...

  8. MySQL redo log 与 binlog 的区别

    MySQL redo log 与 binlog 的区别 什么是redo log 什么是binlog redo log与binlog的区别 1. 什么是redo log? redo log又称重做日志文 ...

  9. mysql 时间类型datetime与timestamp区别比较

    mysql 时间类型datetime与timestamp区别比较 相同点: 显示宽度和格式相同,显示宽度固定在19字符,格式为YYYY-MM-DD HH:MM:SS. 不同点: (1)时间范围不同: ...

随机推荐

  1. Windows Server 2016-域站点链接及子网调整

    很多情况下我们在判别域控间或者域中各站点同步是否正常往往的操作内容就是查看两台域控间PING或者解析是否正常,或者查看双方防火墙是否关闭,但实际情况下我们需要注意的是,保证站点间Active Dire ...

  2. 编译.py为.pyc

    将test.py编译为.pyc文件,然后直接使用.pyc即可,防止源码外泄 import py_compile py_compile.compile(r'c:/test.py')compileall. ...

  3. f.lux 自动调节显示器色温

    我的环境 f.lux 我的使用感受是让屏幕看起来舒服一些,因为我有近视,所以需要保护眼睛. f.lux官网:https://justgetflux.com/ f.lux v4.47 windows 1 ...

  4. CentOS 7.0下解决ifconfig: command not found的方法

    在CentOS7.0中输入ifconfig命令会遇到-bash: ifconfig: command not found. 在CentOS最小安装时是没有附带ifconfig,我们进入sbin目录下可 ...

  5. March 09th, 2018 Week 10th Friday

    All good things must come to an end. 好景无常. Love is when the other person's happiness is more importa ...

  6. March 08th, 2018 Week 10th Thursday

    Easy come, easy go. 易得则易失. Easy come, easy go, I finally undestand the phrase through somewhat hard ...

  7. Understanding Docker

    What is Docker? Docker 是一个开源的平台,设计目标是可以方便开发,方便部署和方便执行应用.使用docker可以快速分发开发好的应用.借助于Docker,你可以将开发平台 和应用分 ...

  8. (转)Spring Boot(四):Thymeleaf 使用详解

    http://www.ityouknow.com/springboot/2016/05/01/spring-boot-thymeleaf.html 在上篇文章Spring Boot (二):Web 综 ...

  9. 创建线程时如果既传入了runnable对象,又继承thread重写了run方法,会执行的哪里的代码

    1 使用线程的方式,继承thread类,重写run方法 new Thread() { @Override public void run() { System.out.println("我是 ...

  10. WIN10 企业版 LTSC 激活

    Windows10 企业版长期服务支持分支版本: Windows 10 LTSC 2019 WIN+X 选POWERSHELL 管理员版本 输入以下 slmgr -ipk M7XTQ-FN8P6-TT ...