我想创建一个存储过程/事件来执行一些维护任务。我的设置是为故障转移场景配置的主/从(意味着从不用于报告,只是在主主故障的情况下可能会升级)。
我想让这个存储过程在两者的事件调度程序中运行。在正常的操作过程中,我希望它做它的事情,让这些操作通过正常的复制链流动。在故障转移的情况下,我希望它只是检测到它不是主人并继续处理以前的奴隶。(在这样的事件中,不必担心就位的事情)。
我正在考虑将初始调用包装在一个看起来像的伪代码块中
如果 I_AM_MASTER 那么
调用 real_work_sp;
万一;
测试 I_AM_MASTER 的最佳方法是什么?我知道我可以从命令行显示主状态,但我不确定如何捕获该状态以用于此测试。我该怎么做,或者有更好的方法吗?
PS 这些操作不仅仅是删除,如果它们碰巧运行两次,我可以让“失败”。
如果主服务器连接了从服务器,这将起作用
如果答案是...
您还可以检查全局状态变量“Slave_running”
如果答案是...
您还可以检查“系统用户”的进程列表
如果答案是...
我希望这些查询能给你一些方向。
警告
SHOW MASTER STATUS;
只是告诉你当前的二进制日志是什么。如果您的从站禁用了二进制日志,则不SHOW MASTER STATUS;
返回任何内容。无法在 information_schema 数据库中捕获此信息。唯一明显的方法是
SHOW SLAVE STATUS\G
更新 2011-12-30 12:50 EDT
这是从您的奴隶中识别您的主人的简单方法:创建一个表,其唯一目的是保存构成您的主人的服务器名称。在所有数据库服务器(主服务器和从服务器)上运行这些命令
现在只需运行此查询以确定它是否是 Master:
这是使用 MySQL 5.5.12 在我的 PC 上运行的示例
试试看 !!!
更新 2011-12-30 13:06 EDT
这是您需要的存储函数:
这是一个示例调用:
更新 2011-12-30 13:12 EDT
只记得