MyDumper 0.6.1 添加了一个新选项--use-savepoints
。从手册中,它的意思是:
使用保存点减少元数据锁定问题,需要超级权限
我不明白。它如何“减少元数据锁定问题”以及为什么需要“超级特权”?我认为,元数据对于防止其他 DDL 修改表结构至关重要。
小智 3
我必须在 mydumper 的源代码中进行一些挖掘才能找到这个问题的答案。如果你看一下mydumper 的实际源代码:
您会发现以下内容从第 415 行开始作为进程队列的一部分:
if(use_savepoints && mysql_query(thrconn, "SET SQL_LOG_BIN = 0")){
g_critical("Failed to disable binlog for the thread: %s",mysql_error(thrconn));
exit(EXIT_FAILURE);
}
Run Code Online (Sandbox Code Playgroud)
这表明在 mydumper 中使用 --use-savepoints 需要能够关闭 MySQL bin 日志。我在自己的 MariaDB 服务器上尝试了此操作,该服务器仍然使用 MySQL 作为基本 DBMS,但在使用非管理员帐户时出现以下错误:
MariaDB [(无)]> SET SQL_LOG_BIN = 0; 错误 1227 (42000):访问被拒绝;您需要(至少一项)超级权限才能执行此操作
根据我阅读的实际代码并在我自己的 MySQL 服务器中测试此条件,我的理解是您需要“超级特权”,因为 mydumper 在运行时将禁用记录到 binlog。这是DOCS中提到的 SUPER 的“启用或禁用日志记录”功能的一部分。
有关 binlog 的更多具体信息如下:
http://dev.mysql.com/doc/refman/5.6/en/set-sql-log-bin.html
就保存点而言:
http://dev.mysql.com/doc/refman/5.6/en/savepoint.html
阅读完手册和这个错误报告后,看起来如果保存点被释放,它们将释放正在处理的表上的锁,这可以防止最近在 MySQL 5.5 中在 mysqldump 上看到的锁定问题。
我希望这能让您对 mydumper 工具有更多的了解。