MySQL集群(一)之主从复制

  

  我们要学习的就是MySQL Replication

回到顶部(go to top)

一、配置mysql主从模式的原因

1)Mysql内建的复制功能是构建大型、高性能应用程序的基础。在实际企业应用环境当中,单台mysql数据库是不足以满足日后业务需求的。

  譬如当服务器发生故障,而没有备份服务器来提供服务时,业务就必须得停止,这样会对企业带来巨大的损失。
2)为了提高数据库服务器的稳定性,加快数据处理的效率,保护数据免受意外的损失,我们采用mysql的主从复制方式,分离对数据库的查询和更新操作,使用从服务器上备份的数据保证来数据的安全性和稳定性。

回到顶部(go to top)

二、Mysql主从复制的原理

1)MySQL 的 Replication 是一个异步的复制过程,从一个 MySQL instace(我们称之为 Master)复制到另一个MySQL instance(我们称之 Slave)。

  在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql 线程和IO 线程)在 Slave 端,另外一个线程(IO 线程)在 Master 端。

2)在执行这个主从复制之前,首先必须打开 Master 端的Binary Log(MySQL-bin.xxxxxx)功能,否则无法实现。
  在启动 MySQL Server 的过程中使用“log-bin” 参数选项
  在 my.cnf 配置文件中的 MySQLd 参数组中增加“log-bin” 参数项

回到顶部(go to top)

三、Mysql主从复制的过程

3.1、主从复制详细过程

  1) Slave 上面的IO 线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容。
  2) Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO 线程根据请求信息读取指定日志指定位置之后的日志信息,返回给 Slave 端的 IO 线程。

    返回信息中除了日志所包含的信息之外,还包括本次返回的信息在 Master 端的 Binary Log 文件的名称以及在 BinaryLog 中的位置。

  3)Slave 的 IO 线程接收到信息后,将接收到的日志内容依次写入到 Slave 端的RelayLog (中继日志文件)文件(MySQL-relay-bin.xxxxxx)的最末端,并将读取到的Master 端的bin-log 的文件名和位置记录到master-info 文件中,

    以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log 的哪个位置开始往后的日志内容,请发给我” 。
  4)Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文件中的内容成为在 Master 端真实执行时候的那些可执行的 Query 语句,并在自身执行这些 Query。

    这样,实际上就是在 Master 端和 Slave 端执行了同样的 Query,所以两端的数据是完全一样的。

3.2、Mysql主从复制过程的图形表示

  

回到顶部(go to top)

四、MySQL支持的复制类型与MySQL复制应用类型

4.1、MySQL支持的复制类型

  1)基于语句的复制statement:  在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制。

  2)基于行的复制row:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持

  3)混合类型的复制mixed: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

4.2、MySQL复制应用类型

  1)数据分布 (Data distribution )

  2)负载平衡(load balancing)

  3)读写分离(split reading and writting)

  4)高可用性和容错性 (High availability and failover )

回到顶部(go to top)

五、MySQL(主从复制)集群配置过程

环境:

  首先我虚拟机中安装了三台ubuntu操作系统:

  ubuntu的server版:1.0.0.3==server1

  ubuntu的desktop版(两台):1.0.0.5=udzyh1。1.0.0.6=udzyh2

  注意搭建MySQL集群的时候,MySQL的版本尽量一致,大版本必须一致。(本人使用5.7.19)

5.1、主节点配置(server1,1.0.0.3)

  1)首先进入到MySQL的配置文件中去

    sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

  2)修改、保存退出  

  [client]
  [mysqld]
  #bind-address=0.0.0.0

  server-id=11
  log-bin=mysql-bin-11
  binlog-format=row

    

  3)重启MySQL服务   sudo service mysql restart

5.2、从节点配置(1.0.0.5=udzyh1、1.0.0.6=udzyh2)    

  注意:所有从节点的配置都一模一样(主从复制,只能有一个主节点,可以用n多个从节点)

  1)首先进入到MySQL的配置文件中去

    sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

  2)修改、保存退出  

  [mysqld]
  #bind....

  server-id=12
  relay-log=mysql-relay-12

    

  3)重启MySQL服务   sudo service mysql restart

5.3、连接 

  1)在主节点的MySQL终端执行:
    grant replication slave,replication client on *.* to ‘zyh‘@‘%‘ identified by ‘123456‘;(在主节点创建一个用户)

  2)查看主节点的二进制文件名和插入位置

    show  master stauts \G

    

  3)在从节点的MySQL终端执行

  change master to
  master_host=‘1.0.0.3‘,(这里最好使用ip,其实写主机的也是可以的,但是一个局域网内主机名很多相同的话,会找不到)
  master_port=3306,
  master_user=‘zyh‘,
  master_password=‘123456‘,
  master_log_file=‘mysql-bin-11.000002‘,
  master_log_pos=1326;

  注意:n多个从节点都是相同的配置

  3)查看从节点的状态

    show slave status \G

        

5.4、开启主从复制

  start slave    

  

  1)查看所有数据库

    在主节点中:

      

    在从节点中:

      1)2)

  2)主节点创建一个数据库db_love在查看其它两个从节点,你会发现惊喜

回到顶部(go to top)

六、Replication管理和排错

  1)show master status ; 查看master的状态, 尤其是当前的日志及位置
  2)show slave status; 查看slave的状态. 
  3)reset slave ; 重置slave状态,用于删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件.会忘记 主从关系,它删除master.info文件和relay-log.info 文件
  4)start slave ; 启动slave 状态(开始监听msater的变化)
  5)stop slave; 暂停slave状态;
  6)set global sql_slave_skip_counter = n 跳过导致复制终止的n个事件,仅在slave线程没运行的状况下使用

原文地址:https://www.cnblogs.com/yixiaogo/p/11300514.html

时间: 2024-10-14 07:35:49

MySQL集群(一)之主从复制的相关文章

mysql集群一:主从复制,通过mysql-proxy做负载均衡

mysql集群架构方式很多,根据不同的需求做不一样的架构,简单一点的就是mysql的replication,也就是Mysql的复制功能,模式有:master-slaves,master-slaves-slaves,master-master-slaves等可以有多个分层,那么现在我所要说的是master-slaves的模式(其他的模式原理基本都一样),然后再通过mysql官方提供的Mysql-proxy实现读写分离,达到负载均衡的效果. 环境: 主机:master:192.168.1.109,s

MySQL Study之--MySQL集群之mysql 主从复制

MySQL Study之--MySQL集群之mysql 主从复制 MySQL 的数据库的高可用性的架构大概有以下几种:集群,读写分离,主备.而后面两种都是通过复制来实现的.下面将简单介绍复制的原理及配置 复制的原理 MySQL 复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新.删除等等).每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以便从服务器可以对其数据拷贝执行相同的更新. 将主服务器的数据拷贝到从服务器的一个途径是使用LOAD DATA FROM MAST

MySQL集群(二)之主主复制

前面介绍了主从复制,这一篇我将介绍的是主主复制,其实听名字就可以知道,主主复制其实就是两台服务器互为主节点与从节点.接下来我将详细的给大家介绍,怎么去配置主主复制! 一.主从复制中的问题 1.1.从节点占用了主节点的自增id 环境: 主节点:zyhserver1=1.0.0.3 从节点:udzyh1=1.0.0.5 第一步:我们在主节点中创建一个数据库db_love_1,在创建一个表tb_love(里面有id自增和name属性). create database db_love_1; use d

MySql 集群配置

MYSQL CLUSTER方案介绍 本文的大致框架来自罗志威.黄川的报告, 在它的基础上进行简化和修改一些bug并且添加了主从复制的章节,最后做出该文档 MySQL Cluster 是MySQL适合于分布式计算环境的高实用.高冗余版本.它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器.现在mysql cluster 被独立出来, 作为一个专门的产品进行运营, mysql-server-5.6+ 就不在存在对mysql cluster的支持,需要独立

103-MHA 高可用mysql集群

一.MHA简介 1.1.简介 MHA(Master HA ) 是一款开源的 MySQL高可用程序,它为MYSQL 主从复制架构提供了automating master failover 主节点自动迁移功能.MHA在监控到master节点故障时候,会自动提升拥有的数据最近进于主节点的其他从节点为主节点, 并且在此期间,会通过其他节点获取额外的信息来避免数据不一致性的问题.MHA也提供master节点的在线切换功能, 即按需切换master/slave节点. 1.2.MHA服务角色 MHA Mana

MySQL集群之Fabric部署使用

Fabric是Oracle公司开发的既有分片又有读写分离的MySQL集群管理工具,虽然个人觉得目前版本还有很多缺陷,但应该会逐步完善,将来会是一个不错的工具. 第一步:下载并安装 Fabric Fabric可以从MySQL官网下载,她属于MySQL Utilites里,官方下载地址是http://dev.mysql.com/downloads/utilities/ 我下载的是源码版的,mysql-utilities-1.5.6.zip,因为是Python所写,所以安装跟C语言的不同: $ unz

高可用mysql集群搭建

对web系统来说,瓶颈大多在数据库和磁盘IO上面,而不是服务器的计算能力.对于系统伸缩性我们一般有2种解决方案,scale-up(纵向扩展)和scale-out(横向扩展).前者如扩内存,增加单机性能,更换ssd等,虽然看似指标不治本而且比较昂贵,但确实是非常有效的,大多数应用的数据规模不是很大,当内存足够缓存下所有数据的时候,磁盘就没有什么压力了:后者譬如各类分布式解决方案,冗余磁盘阵列等. 在我看来,mysql读写分离是一个scale-up和scale-out的结合体,通过多个机器服务来提升

【MySQL大系】《Mysql集群架构》

原文地址(微信):[技术文章]<Mysql集群架构> 本文地址:http://www.cnblogs.com/aiweixiao/p/7258444.html 点击关注微信公众号 1.主要内容 1)mysql的架构,锁,最佳实践,事务 2)mysql的命令行,主从复制,索引,数据备份/恢复 3)mysql的集群,mysql的负载均衡,监控,mysql proxy 4)  mysql的MMM架构,mysql 的源码,DBA MySQL-从删除到跑路 2.具体内容 2.1)[架构]: [架构图]:

分布式MySQL集群方案的探索与思考

转载:http://www.infoq.com/cn/articles/exploration-of-distributed-mysql-cluster-scheme?utm_campaign=rightbar_v2&utm_source=infoq&utm_medium=articles_link&utm_content=link_text 背景 数据库作为一个非常基础的系统,任何一家互联网公司都会使用,数据库产品也很多,有Oracle.SQL Server .MySQL.Pos