一.主从复制原理

利用MySQL提供的Replication,其实就是Slave从Master获取Binary log文件,然后再本地镜像的执行日志中记录的操作。由于主从复制的过程是异步的,因此Slave和Master之间的数据有可能存在延迟的现象,此时只能保证数据最终的一致性。

在master与slave之间实现整个复制过程主要由三个线程来完成:

1.Slave SQL thread线程,在slave端

2.Slave I/O thread线程,在slave端

3.Binlog dump thread线程(也可称为IO线程),在master端

注意:如果一台主服务器配两台从服务器那主服务器上就会有两个Binlog dump 线程,而每个从服务器上各自有两个线程。

网络上找的一张很清晰的交互图,流程可以详细描述为:

1、slave端的IO线程连接上master端,并请求从指定binlog日志文件的指定pos节点位置(或者从最开始的日志)开始复制之后的日志内容。

2、master端在接收到来自slave端的IO线程请求后,通知负责复制进程的IO线程,根据slave端IO线程的请求信息,读取指定binlog日志指定pos节点位置之后的日志信息,然后返回给slave端的IO线程。该返回信息中除了binlog日志所包含的信息之外,还包括本次返回的信息在master端的binlog文件名以及在该binlog日志中的pos节点位置。

3、slave端的IO线程在接收到master端IO返回的信息后,将接收到的binlog日志内容依次写入到slave端的relaylog文件(mysql-relay-bin.xxxxxx)的最末端,并将读取到的master端的binlog文件名和pos节点位置记录到master-info(该文件存slave端)文件中,以便在下一次读取的时候能够清楚的告诉master“我需要从哪个binlog文件的哪个pos节点位置开始,请把此节点以后的日志内容发给我”。

4、slave端的SQL线程在检测到relaylog文件中新增内容后,会马上解析该log文件中的内容。然后还原成在master端真实执行的那些SQL语句,并在自身按顺丰依次执行这些SQL语句。这样,实际上就是在master端和slave端执行了同样的SQL语句,所以master端和slave端的数据完全一样的。

二.如何实现?

这里在本地虚拟机模拟演示:

准备工作:两个虚拟机:我这里用的是CentOS5.5,IP地址分别是192.168.1.101 和192.168.1.105;

步骤:1.修改mysql的配置文件,打开二进制日志功能。  命令:# vi /etc/my.cnf 增加以下三行配置

log-bin=mysql-bin //将mysql二进制日志取名为mysql-bin

binlog_format=mixed //二进制日志的格式,有三种:statement/row/mixed,具体分别不多做解释,这里使用mixed

server-id=101 //为服务器设置一个独一无二的id便于区分,这里使用ip地址的最后一位充当server-id

然后修改从服务器的my.cnf文件,也添加以上内容,不过server-id的值为从服务器的标识。然后分别重启主、从mysql。

2.在主服务器为从服务器分配用户。命令:GRANT replication slave ON *.* TO 'slave'@'%' IDENTIFIED BY '111111';

3.查看主服务器BIN日志的信息(执行完之后记录下这两值,然后在配置完从服务器之前不要对主服务器进行任何操作,因为每次操作数据库时这两值会发生改变)。命令:show master status;

4.进入从服务器,执行以下命令设置master。

MASTER_HOST : 设置要连接的主服务器的ip地址

MASTER_USER : 设置要连接的主服务器的用户名

MASTER_PASSWORD : 设置要连接的主服务器的密码

MASTER_LOG_FILE : 设置要连接的主服务器的bin日志的日志名称,即第3步得到的信息

MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置,即第3步得到的信息,(这里注意,最后一项不需要加引号。否则配置失败)

然后执行start slave;命令启动从服务器。

5.查看是否配置成功。命令:show slave status;

上面两项为Yes说明配置成功。可以在主库更新数据测试从库是否会同步。

mysql 多项式_mysql主从复制原理及实现相关推荐

  1. mysql+数据库主从原理_MySQL主从复制原理及实现

    MySQL主从复制原理 MySQL主从复制主要基于MySQL的BIN log日志,bin log 日志中包含了几乎所有mysql增删改查的语句,所以bin log日志也是mysql用户备份和数据恢复的 ...

  2. mysql主主 主键冲突_mysql主从复制原理,主主复制时主键冲突解决

    主从复制原理: 1.master的增删改记录写入binlog: 2.slave的I/O Thread(负责读取master的binlog)读取binlog并将记录写入relaylog: 3.slave ...

  3. 动力节点老杜mysql文件_mysql主从复制+mysql主从复制延迟解决方案

    ### 1. 为什么需要mysql主从复制 1. 数据热备 在复杂的业务场景中, 可能因为某一条sql造成了锁表, 这样就会影响正常的业务运行.在复杂的业务场景中, 我们可以使用mysql主从复制, ...

  4. hibernate mysql 主从_MYSQL主从复制和写分离

    基础篇https://edu.51cto.com/course/19845.html https://edu.51cto.com/course/19845.html https://edu.51cto ...

  5. mysql主从_MySQL主从原理及配置详解

    MySQL主从配置及原理,供大家参考,具体内容如下 一.环境选择: 1.Centos 6.5 2.MySQL 5.7 二.什么是MySQL主从复制 MySQL主从复制是其最重要的功能之一.主从复制是指 ...

  6. 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变...

    [Mysql主从复制] 解决的问题 数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了. 负载均 ...

  7. mysql的主从复制优缺点_MySQL主从复制原理,超级详细的总结,看完全通了

    主从复制的方式 主从复制分为:异步复制,半同步复制和全同步复制 异步复制: 是MySQL默认的复制模式,主库在执行完客户端提交的事务之后会立刻将结果返回给客户端,并不关心从库接收的结果,这样就会导致当 ...

  8. java读取mysql配置文件_MySql主从复制,从原理到实践

    推荐阅读: 成功斩获头条offer,Java程序员心得分享给你春招助力 摘要 本文将从MySql主从复制的原理出发,详细介绍MySql在Docker环境下的主从复制搭建,以一个主实例和一个从实例实现主 ...

  9. mysql主从配置原理_MySQL主从复制原理

    MySQL主从复制是构建高可用MySQL的基础,复制就是让一台服务器的数据和其它服务器保持同步,一台主库可以同步到多台备库上面,备库也可以作为另一台服务器的主库.主库和备库之间可以有多种不同的组合方式 ...

最新文章

  1. CTF---Web入门第十题 Once More
  2. 用frontpage制作网页,字体大小用PT做单位好还是用PX做单位好?
  3. WebService安全 身份验证与访问控制
  4. .classpath 和.project文件含义
  5. Scala集合与Java集合的对比
  6. SqlServer SqlBulkCopy批量插入 -- 多张表同时插入(事务)
  7. P3899 [湖南集训]更为厉害(线段树合并、长链剖分、二维数点)
  8. form表单 vue 拖拽_vue实现可视化可拖放的自定义表单(代码示例)
  9. linux-5.12-rc1-dontuse
  10. ONNX系列五 --- 在C#中使用可移植的ONNX AI模型
  11. 原来这些网站功能这么强?做梦都没想到那些软件都不是他的对手!
  12. 未来的计算机想象,关于未来电脑的想象作文
  13. Image Gallery
  14. Adobe 全家桶系列卸载工具
  15. 关于sg90舵机的一点小想法
  16. 7.4V锂电池USB平衡充电器 串联锂电池充电器
  17. java getbytes 编码_Java String getBytes() encoding 编码转换
  18. 香帅的北大金融学课笔记18 -- 监管、创新、危机
  19. matlab 按照字符串运行,matlab中将字符串视为语句运行的方法——eval()函数
  20. Win10解决:系统管理员已阻止你运行此应用

热门文章

  1. c#switch语句判断成绩_switch语句成绩等级例子
  2. c if语句多个条件判断顺序_Java中的流程控制语句 (基础篇四)
  3. java restful文件传输_java中使用restful web service来传输文件
  4. c# 计算机ip,C# 获取电脑的IP,网关,MAC,计算机名。。
  5. Redis Scan 命令
  6. oracle删除orcl库_oracle删除数据文件
  7. python列表操作程序_Python入门篇(三)之列表
  8. int和Integer的比较
  9. java 如何跟多个字符串比较_Stack Overflow上370万浏览量的一个问题:如何比较Java的字符串...
  10. 使用反向传播算法计算参数的梯度并用python实现加法和乘法节点的反向传播