通常只有即将执行完毕的语句才会写入到二进制日志中。但是一些特殊情况:语句附加的信息或直接代替语句被写入。

二进制日志记录的内容

作用:记录数据库中表的更变,用于复制和PITP(即时恢复)

基于语句SBR中复制的动作观察:

[root@localhost][(none)]> use boss;
Database changed
[root@localhost][boss]> create table tb1(text text);
Query OK, 0 rows affected (0.32 sec) [root@localhost][boss]> insert into tb1 values("Yeah!Repliacation");
Query OK, 1 row affected (0.06 sec) [root@localhost][boss]> select * from tb1;
+-------------------+
| text |
+-------------------+
| Yeah!Repliacation |
+-------------------+
1 row in set (0.00 sec) [root@localhost][boss]> flush logs;
Query OK, 0 rows affected (0.24 sec)
[root@localhost][boss]> show binlog events;
+------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+
| mysql_bin.000014 | 4 | Format_desc | 37306 | 123 | Server ver: 5.7.17-log, Binlog ver: 4 |
| mysql_bin.000014 | 123 | Previous_gtids | 37306 | 154 | |
| mysql_bin.000014 | 154 | Gtid | 37306 | 219 | SET @@SESSION.GTID_NEXT= 'a0c06ec7-fef0-11e6-9f85-525400a7d662:1' |
| mysql_bin.000014 | 219 | Query | 37306 | 320 | use `boss`; create table tb1(text text) |
| mysql_bin.000014 | 320 | Gtid | 37306 | 385 | SET @@SESSION.GTID_NEXT= 'a0c06ec7-fef0-11e6-9f85-525400a7d662:2' |
| mysql_bin.000014 | 385 | Query | 37306 | 457 | BEGIN |
| mysql_bin.000014 | 457 | Rows_query | 37306 | 524 | # insert into tb1 values("Yeah!Repliacation") |
| mysql_bin.000014 | 524 | Table_map | 37306 | 571 | table_id: 234 (boss.tb1) |
| mysql_bin.000014 | 571 | Write_rows | 37306 | 626 | table_id: 234 flags: STMT_END_F |
| mysql_bin.000014 | 626 | Xid | 37306 | 657 | COMMIT /* xid=42 */ |
| mysql_bin.000014 | 657 | Rotate | 37306 | 704 | mysql_bin.000015;pos=4 |
+------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+
11 rows in set (0.00 sec)
Event_type:事件类型,到5.6.12开始,已经有35中事件类型

二进制日志并不是一个单独文件,由一组存储实际内容的二进制日志文件和一个跟踪二进制日志文件存储位置的二进制日志索引文件

每一个二进制日志文件以格式描述事件开始(format description event),以日志轮换事件(rotate event)结束
格式描述事件包括:改文件的服务器版本号。服务器及二进制日志信息,还有一个标记,标记二进制日志文件是否正确关闭。如果正在写入二进制日志,则设置该标记,否则清除该标记(这样可以检测
出在奔溃时间中损坏的二进制日志文件,并允许通过复制进行恢复)
日志轮换包括:下一个二进制日志文件的名称及告知二进制日志继续写入到哪个文件 每个二进制日志有多个二进制日志事件,各个事件之间相互独立,同时也构成了二进制日志的基本单元。 SHOW BINLON EVENTS只会显示第一个二进制日志的内容。如果想看活动的二进制日志内容,可以SHOW BINLOG ENVENTS IN 'master-bin.000002'\G查看
[root@localhost][boss]> show binlog events in 'mysql_bin.000018';
+------------------+-----+----------------+-----------+-------------+---------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+----------------+-----------+-------------+---------------------------------------------------------------------+
| mysql_bin.000018 | 4 | Format_desc | 37306 | 123 | Server ver: 5.7.17-log, Binlog ver: 4 |
| mysql_bin.000018 | 123 | Previous_gtids | 37306 | 194 | a0c06ec7-fef0-11e6-9f85-525400a7d662:1-176 |
| mysql_bin.000018 | 194 | Gtid | 37306 | 259 | SET @@SESSION.GTID_NEXT= 'a0c06ec7-fef0-11e6-9f85-525400a7d662:177' |
| mysql_bin.000018 | 259 | Query | 37306 | 331 | BEGIN |
| mysql_bin.000018 | 331 | Rows_query | 37306 | 398 | # insert into tb1 values("Yeah!Repliacation") |
| mysql_bin.000018 | 398 | Table_map | 37306 | 445 | table_id: 234 (boss.tb1) |
| mysql_bin.000018 | 445 | Write_rows | 37306 | 500 | table_id: 234 flags: STMT_END_F |
| mysql_bin.000018 | 500 | Xid | 37306 | 531 | COMMIT /* xid=265 */ |
+------------------+-----+----------------+-----------+-------------+---------------------------------------------------------------------+
8 rows in set (0.00 sec) [root@localhost][boss]> show master status;
+------------------+----------+--------------+------------------+--------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+--------------------------------------------+
| mysql_bin.000018 | 531 | | | a0c06ec7-fef0-11e6-9f85-525400a7d662:1-177 |
+------------------+----------+--------------+------------------+--------------------------------------------+
1 row in set (0.00 sec)

  

传统的SLAVE复制的步骤
1 配置新的SLAVE
2 备份MASTER
3 记下备份对应的binlog位置
4 在新SLAVE上恢复备份
5 配置SLAVE从这个binlog位置开始复制

备份master,也叫克隆master

mysqldump --host=master --all-databases --master-data=1>backup-source.sql

  master-data:1 可以是mysqldump产生change master to 语句,参数为二进制日志文件及其位置

恢复到SLAVE

mysql --host=slave-1 < backup-source.sql

克隆SLAVE

通过slave创建新的 slave

通过slave-->slave,需要先停止slave

SQL>STOP SLAVE;

备份完成后,通过chage到slave中,即可


MySQL复制(二):二进制日志、二进制日志的结构和内容的更多相关文章

  1. MySQL复制(二)--基于二进制日志文件(binlog)配置复制

    基础环境:   主库 从库 服务器IP地址 192.168.10.11 192.168.10.12 版本 5.7.24 5.7.24 已存在的数据库 mysql> show databases; ...

  2. 深入MySQL复制(二):基于GTID复制

    相比传统的MySQL复制,gtid复制无论是配置还是维护都要轻松的多.本文对gtid复制稍作介绍. MySQL基于GTID复制官方手册:https://dev.mysql.com/doc/refman ...

  3. MySQL复制(二)Master-Slave复制实践

    1. 准备工作 首先要准备2台机器,分别安装mysql 我这里的版本是5.1.73,mysql数据库安装请参考:http://www.cnblogs.com/tangyanbo/p/4289753.h ...

  4. MySQL日志--二进制日志

    (一)什么是二进制日志 二进制日志(binlog)记录了数据库中所有的DDL和DML操作,但是不包括select语句,语句以"事件"的形式保存,记录了数据库的更改变化,在主从复制( ...

  5. (4.5)mysql备份还原——深入解析二进制日志(1)binlog的3种工作模式与配置

    (4.5)mysql备份还原——深入解析二进制日志(binlog) 关键词:二进制日志,binlog日志 0.建议 (1)不建议随便去修改binlog格式(数据库级别) (2)binlog日志的清理 ...

  6. 如何开启MySQL 5.7.12 的二进制日志

    1. 打开/etc下的my.cnf文件 2. 编辑它,添加内容: log_bin=binary-log   #二进制日志的文件名 server_id=1  #必须指定server_id,这是MySQL ...

  7. MySQL-五种日志(查询日志、慢查询日志、更新日志、二进制日志、错误日志)、备份及主从复制配置

    开启查询日志: 配置文件my.cnf: log=/usr/local/mysql/var/log.log 开启慢查询: 配置文件my.cnf: log-slow-queries=/usr/local/ ...

  8. MySQL复制应用中继日志解析

    前言:SQL线程应用中继日志,在binlog_format是row格式的时候,是居于主键更新,下面结合一张图来证明 1.从一个大神那边得到一张图片,SQL线程应用中继日志流程,下面就实验验证一下:(P ...

  9. 5-5配置Mysql复制 基于日志点的复制

    配置MySQL复制 基于日志点的复制配置步骤 设置简单密码(可以选择不需要) set GLOBAL validate_password_length=6; set global validate_pa ...

随机推荐

  1. js基础 js自执行函数、调用递归函数、圆括号运算符、函数声明的提升 js 布尔值 ASP.NET MVC中设置跨域

    js基础 目录 javascript基础 ESMAScript数据类型 DOM JS常用方法 回到顶部 javascript基础 常说的js包括三个部分:dom(文档document).bom(浏览器 ...

  2. php 按汉字首字母查询[转载]

    <?php function getfirstchar($s0){ //获取单个汉字拼音首字母.注意:此处不要纠结.汉字拼音是没有以U和V开头的 $fchar = ord($s0{0}); if ...

  3. excel文件打开乱码解决

    Excel在读取csv的时候是通过读取文件头上的bom来识别编码的,如果文件头无bom信息,则默认按照unicode编码读取.(这个bom是微软自己定义的一种文件头部协定,顾名思义存储在文件头部,存储 ...

  4. Shift Register(Using Submodule)

    /*************************************************** /  Shift Register module by Submodule /  Progra ...

  5. 通过虚拟驱动vivi分析摄像头驱动

    Linux摄像头驱动学习之:(二)通过虚拟驱动vivi分析摄像头驱动 一.通过指令 "strace -o xawtv.log xawtv" 得到以下调用信息: // 1~7都是在v ...

  6. mysql创建数据库时设置编码方式

    CREATE DATABASE procedure_function DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

  7. Linux学习之inode说明

    硬盘是常见的存储设备,最小单位叫做扇区,大小512kb. 文件存储在硬盘中,文件存储最小单位叫做块,大小通常为4k. iNode用于存放文件的元信息,元信息如下: 所有者 所有组 权限 时间戳,cti ...

  8. 解决Eclipse的dropins中svn插件不能加载的问题

    在eclipse的dropins中我们将svn的插件放到里边重启我们的ecplise就能正常加载svn插件了,如下图 但是有时候我们删除了svn的项目之后有可能我们的eclipse就不能正常加载svn ...

  9. iOS一些基础面试题

    Part One 别人问你你都感觉这尼玛说啥的基础面试题 1.UIWindow和UIView和 CALayer 的联系和区别? 答:UIView是视图的基类,UIViewController是视图控制 ...

  10. iOS敏捷开发之道,经常使用的宏定义总结

    iOS开发中,直接在pch文件里导入宏定义. 在做项目的时候,直接拿过来使用,能够大幅度提高开发速度. 以下是 个人总结的一些宏定义. 假设大家有其它的经常使用的宏定义.欢迎加入.我会定期更新这个bl ...