mysql从3.23开始提供复制功能,复制指将主库的ddl和dml操作通过binlog文件传送到从库上执行,从而保持主库和从库数据同步。mysql支持一台主库同时向多台从库复制,从库同时也可以作为其他从库的主库,从而实现级联复制功能。mysql复制功能相当于oracle数据库的逻辑dg功能。

mysql复制原理大致如下:

1)mysql主库事务提交时会把数据变更作为event记录在binlog文件中,mysql主库的sync_binlog参数控制binlog日志刷新到磁盘。

2)主库推送binlog中的event到从库的中继日志relay log中,之后从库根据中继日志重做数据变更操作,通过逻辑复制来达到与主库同步的目的。

mysql通过3个线程完成复制功能:其中binlog dump线程跑在主库上,io线程和sql线程跑在从库上。当从库启动复制(start slave)时,首先创建io线程连接主库,主库随后创建binlog dump线程读取event发送给io线程,io线程获取到event后更新到从库中继日志relay log中,之后从库sql线程根据relay log内容在从库从做操作。从而完成mysql复制功能。mysql复制结构如图:

主库通过show processlist命令可以看到binlog dump进程,如下:

mysql> show processlist \G;

*************************** 1. row ***************************

Id: 125

User: root

Host: localhost

db: test

Command: Query

Time: 0

State: init

Info: show processlist

*************************** 2. row ***************************

Id: 127

User: rep1

Host: 192.168.80.136:44889

db: NULL

Command: Binlog Dump

Time: 16991

State: Master has sent all binlog to slave; waiting for binlog to be updated

Info: NULL

2 rows in set (0.00 sec)

ERROR:

No query specified

mysql>

从库通过show processlist命令可以看到io线程和sql线程,如下:

mysql> show processlist \G;

*************************** 1. row ***************************

Id: 4

User: root

Host: localhost

db: test

Command: Query

Time: 0

State: init

Info: show processlist

*************************** 2. row ***************************

Id: 7

User: system user

Host:

db: NULL

Command: Connect

Time: 17079

State: Waiting for master to send event

Info: NULL

*************************** 3. row ***************************

Id: 8

User: system user

Host:

db: NULL

Command: Connect

Time: 17107

State: Slave has read all relay log; waiting for the slave I/O thread to update it

Info: NULL

3 rows in set (0.00 sec)

ERROR:

No query specified

mysql复制涉及到两种文件:binlog和relay log文件。其中根据binlog的不同设置,mysql复制分为3中模式。

复制的3中常见架构:一主多从、级联复制、双主架构

1)mysql一主多从架构:解决主库读请求压力解决方案。

2)mysql级联架构:解决一主多从架构中主库io和网络压力,缺点时额外增加了主库到从库的应用延迟,其中master2可以设置为blackhold(黑洞)模式来缓解复制延迟。

3)双主复制/dual master架构:

4)双主级联复制架构:

通过show master status查看主库状态:

mysql> show master status \G;

*************************** 1. row ***************************

File: dbking-bin.000004

Position: 1729

Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set:

1 row in set (0.00 sec)

ERROR:

No query specified

通过show slave status查看从库状态:

mysql> show slave status \G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.80.133

Master_User: rep1

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: dbking-bin.000004

Read_Master_Log_Pos: 1729

Relay_Log_File: chavinking-relay-bin.000010

Relay_Log_Pos: 714

Relay_Master_Log_File: dbking-bin.000004

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 1729

Relay_Log_Space: 1056

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 1

Master_UUID: 9b92b2a8-b7e0-11e6-81e4-000c29fa5a95

Master_Info_File: /usr/local/software/mysql-5.6.24-linux-glibc2.5-x86_64/data/master.info

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it

Master_Retry_Count: 86400

Master_Bind:

Last_IO_Error_Timestamp:

Last_SQL_Error_Timestamp:

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set:

Executed_Gtid_Set:

Auto_Position: 0

1 row in set (0.00 sec)

MySQL复制原理的更多相关文章

  1. MySQL复制原理-加强版

    mysql从3.23开始提供复制功能,复制指将主库的ddl和dml操作通过binlog文件传送到从库上执行,从而保持主库和从库数据同步.mysql支持一台主库同时向多台从库复制,从库同时也可以作为其他 ...

  2. mysql复制原理与机制一

    复制原理:复制需要二进制日志记录数据库上的改变 slave的IO线程复制把master上的Binary log读取到本地的relay log里SQL线程负责把relay log恢复到数据库数据里 sh ...

  3. mysql 复制原理与实践

    复制功能是将一个mysql数据库上的数据复到一个或多个mysql从数据库上. 复制的原理:在主服务器上执行的所有DDL和DML语句都会被记录到二进制日志中,这些日志由连接到它的从服务器获取,并复制到从 ...

  4. MYSQL复制原理及其流程

    Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其他主机(slave)上,并重新执行一遍来实现 ...

  5. mysql 复制原理详解

    http://www.cnblogs.com/kristain/articles/4142970.html

  6. MySQL复制之理论篇

    一.MySQL复制概述 MySQL支持两种复制方式:基于行的复制和基于语句的复制(逻辑复制).这两种方式都是通过在主库上记录 二进制日志.在备库重放日志的方式来实现异步的数据复制,其工作原理如下图: ...

  7. 31.Mysql复制

    31.Mysql复制复制是指将主数据库的DDL和DML操作通过二进制日志传到从数据库上,然后在从数据库上对重做日志,从而使从库与主库保持同步.Mysql支持一台主库同时向多台从库复制,从库也可以作为其 ...

  8. MySQL的复制原理及配置

    MySQL 的数据库的高可用性的架构大概有以下几种:集群,读写分离,主备.而后面两种都是通过复制来实现的.下面将简单介绍复制的原理及配置,以及一些常见的问题. 一.复制的原理 MySQL 复制基于主服 ...

  9. MySQL 复制 - 性能与扩展性的基石 1:概述及其原理

    1. 复制概述 MySQL 内置的复制功能是构建基于 MySQL 的大规模.高性能应用的基础,复制解决的基本问题是让一台服务器的数据与其他服务器保持同步. 接下来,我们将从复制概述及原理.复制的配置. ...

随机推荐

  1. Linux下profile与bashrc的区别

    /etc/profile./etc/bashrc.~/.bash_profile.~/.bashrc很容易混淆,他们之间有什么区别?它们的作用到底是什么?/etc/profile: 用来设置系统环境参 ...

  2. Linux关闭Tomcat为什么要用Kill,而不是shutdown.sh

    Linux关闭Tomcat为什么要用Kill,而不是shutdown.sh >>>>>>>>>>>>>>>&g ...

  3. centos7 python3.5中引入sqlite3

    在centos系统中创建Django app,报错如下: django.core.exceptions.ImproperlyConfigured: Error loading either pysql ...

  4. 如何删除一个CSDN上自己上传的资源

    原文地址:http://www.xuebuyuan.com/1875216.html 昨天晚上进行测试,上传了一个压缩包和大家分享,测试完成后,为了不想给被测试的公司造成伤害,决定把上传的包删除,结果 ...

  5. CMake区分32位64位

    IF(CMAKE_CL_64) set(platform x64) ELSE(CMAKE_CL_64) set(platform x86) ENDIF(CMAKE_CL_64)

  6. CentOS7安装ipython

    python版本:2.7.5 yum install -y python2-pip.noarchyum install -y python-develpip install ipython==5.4. ...

  7. 小北微信小程序之小白教程系列之 -- 样式(WXSS)

    为了适应广大的前端开发者,WXSS 具有 CSS 大部分 特性.同时为了更适合开发微信小程序,WXSS 对 CSS 进行了扩充以及修改.与 CSS 相比,WXSS 扩展的特性有:尺寸单位和样式导入. ...

  8. 【angularjs基础】ng-repeat嵌套循环报错angular.min.js:89 Error: [ngRepeat:dupes]

    再写嵌套循环的时候,提示一个错误 angular.min.js: Error: [ngRepeat:dupes] 代码如下 <table class="GridViewTable mt ...

  9. Android开发训练之第五章第三节——Transferring Data Without Draining the Battery

    Transferring Data Without Draining the Battery GET STARTED DEPENDENCIES AND PREREQUISITES Android 2. ...

  10. Material Design系列第三篇——Using the Material Theme

    Using the Material Theme This lesson teaches you to Customize the Color Palette Customize the Status ...