mysql主备有几种方式,mysql 主备 主从 主主模式介绍

mysql 主备 主从 主主模式介绍

单点故障的情况不可避免,而且单副本的存储方案早已无法满足业务的可靠性要求,单机可靠性就就两个9,也就是一年大概有3.65天不可用。因此一般情况下我们至少也会上个双机存储架构。凡事最好有个plan B。

主备

主:主机,备:备机。

主机的意思当然是以它为主了,读写都是主机上,而备机呢就是备用,默默的在背后吸收主机的数据,时刻待命着等待主机挂了之后取而代之(没这么坏哈哈)。因此在主机还活着的情况下,备机的唯一使命就是同步主机的数据,不对外提供服务。

e285c7ee00a3af0a29fced32fc401706.png

优点:简单,主备之间只有数据同步,不需要考虑别的情况。就很简单的配置一下,再搞一台服务器就能组成主备架构了。

缺点:备机等于就拿来备份,浪费了备机这台服务器的资源。上面说的不考虑别的情况指的是主机和备机它们两之间就只要复制数据,但是有些情况我们人还是得考虑的:主机挂了如何让备机上。

有三种选择

1.人工切换。人工切换时效性不高,出了事情首先你得开机,登录远程一阵啪啪得好几分钟或者万一你在LOL,黑铁晋级青铜最后一把努力了几个月即将晋升倔强青铜的一刻!是吧。还要万一在深夜或者说....是吧。

2.引入中间件。例如ZooKeeper、keepalived。就跟好多房东把房子委托给中介一样,这中间件就是个中介。全权由中介来打理主机和备机,它会根据机子状态来判别这时候是不是该备机上了。(建议)

3.主机备机之间状态传输(咱不找中介了,自己来打理),啥意思呢?就是除数据同步,主备之间还要有个状态传输过程,来让备机只要现在主机过得好不好,可以是主机主动推送它的状态给备机,或者是备机去索要状态。当状态拿不到或者不对的时候就开始主备切换。但是可能传输出现了波动啥的,导致备机误判了,然后备机升级为主机,这样就两主机了(下面会说主主的问题)。

主从

主:主机,从:从机

从机和备机的区别在于它得除了同步数据之外还得干活,对外提供读的操作,你可以理解为它是仆从。但是仆从和备机一样也有翻身做主人的一天,所以它也在默默的等待着主机挂了,取而代之。

89e0a1c11bf5f2ba0213f96210fea7dd.png

优点:充分利用了资源,嘿嘿不想备机这么爽了,还得出来干活,对外提供读操作。而且在主机挂了的时候,如果没任命新机主之前,读操作还是能用的。

缺点:

1.客户端需要多个判断,也就是不同操作需要发放给不同服务器,我上图主机提供读写,有时候读写分离了,主机就提供写。

2.主从延迟,读操作分配给从库,就会存在数据同步的延迟问题,比如某个人注册了账号之后,登录走的是从机,这时候数据还未从主机同步过来,那可不让人很难受了。有关主从延迟问题的一些解决办法

3.和主备一样的切换问题。(参考主备)

主主

主主就是两台都是主机。同时对外提供读写操作。客户端任意访问提供的一台。

51732ed697fa247396c2bd420b4e22a7.png

优点:主主的好处就是可以把写操作也分担一下,但是问题恰恰就出在写操作上,导致主主的架构有很大的局限性。

缺点:例如主机A有个注册的插入操作,生成的id是50,同一时刻主机B也有个插入操作生成的id也是50。然后它们之间的数据同步了,你说是谁覆盖谁呢?谁覆盖谁都不对!

因此主主只适用于可以双向复制,覆盖的数据(例如用户登录生成的token)。但是我们平日里绝大部分的数据都不允许。

结语

这种双机存储架构一般而言应用于一些业务量不大的场景。主要还是为了存储的可用性。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL GTID(Global Transaction ID)是MySQL 5.6以及之后版本中的一个特性,它用于在主从复制(replication)环境中确保数据同步的一致性。GTID会为每个事务分配一个全局唯一的标识符,使得在主从复制中可以准确地识别哪些事务已经在库上执行,并且哪些事务已经在从库上执行。 在MySQL主从复制环境中进行切换时,需要考虑以下几个方面: 1. 确认库和库的GTID模式相同 首先需要确认库和库的GTID模式相同,以确保复制数据的一致性。MySQL GTID模式有两种:基于语句(statement-based)和基于行(row-based)。在进行切换前,需要确认库和库使用的是相同的GTID模式。 2. 确认库的GTID已经追赶上库 在进行切换前,需要确保库已经完全追赶上了库。可以通过查看库和库的GTID位点(GTID_Pos)和GTID集合(GTID_Set)来确认。 3. 切换角色 在确认库已经追赶上库后,可以进行切换。切换角色需要在库上执行以下命令: ``` STOP SLAVE; RESET MASTER; CHANGE MASTER TO MASTER_HOST='<新的库IP>', MASTER_USER='<库用户名>', MASTER_PASSWORD='<库密码>', MASTER_AUTO_POSITION=1; START SLAVE; ``` 其中,`MASTER_HOST`、`MASTER_USER`和`MASTER_PASSWORD`分别指定了新的库的IP地址、用户名和密码。`MASTER_AUTO_POSITION=1`表示启用GTID模式,使库可以自动从新库获取复制数据。 4. 确认复制是否正常 在进行切换后,需要确认复制是否正常。可以通过查看库的状态(SHOW SLAVE STATUS)来确认复制是否已经启动,以及是否存在任何错误。在确认复制正常后,可以继续使用新的库进行数据读写操作。 ### 回答2: GTID(Global Transaction Identifier)是MySQL 5.6版本中引入的一个特性,它用于在数据库之间进行数据同步和切换。GTID是一个全局唯一的事务标识符,用来标记每个事务的唯一编号,包括在数据库和数据库上执行的事务。 在进行切换时,首先需要确保源端和目标端的数据是完全一致的。这可以通过启用GTID功能来实现。在数据库上启用GTID功能后,数据库上每个事务都会被分配一个全局唯一的事务标识符。数据库会记录下每个已经执行的事务标识符,以便在切换时能够准确地知道从哪个事务开始进行同步。 当需要进行切换时,首先需要将数据库提升为数据库,使其成为新的数据库。在新的数据库上执行事务时,会生成新的事务标识符。而旧的数据库会被作为新的数据库进行同步操作。 在进行切换时,需要遵循一定的步骤: 1. 在新的数据库上停止应用程序写入操作,确保所有的数据库上的事务都已经完成。 2. 确认数据库和数据库之间的数据已经完全同步,即数据库上已经记录下所有数据库上的事务标识符。 3. 将数据库提升为数据库,使其成为新的数据库。 4. 在新的数据库上重新启动应用程序写入操作。 通过GTID切换,可以实现数据库的高可用性和数据一致性。无论是源端还是目标端,都可以保持数据的完整性和一致性,从而提高系统的可用性和可靠性。 ### 回答3: MySQL GTID是一种全局事务标识符,用于在源端和目标端进行切换时提供数据一致性保证。GTID是基于二进制日志的,可以确保在切换过程中不会出现数据丢失或冲突。 在MySQL GTID切换中,首先需要确保源端和目标端的MySQL版本支持GTID复制。如果版本支持,需要在源端和目标端的配置文件中启用GTID模式,并将Binlog格式设置为ROW模式。 接下来,在源端执行FLUSH TABLES WITH READ LOCK语句,以停止写入,并确保所有事务都已提交。然后,使用SHOW MASTER STATUS命令获取源端的BINLOG文件名和POSITION。 在目标端,使用CHANGE MASTER TO语句将目标机连接到源端,并指定源端的BINLOG文件名和POSITION。然后,使用START SLAVE语句启动目标端的复制进程。此时,目标端将开始从源端复制数据,并且使用GTID标识每个已复制的事务。 当源端出现故障或需要进行维护时,需要将角色切换到目标端。这可以通过执行STOP SLAVE语句停止目标端的复制进程,并修改目标端的配置文件,将其变为库。接下来,使用RESET MASTER语句清除目标端的二进制日志,并使用CHANGE MASTER TO语句将目标端重新连接到自身。最后,使用START SLAVE语句启动目标端的复制进程。 通过GTID切换,我们可以确保源端和目标端之间的数据一致性,并且可以更方便地进行切换和故障恢复。需要注意的是,在切换角色之前,务必确保所有未提交或未复制的事务已完成,以避免数据丢失。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值