• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > MySQL主从复制的原理及配置方法(比较详细)

MySQL主从复制的原理及配置方法(比较详细)

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了mysql主从复制原理,mysql主从同步原理,mysql主从原理,mysql 主从复制,mysql主从配置等相关知识,希望本文的分享对您有所帮助

一、复制的原理

MySQL 复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以便从服务器可以对其数据拷贝执行相同的更新。

将主服务器的数据拷贝到从服务器的一个途径是使用LOAD DATA FROM MASTER语句。请注意LOAD DATA FROM MASTER目前只在所有表使用MyISAM存储引擎的主服务器上工作。并且,该语句将获得全局读锁定。

MySQL 使用3个线程来执行复制功能,其中1个在主服务器上,另两个在从服务器上。当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句。
主服务器创建一个线程将二进制日志中的内容发送到从服务器。该线程可以识别为主服务器上SHOW PROCESSLIST的输出中的Binlog Dump线程。
从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志。   
第3个线程是SQL线程,是从服务器创建用于读取中继日志并执行日志中包含的更新。
有多个从服务器的主服务器创建为每个当前连接的从服务器创建一个线程;每个从服务器有自己的I/O和SQL线程。

二、复制线程的状态

1.复制主线程的状态

2.复制从I/O线程状态

Checking master version
建立同主服务器之间的连接后立即临时出现的状态。

Registering slave on master
建立同主服务器之间的连接后立即临时出现的状态。

Requesting binlog dump
建立同主服务器之间的连接后立即临时出现的状态。线程向主服务器发送一条请求,索取从请求的二进制日志文件名和位置开始的二进制日志的内容。

Waiting to reconnect after a failed binlog dump request
如果二进制日志转储请求失败(由于没有连接),线程进入睡眠状态,然后定期尝试重新连接。可以使用–master-connect-retry选项指定重试之间的间隔。

Reconnecting after a failed binlog dump request
线程正尝试重新连接主服务器。

Waiting for master to send event
线程已经连接上主服务器,正等待二进制日志事件到达。如果主服务器正空闲,会持续较长的时间。如果等待持续slave_read_timeout秒,则发生超时。此时,线程认为连接被中断并企图重新连接。

Queueing master event to the relay log
线程已经读取一个事件,正将它复制到中继日志供SQL线程来处理。

Waiting to reconnect after a failed master event read
读取时(由于没有连接)出现错误。线程企图重新连接前将睡眠master-connect-retry秒。

Reconnecting after a failed master event read
线程正尝试重新连接主服务器。当连接重新建立后,状态变为Waiting for master to send event。

Waiting for the slave SQL thread to free enough relay log space
正使用一个非零relay_log_space_limit值,中继日志已经增长到其组合大小超过该值。I/O线程正等待直到SQL线程处理中继日志内容并删除部分中继日志文件来释放足够的空间。

Waiting for slave mutex on exit
线程停止时发生的一个很简单的状态。</div>

3.复制从SQL线程状态

Has read all relay log; waiting for the slave I/O thread to update it
线程已经处理了中继日志文件中的所有事件,现在正等待I/O线程将新事件写入中继日志。

Waiting for slave mutex on exit
线程停止时发生的一个很简单的状态。</div>

三、复制传递和状态文件

从服务器靠中继日志来接收从主服务器上传回来的日志。并依靠状态文件来记录已经从主服务器接收了哪些日志,已经恢复了哪些日志。

中继日志与二进制日志的格式相同,并且可以用mysqlbinlog读取。SQL线程执行完中继日志中的所有事件并且不再需要之后,立即自动删除它。可以采用–relay-log和–relay-log-index服务器选项覆盖默认中继日志和索引文件名。其中索引文件名的作用是记录目前正在使用中继日志。

在下面的条件下将创建新的中继日志:
1.每次I/O线程启动时创建一个新的中继日志。
2.当日志被刷新时;例如,用FLUSH LOGS或mysqladmin flush-logs。
3.当当前的中继日志文件变得太大时。“太大”含义的确定方法:
max_relay_log_size,如果max_relay_log_size > 0
max_binlog_size,如果max_relay_log_size = 0
状态文件名默认为master.info和relay-log.info。其中IO线程更新master.info文件,SQL线程更新relay-log.info文件。
文件中的行和SHOW SLAVE STATUS显示的列的对应关系为:
master.info文件:

relay-log.info文件:

当备份从服务器的数据时,你还应备份这两个小文件以及中继日志文件。它们用来在恢复从服务器的数据后继续进行复制。如果丢失了中继日志但仍然有 relay-log.info文件,你可以通过检查该文件来确定SQL线程已经执行的主服务器中二进制日志的程度。然后可以用 Master_Log_File和Master_LOG_POS选项执行CHANGE MASTER TO来告诉从服务器重新从该点读取二进制日志。当然,要求二进制日志仍然在主服务器上。所以最好建议将自动删除中继日志的特性关闭,手工写shell角本来防止空间满的问题。

四、复制的配置步骤

1.创建专门用于复制的用户(建议这样做),从服务器采用该帐户登陆主服务器:

2.将数据库文件移到从服务器上

情况一:若只用到MyISAM表

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 深入mysql主从复制延迟问题的详解
  • MySQL主从同步、读写分离配置步骤
  • 解读mysql主从配置及其原理分析(Master-Slave)
  • Mysql主从同步备份策略分享
  • windows环境下mysql数据库的主从同步备份步骤(单向同步)
  • mysql主从同步快速设置方法
  • MySQL主从同步原理介绍
  • MySQL中主从复制重复键问题修复方法
  • Mysql主从复制(master-slave)实际操作案例
  • MySQL主从复制配置心跳功能介绍

相关文章

  • 2018-12-05PHP学习散记 2012_01_07(MySQL)
  • 2018-12-05mysql 编码设置命令
  • 2018-12-05MSSQL数据类型及长度限制详细说明
  • 2017-05-11mysql 常用命令集锦[绝对精华]
  • 2018-12-05Mybatis中#{}和${}有什么区别
  • 2018-12-05 MySQL基本调度策略浅析
  • 2018-12-05清空MSSQL日志 与set recovery simple
  • 2018-12-05SQL优化:很简单的一篇提高SQL性能的文章!
  • 2018-12-05SQL 外链接操作小结 inner join left join right join
  • 2018-12-05MSSQL 检查所使用的语句是否符合标准

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySQL与SQL的触发器的不同写法
    • MySQL快速删除所有表而不删除数据库的实现方法分享
    • 什么是mongoDB数据库
    • 如何查看MySQL的版本?
    • ACCESS的数据库的结构
    • 分享Mysql免安装版设置密码的3种方法
    • mysql limit高级用法示例
    • Mysql中limit的用法详解
    • SQL 比较一个集合是否在另一个集合里存在的方法分享
    • 解析MySQL数据库性能优化的六大技巧

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有