MySQL复制(二):二进制日志、二进制日志的结构和…
2018-06-17 23:30:30来源:未知 阅读 ()
通常只有即将执行完毕的语句才会写入到二进制日志中。但是一些特殊情况:语句附加的信息或直接代替语句被写入。
二进制日志记录的内容
作用:记录数据库中表的更变,用于复制和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中,即可
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- MySQL replace函数怎么替换字符串语句 2020-03-09
- PHP访问MySQL查询超时怎么办 2020-03-09
- mysql登录时闪退 2020-02-27
- MySQL出现1067错误号 2020-02-27
- mysql7.x如何单独安装mysql 2020-02-27
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash