想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
7年前关闭。
我需要为mysql设置主从设置。
1个主设备和1个从设备(复制)。
现在,这里的主要问题是:当主服务器发生故障时,是否可以将一个从服务器提升为主服务器。
然后,当旧的主服务器启动时,它将成为现在的从服务器。
最佳答案
您问题的答案是“是”,这里有instructions that must be followed。本质上,假设安德鲁是当前的奴隶,而安倍是当前的主人。交换两个:
检查Andrew,以确保sql-thread已尽可能多地完成处理。在mysql提示符下,运行SHOW PROCESSLIST
。 (您也可以通过使用MySQL Administrator查看当前连接来执行此操作。)IO线程和sql线程都应作为system_users列出。 IO线程应具有“读取失败的主事件后重新连接”状态。如果sql线程被完全捕获,则其状态应为“已读取所有中继日志;等待从属I / O线程对其进行更新”。如果这还说明其他问题(例如处理中继日志),则说明从站仍在追赶,您需要让它运行直到被追赶。
另一种执行此检查的方法是运行命令SHOW SLAVE STATUS \G
,然后查看继电器日志和位置。然后,您可以验证这确实是最新的中继日志,并使用mysqlbinlog实用程序来验证该位置是否为最新。请注意,您不能在从站状态输出中使用SECONDS_BEHIND_MASTER变量-如果从站无法连接到主站,则该变量将为null。
一旦安德鲁被赶上,将其重置。在MySQL提示符下,运行RESET SLAVE;。这将删除master.info文件,并使安德鲁摆脱束缚。
接下来,将所有二进制日志移动到一个临时目录。二进制日志将类似于andrew-bin.000001,其中andrew是主机名。此步骤并非绝对必要,但我不想删除日志文件。
现在,重置安德鲁的二进制日志。这将删除所有二进制日志,这就是我们在上一步中备份它们的原因。当我们将安倍带回美国时,这也将使安倍作为奴隶轻松地与安德鲁联系。为此,请运行RESET MASTER。在安德鲁。
在Andrew上编辑my.cnf,以注释掉read_only系统变量(如果已设置)。
在Andrew上重新启动mysql:/etc/init.d/mysql restart
将masterdb.janitors.com的cname更改为指向Andrew,而不是Abe。此步骤要求您的应用程序指向以前的setupmasterdb.janitors.com,而不是andrew.janitors.com之类的东西。
现在,Web应用程序应成功连接到Andrew作为主数据库。
安倍康复后,我们可以将他抚养为安德鲁的奴隶。第一步是在Abe上编辑my.cnf,并取消注释read_only系统变量。
在Abe上启动mysql(与上述命令相同)。请注意,这意味着不应将mysql设置为在计算机启动时自动启动。这是一项额外的安全措施。我不知道mysql是否会尝试任何类型的错误恢复,例如完成由于崩溃而无法完成的事务-但我们不希望它做任何会使它与Andrew不同的事情(它可能已经稍有不同,但是对此我们无能为力)。因此,通过在启动前将其设置为只读,我们确保对数据库的唯一更新是来自新主数据库的更新。
让安倍成为安德鲁的奴隶。在安倍市,跑步CHANGE MASTER TO MASTER_USER='replicator', MASTER_PASSWORD='password', MASTER_HOST='andrew.janitors.com', MASTER_LOG_FILE='andrew-bin.0000001', MASTER_LOG_POS=4;
我们知道日志文件中的确切位置,因为我们在步骤4中将其重置。此外,我们将master_host设置为andrew.janitors.com而不是masterdb.janitors.com,因为我们不一定希望将任何故障转移到单独的master(因为不同的母版将具有不同的二进制日志)。
关于mysql - 主从配置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14116488/