Seb*_*ian 2 mysql mysqldump backup dump
以下是我无法改变的事情: 我们有一个运行主服务器和一些从服务器的 mySQL myISAM 复制。一个从服务器用于使用 mysqldump 进行夜间备份。与主服务器相比,备份使用重锁迫使它的从服务器“老化”。mysqldump 以 root 身份连接转储所有数据库,而每个其他连接都使用一个非超级用户每个数据库。使用专用备份服务器上的简单 shell 脚本启动转储。
问题是:我想在以“普通”用户身份连接到正在备份的服务器上运行的数据库之一时检测备份是否正在运行。Cronjobs 应该能够通过提前退出或仅处理不能等到备份完成的真正重要的必需作业来对正在运行的备份做出反应。运行备份脚本的服务器与网络服务器没有连接,它们唯一的共同点是 mysql 服务器。备份脚本可以做一些事情来将服务器标记为“当前正在运行备份”。我更愿意设置某种“所有用户可见的全局服务器端环境变量”以仅忽略运行备份的一个从属设备,但也可以简单地知道备份正在该数据库或复制链上运行.
我试图在备份开始时创建一个临时表(现有 = 备份正在运行,不存在 = 没有备份运行),但临时表只显示最初创建它的连接(如预期)。我在谷歌上搜索了非超级用户是否可以获得查看包括其他用户和 root 在内的所有连接的 SHOW PROCESSLIST 的权限(来自备份服务器的任何连接 = 备份正在运行) - 但没有运气。向所有数据库用户提供 SUPER 是没有选择的。
有什么建议?
感谢阅读(和回答)。
在这种情况下,您唯一的希望是拥有 PROCESS 特权。
SUPER 权限允许您终止进程。自然,你不想那样。另一方面,PROCESS 权限允许您查看进程列表。
PROCESS 特权与显示有关在服务器内执行的线程的信息(即有关会话正在执行的语句的信息)有关。该权限允许使用 SHOW PROCESSLIST 或 mysqladmin processlist 来查看属于其他帐户的线程;你总是可以看到你自己的线程。
好的,大交易。PROCESS Privilege 允许您查看进程列表。这有什么帮助?
您可以在运行时快速检测到正在进行的 mysqldumpSHOW PROCESSLIST;
并在 Info 字段中看到这样的模式:
SELECT /*!40001 SQL_NO_CACHE */ * FROM
Run Code Online (Sandbox Code Playgroud)
如果您拥有 PROCESS 特权并且正在运行 MySQL 5.1+,则可以运行以下查询:
select COUNT(1) mysqldumpThreads
from information_schema.processlist
where info like 'SELECT /*!40001 SQL_NO_CACHE */%';
Run Code Online (Sandbox Code Playgroud)
这是一个示例输出:
mysql> select COUNT(1) mysqldumpThreads
-> from information_schema.processlist
-> where info like 'SELECT /*!40001 SQL_NO_CACHE */%';
+------------------+
| mysqldumpThreads |
+------------------+
| 1 |
+------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
您需要做的就是查询该号码。如果您得到非零值,则 mysqldump 必须正在运行。
试一试 !!!
归档时间: |
|
查看次数: |
10412 次 |
最近记录: |