mydumper的“ --use-savepoints”选项如何减少元数据锁定


8

MyDumper 0.6.1添加一个新选项--use-savepoints。从手册中,它意味着:

使用保存点减少元数据锁定问题,需要SUPER特权

我不明白 它如何“减少元数据锁定问题”,为什么它需要“超级权限”?我认为,元数据对于防止其他DDL修改表结构至关重要。

Answers:


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);
}

这表明在mydumper中使用--use-savepoints需要关闭MySQL bin日志的功能。我在自己的MariaDB服务器上尝试了此操作,该服务器仍然使用MySQL作为基本DBMS,并且在使用非管理员帐户时收到以下错误:

MariaDB [(无)]> SET SQL_LOG_BIN = 0; 错误1227(42000):访问被拒绝;您需要(至少其中一种)SUPER权限才能执行此操作

从我阅读的实际代码并在我自己的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

阅读完手册和此错误报告后,如果释放了保存点,它们似乎将释放正在处理的表上的锁定,这可以防止锁定问题,这种问题在MySQLdump上早已出现在MySQL 5.5上。

我希望这能使我对mydumper工具有更多的了解。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.