如果 Master 离线,您如何将 Master MySQL DB 与 Slave DB 更改重新同步?

11 mysql replication

MySQL Server 1 作为主服务器运行。
MySQL Server 2 作为 Slave 运行。

两个数据库都在线时,它们处于“完美同步”状态。如果Slave下线,Master还在线没有问题;一旦 Slave 再次在线,它们将恢复同步。

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

当Master重新上线时,有没有自动同步Master和Slave更新的方法?

Rol*_*DBA 8

实现这种性质的一种好方法是设置主-主复制或循环复制。这不要与多主复制混淆。

如果您设置了主从复制,则设置循环复制实际上非常容易。这是您需要执行的操作才能对其进行配置。

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

步骤 1) 将此行添加到 Master 上的 /etc/my.cnf。

日志从站更新

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

log-bin=mysql-bin(或者有任何 master 有这个) log-slave-updates

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

步骤3)在Slave上,service mysql restart

这将激活 Slave 上的二进制日志

步骤4)在Master上,service mysql stop

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

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

步骤6)在Slave上,service mysql stop

步骤7)在Slave上,找出最后的二进制日志

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

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

步骤10)在Master上,
用Slave的最后一个二进制日志编辑master.info的第2行。
master.info 的第 3 行,带有 Slave 的最后一个二进制日志的文件大小。
master.info 的第 4 行带有 Slave 的 IP。
第5行是复制用户的userid(DO NOT TOUCH)
第6行是复制用户的密码(DO NOT TOUCH)

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

步骤12)在Slave上,service mysql start,等待15秒

步骤13)在Master上,service mysql start

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

Step 15) 在 Slave 上,运行 CHANGE MASTER TO MASTER_HOST='IP of Slave',MASTER_USER='userid of replication user from Step10',MASTER_PASSWORD='password of replication user from Step10',MASTER_LOG_FILE='binary log from Step14', MASTER_LOG_POS=来自 Step14 的 LogPos。

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

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

我为我回答的另一个 StackExchange 问题执行了与此类似的步骤

试一试 !!!