[数据库/MYSQL]MYSQL开启Bin-Log
1 概述: MYSQL数据库的二进制日志————bin log
什么是二进制日志(binlog)?
MySQL的二进制日志binlog,可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是【事务安全型】的。
binlog是记录所有数据库表结构变更(例如CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…)的二进制日志。
binlog不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,但你可以通过查询通用日志来查看MySQL执行过的所有语句。
二进制日志包括两类文件:
二进制日志索引文件(文件名后缀为.index),用于记录所有的二进制文件
二进制日志文件(文件名后缀为.00000*),用于记录数据库所有的DDL和DML(除了数据查询语句)语句事件。
什么是事务日志?
事务日志的目的:实例或者介质失败,事务日志文件就能作为备份数据而派上用场。
innodb事务日志包括:
redo log : 指事务开始之前, 在操作任何数据之前,首先将需操作的数据备份到一个地方
undo log : 指事务中操作的任何数据,将最新的数据备份到一个地方
- redo log 事务日志
不是随着事务的提交才写入的,而是在事务的执行过程中,便开始写入redo 中。
具体的落盘策略可以进行配置 。
防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的未入磁盘数据进行持久化这一特性。
RedoLog是为了实现事务的持久性而出现的产物

- undo log 事务日志
用来回滚行记录到某个版本。
事务未提交之前,Undo保存了未提交之前的版本数据,Undo中的数据可作为数据旧版本快照供其他并发事务进行快照读。
undo log是为了实现事务的原子性而出现的产物,在Mysql innodb存储引擎中用来实现多版本并发控制

写 Binlog 的时机? sync_binlog
对支持事务的引擎如InnoDB而言,必须要提交了事务才会记录binlog。binlog 什么时候刷新到磁盘跟参数 sync_binlog 相关。
- 如果设置为0,则表示MySQL不控制binlog的刷新,由文件系统去控制它缓存的刷新;
- 如果设置为不为0的值,则表示每 sync_binlog 次事务,MySQL调用文件系统的刷新操作刷新binlog到磁盘中。
- 设为1是最安全的,在系统故障时最多丢失一个事务的更新,但是会对性能有所影响。
sync_binlog的设置
如果 sync_binlog=0 或 sync_binlog大于1,当发生电源故障或操作系统崩溃时,可能有一部分已提交但其binlog未被同步到磁盘的事务会被丢失,恢复程序将无法恢复这部分事务。
在MySQL 5.7.7之前,默认值 sync_binlog 是0,MySQL 5.7.7和更高版本使用默认值1,这是最安全的选择。一般情况下会设置为100或者0,牺牲一定的一致性来获取更好的性能。
【二进制日志处理事务】和【非事务性语句】的区别?
在事务性语句(update)执行过程中,服务器将会进行额外的处理,在服务器执行时多个事务是并行执行的,为了把他们的记录在一起,需要引入事务日志的概念。在事务完成被提交的时候一同刷新到二进制日志。
对于非事务性语句(insert,delete)的处理。遵循以下3条规则:
1)如果非事务性语句被标记为事务,那么: 将被写入重做日志(redo log)。
2)如果没有标记为事务,而且重做日志中没有,那么: 直接写入二进制日志(bin log)。
3)如果没有标记为事务,但是重做日志中有,那么: 写入重做日志(redo log)。
注意: 如果在一个事务中有非事务性语句,那么: 将会利用规则2,优先将该影响非事务表语句直接写入二进制日志。
Binlog日志的应用场景
- MySQL主从复制:MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves来达到master-slave数据一致的目的
- 数据恢复:通过使用 mysqlbinlog 工具来使恢复数据
Binlog日志的代价
一般来说,开启binlog日志大概会有1%的性能损耗
2 操作步骤(Windows系统下: my.ini)
step1 查看MYSQL是否开启 bin log
bin-log的默认配置: 关闭(OFF)
mysql> show variables like 'log_bin'
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | OFF |
+---------------+-------+
1 row in set, 1 warning (0.10 sec)

step2 若为OFF,则需开启 bin log
mysql-version: 5.7.19
my.ini文件默认不允许修改,需要右键“管理员取得所有权”之后才能保存修改。
- step2.1 配置
bin log
在打开my.ini文件,在mysqld下面添加
# Binary Logging
log-bin=mysql-bin
# 【binlog 日志存放路径】若提供的全路径,则: 生成的日志文件就在指定的路径下;若仅提供的1个文件名称(Eg: mysql-bin),则:生成的binlog日志的位置在data目录下(eg: D:\Program Files(x86)\MySQL\db-data)
binlog-format=ROW
# 【日志中会记录成每⼀一⾏行行数据被修改的形式】
# Server Id
server-id=1
# 【指定当前机器的服务 ID(如果是集群,则不能重复)】

Binlog常见格式:

- step2.2 重启mysql服务
保存文件,重启mysql服务
cmd(管理员权限)> sc stop mysql
cmd(管理员权限)> sc start mysql
cmd(管理员权限)> sc query mysql

step2.3 确认/查验 是否mysql开启成功了binlog
mysql> show variables like '%log_bin%';
+---------------------------------+-----------------------------------------------------+
| Variable_name | Value |
+---------------------------------+-----------------------------------------------------+
| log_bin | ON |
| log_bin_basename | D:\Program Files(x86)\MySQL\db-data\mysql-bin |
| log_bin_index | D:\Program Files(x86)\MySQL\db-data\mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+-----------------------------------------------------+
6 rows in set, 1 warning (0.00 sec)

若
log-bin配置项提供的全路径,则: 生成的日志文件就在指定的路径下;若仅提供的1个文件名称(Eg: mysql-bin),则:生成的binlog日志的位置在data目录下(eg: D:\Program Files(x86)\MySQL\db-data)

3 操作步骤(Linux系统下: my.cnf)
配置文件 :
/etc/my.cnf
log-bin=/var/lib/mysql/mysql-bin
binlog-format=ROW
server_id=1
X 参考文献
- Mysql的Binlog原理 - CSDN
- MySQL Binlog 介绍 - CSDN
- WINDOWS下MYSQL开启BINLOG - 博客园
- Windows下Mysql5.7开启binlog步骤及注意事项 - 博客园
- [Windows]CMD命令入门教程 与 Windows常见维护问题 - 博客园/千千寰宇
[数据库/MYSQL]MYSQL开启Bin-Log的更多相关文章
- MySQL日志系统bin log、redo log和undo log
MySQL日志系统bin log.redo log和undo log 今人不见古时月,今月曾经照古人. 简介:日志是MySQL数据库的重要组成部分,记录着数据库运行期间各种状态信息,主要包括错误日 ...
- MySQL通过bin log日志恢复数据|手撕MySQL|对线面试官
关注微信公众号[程序员白泽],进入白泽的知识分享星球 前言 作为<手撕MySQL>系列的第二篇文章,今天介绍一下MySQL的二进制日志(bin log),注意不要和MySQL的InnoDB ...
- 谈谈MySQL bin log的写入机制、以及线上的参数是如何配置的
目录 一.binlog 的高速缓存 二.刷盘机制 三.推荐的策略 推荐阅读 问个问题吧!为什么你需要了解binlog的落盘机制呢? 我来回答一下: 上一篇文章提到了生产环境中你可以使用binlog ...
- 深入学习MySQL 02 日志系统:bin log,redo log,undo log
上一篇文章中,我们了解了一条查询语句的执行过程,按理说这篇应该讲一条更新语句的执行过程,但这个过程比较复杂,涉及到了好几个日志与事物,所以先梳理一下3个重要的日志,bin log(归档日志).redo ...
- 【Mysql】三大日志 redo log、bin log、undo log
@ 目录 redo log(物理日志\重做日志) binlog(逻辑日志/归档日志) update语句执行流程 Uodolog(回滚日志/重做日志) undo log+redo log保证持久性 re ...
- MySQL数据库远程连接开启方法
有时候需要远程连接mysql数据库,默认是不可以的,可以参考下面的方法,解决下. 1.登陆自己机器的MySQL数据库:mysql -uroot -p密码 设置root用户可以任意IP访问,代码如下(可 ...
- mysql开启general log的方法
因为为了性能考虑,一般general log不会开启.slow log可以定位一些有性能问题的sql,而general log会记录所有的SQL. mysql5.0版本,如果要开启slow log.g ...
- 数据库之mysql
安装mysql-server时连同客户端与perl环境一起安装了 centos6.5安装mysql[root@localhost ~]# yum install mysql-server Instal ...
- MySQL 二进制日志(Binary Log)
同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分. MySQL有几种不同的日志文件.通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等.这些日志能够帮助我们定位mysqld ...
- 数据库 - 初识MySQL - 介绍/安装
一.介绍: mysql数据库管理软件: 套接字:服务端,客户端:客户端可访问服务端得数据 1.支持并发:操作得是共享得数据 2.处理锁,数据安全,性能 3.用别人得软件,得照着别人得规范,组织自己得语 ...
随机推荐
- linux 离线安装mysql 配置开机自启动
系统版本:centos7.8 | mysql版本:5.7.35 安装配置mysql数据库 mysql数据库配置开机自启动 1. 安装配置mysql数据库 mysql版本:5.7.35 点击下载 提取码 ...
- STL练习-简单计算器
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔.没有非 ...
- MySQL_GTID主从同步排错
1 在Master上 查询gtid后,记录gtid_executed 返回的值 mysql> show global variables like '%gtid%'\G ************ ...
- 深入理解Linux系统调用
1.系统调用号查询 我的学号位数是08,在64位调用表里可以查到对应的系统调用函数是__x64_sys_lseek 2.lseek函数 由于没用过该函数,所以先去了解一下这个函数的作用: 直白的说就是 ...
- 循环文件夹汇总所有下载发票的Excel文件数据
Dim a As String, n As Integer, wbs As Workbook ThisWorkbook.Sheets(1).Cells.Clear a = Dir(ThisWorkbo ...
- manjaro日常使用之deepinTIM问题解决
今天很高兴,因为我在我的manjaro+kde桌面上成功运行了deepinTIM.这样我离摆脱Windows使用的事业又更近了一步.众所周知,如果安装了kde桌面,deepinQQ的方案就无法运行,安 ...
- 获取指定网卡的ip
#!/usr/bin/env python # -*- coding: utf-8 -*- import socket import fcntl import struct def get_ip_ad ...
- win10无管理员权限下以压缩包方式安装JDK8
使用场景:如果在没有管理员权限的情况下,无法运行.exe文件,可以使用这种方式安装,本次把JDK安装到D:\jdk-8u152 一:获取JDK8的压缩包 1.JDK8 华为镜像地址 2.将下载好的ex ...
- 将map转成vo实体
//将map转成vo实体 AssetManagementProductsVO param= JSON.parseObject(JSON.toJSONString(map), AssetManageme ...
- python实现简单猜数字游戏
#!/usr/bin/env python import os import random import sys import time def yanse(s): print('\033[25;31 ...