Как опция '' --use-savepoints '' mydumper уменьшает блокировку метаданных

8

MyDumper 0.6.1 добавить новую опцию --use-savepoints. Из руководства это означает:

Использование точек сохранения для уменьшения проблем с блокировкой метаданных, требуется привилегия SUPER

Я не понимаю Как он «уменьшает проблемы с блокировкой метаданных» и зачем ему нужна «привилегия SUPER»? Как я думаю, метаданные необходимы для предотвращения изменения структуры таблицы другими DDL.

leafonsword
источник

Ответы:

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

Это показывает, что использование --use-savepoints в mydumper требует возможности отключить журнал bin MySQL. Я попытался сделать это на своем собственном сервере MariaDB, который все еще использует MySQL в качестве базовой СУБД, и получил следующую ошибку при использовании учетной записи без прав администратора:

MariaDB [(нет)]> SET SQL_LOG_BIN = 0; ОШИБКА 1227 (42000): доступ запрещен; вам нужна (хотя бы одна из) привилегий SUPER для этой операции

Из того, что я читал о реальном коде и тестировал это условие на моем собственном MySQL-сервере, я понимаю, что вам нужна «привилегия SUPER», поскольку mydumper будет отключать ведение журнала в binlog во время работы. Это часть «включения или выключения регистрации» мощности SUPER, упомянутой в DOCS .

Более подробная информация о 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.

JPeck89
источник