Mysql 主从配置
我需要为mysql设置一个主从设置 1个主设备和1个从设备(复制) 现在这里的主要问题是:当主设备出现故障时,是否有可能将从设备升级为主设备。Mysql 主从配置,mysql,linux,Mysql,Linux,我需要为mysql设置一个主从设置 1个主设备和1个从设备(复制) 现在这里的主要问题是:当主设备出现故障时,是否有可能将从设备升级为主设备。 那么,当旧主人站起来时,它现在将成为奴隶。你的问题的答案是“是”,这里有。基本上,假设安德鲁是当前的奴隶,安倍是当前的主人。要将两者互换: 检查Andrew以确保sql线程已尽可能多地完成处理。在mysql提示符下,运行showProcessList。(您也可以通过使用MySQL管理员查看当前连接来完成此操作。)IO线程和sql线程都应作为系统用户列出。
那么,当旧主人站起来时,它现在将成为奴隶。你的问题的答案是“是”,这里有。基本上,假设安德鲁是当前的奴隶,安倍是当前的主人。要将两者互换: 检查Andrew以确保sql线程已尽可能多地完成处理。在mysql提示符下,运行
showProcessList
。(您也可以通过使用MySQL管理员查看当前连接来完成此操作。)IO线程和sql线程都应作为系统用户列出。IO线程的状态应为“读取主事件失败后重新连接”。如果sql线程被完全捕获,它的状态应该是“已读取所有中继日志;等待从I/O线程更新”。如果这说明了其他的事情(比如处理中继日志),那么从机仍然在追赶,您需要让它运行,直到它被追赶为止
执行此检查的另一种方法是运行命令SHOW SLAVE STATUS\G
,并查看继电器日志和位置。然后,您可以验证这确实是最新的中继日志,并使用mysqlbinlog实用程序验证位置是否是最新的。请注意,您不能在从机状态输出中使用SECONDS_BEHIND_master变量-如果从机无法连接到主机,则该变量将为null
一旦Andrew被抓到,重新设置它。在MySQL提示符下,运行RESET SLAVE;。这将删除master.info文件,并将安德鲁从束缚链中解放出来
接下来,将所有二进制日志移动到临时目录。二进制日志看起来像andrew-bin.000001,其中andrew是主机名。这一步并非绝对必要,但我不喜欢删除日志文件
现在为Andrew重置二进制日志。这将删除所有二进制日志,这就是我们在上一步中备份它们的原因。当我们把安倍带回来时,这也将使安倍很容易与安德鲁建立起奴隶关系。要执行此操作,请运行重置主机;安德鲁
在Andrew上编辑my.cnf,注释掉只读系统变量(如果已设置)
在Andrew上重新启动mysql:/etc/init.d/mysql Restart
将masterdb.janitors.com cname更改为指向Andrew,而不是Abe。此步骤要求应用程序指向以前的setupmasterdb.janitors.com,而不是像andrew.janitors.com这样的东西
web应用程序现在应该成功地连接到Andrew作为主数据库
一旦安倍康复,我们可以把他当作安德鲁的奴隶抚养长大。第一步是在Abe上编辑my.cnf,并取消对只读系统变量的注释
在Abe上启动mysql(与上面的命令相同)。请注意,这意味着mysql不应设置为在机器启动时自动启动。这是额外的安全措施。我不知道mysql是否会尝试任何类型的错误恢复,比如完成由于崩溃而无法完成的事务——但我们不希望它做任何会使其与Andrew不同的事情(可能已经略有不同,但我们对此无能为力)。因此,通过在启动数据库之前将其设置为只读,我们可以确保对数据库的唯一更新是来自新主机的更新
让安倍成为安德鲁的奴隶。安倍,快跑
将MASTER更改为MASTER\u USER='replicator',MASTER\u PASSWORD='PASSWORD',MASTER\u HOST='andrew.jantiors.com',MASTER\u LOG\u FILE='andrew-bin.0000001',MASTER\u LOG\u POS=4代码>
我们知道日志文件中的确切位置,因为我们在步骤4中重置了它。此外,我们正在将master_host设置为andrew.janitors.com而不是masterdb.janitors.com,因为我们不一定要将任何故障转移到单独的主机(因为不同的主机将有不同的二进制日志)。或者只是像傻瓜一样等待@hd1的回答,并进一步阻止您进行自己的研究。