MyDumper 0.6.1添加一个新选项--use-savepoints。从手册来看,这意味着:
使用保存点减少元数据锁定问题,需要超级特权
我不明白。它如何“减少元数据锁定问题”,以及为什么它需要“超级特权”?正如我认为的那样,元数据对于防止其他DDL修改表结构是必不可少的。
发布于 2015-11-20 23:07:09
为了找到这个问题的答案,我不得不在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中使用--使用--保存点需要关闭MySQL bin日志。我在我自己的MariaDB服务器上尝试了这一点,它仍然使用MySQL作为基本DBMS,并且在使用非管理员帐户时出现了以下错误:
MariaDB (无)> SET SQL_LOG_BIN = 0;错误1227 (42000):访问被拒绝;此操作需要(至少一种)超级特权(S)
根据我阅读的实际代码并在我自己的MySQL服务器上测试这个条件,我的理解是您需要“超级特权”,因为mydumper将在它运行时禁用对binlog的日志记录。这是文档中提到的超级程序“启用或禁用日志记录”功能的一部分。
关于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。
我希望这能给我更多的洞察力。
https://dba.stackexchange.com/questions/99007
复制相似问题