mysql f0 9f 99 87_MySQL复制(二):二进制日志、二进制日志的结构和内容

本文详细介绍了MySQL的二进制日志(Binary Log)工作原理,包括其记录的内容、事件类型、日志轮换以及在数据库复制和即时恢复中的作用。通过示例展示了如何查看和理解二进制日志事件,以及传统SLAVE复制的步骤。内容涵盖格式描述事件、日志轮换事件、二进制日志事件类型如Query、Rows_query等。
摘要由CSDN通过智能技术生成

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

二进制日志记录的内容

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

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

[root@localhost][(none)]> useboss;Databasechanged[root@localhost][boss]> create table tb1(text text);

Query OK,0 rows affected (0.32sec)[root@localhost][boss]> insert into tb1 values("Yeah!Repliacation");

Query OK,1 row affected (0.06sec)[root@localhost][boss]> select * fromtb1;+-------------------+

| text |

+-------------------+

| Yeah!Repliacation |

+-------------------+

1 row in set (0.00sec)[root@localhost][boss]>flush logs;

Query OK,0 rows affected (0.24sec)[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中事件类型

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

540f36896941b8d14cb7ef823fa48701.png

每一个二进制日志文件以格式描述事件开始(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

7fd2139a1308983bc476718c826beba8.png

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

SQL>STOP SLAVE;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值