以下是我无法改变的事情: 我们有一个运行主服务器和一些从服务器的 mySQL myISAM 复制。一个从服务器用于使用 mysqldump 进行夜间备份。与主服务器相比,备份使用重锁迫使它的从服务器“老化”。mysqldump 以 root 身份连接转储所有数据库,而每个其他连接都使用一个非超级用户每个数据库。使用专用备份服务器上的简单 shell 脚本启动转储。
问题是:我想在以“普通”用户身份连接到正在备份的服务器上运行的数据库之一时检测备份是否正在运行。Cronjobs 应该能够通过提前退出或仅处理不能等到备份完成的真正重要的必需作业来对正在运行的备份做出反应。运行备份脚本的服务器与网络服务器没有连接,它们唯一的共同点是 mysql 服务器。备份脚本可以做一些事情来将服务器标记为“当前正在运行备份”。我更愿意设置某种“所有用户可见的全局服务器端环境变量”以仅忽略运行备份的一个从属设备,但也可以简单地知道备份正在该数据库或复制链上运行.
我试图在备份开始时创建一个临时表(现有 = 备份正在运行,不存在 = 没有备份运行),但临时表只显示最初创建它的连接(如预期)。我在谷歌上搜索了非超级用户是否可以获得查看包括其他用户和 root 在内的所有连接的 SHOW PROCESSLIST 的权限(来自备份服务器的任何连接 = 备份正在运行) - 但没有运气。向所有数据库用户提供 SUPER 是没有选择的。
有什么建议?
感谢阅读(和回答)。