如果主服务器离线,如何将主MySQL数据库与从数据库更改重新同步?


11

MySQL Server 1以Master身份运行。
MySQL Server 2作为从属服务器运行。

两个DB都联机时,它们处于“完美同步”状态。如果从站脱机,则Master仍然在线也没有问题;从站再次联机后,它们将恢复同步。

除了服务器配置之外,如果主服务器脱机,我将重定向从服务器DB的连接(使用JSP代码)(我当然使用/etc/init.d/mysqld stop进行了测试)。

当主服务器重新联机时,是否有任何自动方法将主服务器与从设备更新同步?

Answers:


8

实现这种性质的一种好方法是设置主-主复制或循环复制。请勿将此与MultiMaster Replciation混淆。

如果已设置主从复制,则设置循环复制实际上非常容易。这是您需要进行配置的步骤。

对于此示例,我们将假定主从复制处于活动状态,但是您会遇到一些停机时间(1-2分钟):

步骤1)将此行添加到主服务器上的/etc/my.cnf。

日志从属更新

步骤2)将这些行添加到从站上的/etc/my.cnf中:

log-bin = mysql-bin(或具有此功能的主服务器)log-slave-updates

警告:这是短暂的停机时间!!!

步骤3)在从站上,服务mysql重新启动

这将激活从站上的二进制日志

步骤4)在Master上,服务mysql停止

步骤5)使用rsync将Slave的/ var / lib / mysql文件夹复制到Master。

警告:这是更长的停机时间!

步骤6)在从站上,服务mysql停止

步骤7)在从站上,找到最后一个二进制日志

步骤8)在从站上,找到最后一个二进制日志的文件大小

步骤9)使用rsync将Slave的/ var / lib / mysql文件夹复制到Master。这应该是一个更快的副本。

步骤10)在Master上,
使用Slave的最后一个二进制日志编辑master.info的第2行。
master.info的第3行包含从站的最后一个二进制日志的文件大小。
master.info的第4行,带有从站的IP。
第5行是复制用户的用户ID(请勿触摸)
第6行是复制用户的密码(请勿触摸)

步骤11)删除Master的所有二进制日志和二进制日志索引文件。

步骤12)在Slave上,服务mysql启动,等待15秒

步骤13)在Master上,服务mysql启动

步骤14)在主机上,运行STOP SLAVE;显示主状态;

步骤15)在从站上,运行CHANGE MASTER TO MASTER_HOST ='从站IP',MASTER_USER ='来自步骤10的复制用户的用户名',MASTER_PASSWORD ='来自步骤10的复制用户的密码',MASTER_LOG_FILE ='来自步骤14的二进制日志', MASTER_LOG_POS =来自Step14的LogPos。

步骤16)在Slave上,运行START SLAVE;

步骤17)在Master上,运行START SLAVE;

对于另一个已回答的StackExchange问​​题,我执行了与此类似的步骤

试试看 !!!


非常好!是否可以有多个从属数据库同步到主数据库,更像是“主-主-主”解决方案?
Herberth Amaral 2012年

这使我的设置无法修复。必须完全重新安装我的VPS。我想我会在下一次阅读狡猾的建议之前先做个快照。
Vasili Syrakis

@VasiliSyrakis对不起,您觉得我的建议不可靠。尽管如此,在我作为MySQL DBA的10年中,当我重新对齐二进制日志以进行复制时,我从未破坏过VPS或MySQL安装。多年来,我一直为Drupal和Wordpress客户做到这一点,而没有发生任何事故。对不起,我的建议。
RolandoMySQLDBA 2014年

嗯 我不建议使用rsync复制正在运行的实例。我将使用Percona XtraBackup从从属服务器重新初始化主服务器。另外,log-slave-updates除非主机将要有其他从机,否则您不需要。
Bill Karwin 2014年

2

MySQL不提供异步复制功能。您刚刚知道为什么“开箱即用”的MySQL复制(5.5之前的版本)本身并不是高可用性解决方案的。使用半同步复制5.5(http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html)会使情况稍微好一些,但是会因为事务处理时间变慢而导致主服务器等待从奴隶确认。

如果不能接受主机故障时数据丢失的可能性,我想说的是,要比简单的主机/从机更复杂的设置。

许多MySQL著名人士认为,从主复制到主复制比麻烦多于收益(甚至MySQL AB本身也不再建议将其作为高可用性解决方案)。因此,我认为您实际上需要使用DRBD设置来使用块级副本使主动主机和被动从机保持同步。


1
我自己爱DRBD。我定期与许多使用ucarp作为我的故障转移机制的客户合作。如果数据库全部为InnoDB,则DRBD实际上非常适合HA,并且非常适合HA使用。故障转移期间打开的任何MyISAM表都被标记为已崩溃,即使在DRBD Secondary中也是如此。当故障转移到新的DRBD主数据库时,InnoDB才进行崩溃恢复。因此,我看到DRBD和InnoDB一起使用。谢谢您提出DRBD的明智之举。+1为您的答案。
RolandoMySQLDBA 2011年

谢谢:),我想我的答案是,如果您非常关心副本之间的数据一致性,那么您已经是InnoDB了:)
TechieGurl 2011年

1

恕我直言,首先,在非多主设备(主设备/从设备)配置中,您的从设备绝对不要写入。应该配置从属my.cnf并以以下方式启动服务器:

# Flag to not take writes from network
read-only

接下来,要解决主机与意外写入的可写从服务器不同步的问题,必须在两个主机上进行数据差异处理。如果没有按键冲突,则应提升以前的从属主机为主控,并将旧的主控主机重新映像为从新的主控主机复制的从属主机。(这里可能/可能有数据问题)

最后,如果这种断电/停机的情况甚至有可能继续发生,请花点时间将两台主机都设置为多主机(日志箱,服务器ID,偏移量等)。这将在某种程度上帮助您减少停机和停机时间。

如果您必须运行master / slave,则至少可以获得一些奖励积分,用于分隔ACL和应用程序中的读写用户连接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.