Перестал работать mysqldump с преобразованием в MariaDB - set-gtid-purged = OFF проблема?

0

Я работаю на общем сервере (webhostinghub) и запускаю ночное задание CRON для резервного копирования моей базы данных mySQl InnoDB. Задача CRON запускает скрипт php, который, в свою очередь, выдает команду mysqldump через passthrough() следующим образом;

$return = -1;
$command = "mysqldump -h localhost -u server_user -ppassword --add-drop-table --quick --set-gtid-purged=OFF server_database > ./backup/backup-2018-02-19.sql"; 

passthrough($command, $return);    // note: I just added the $return parameter to see what it is returning which is '7' => non zero tells me there is some error but there is no further info I can find.

Скрипт работал годами без ошибок и недавно начал создавать файлы с нулевым байтом.

Я замечаю из phpMyAdmin, что:

Server type: MariaDB
Server version: 10.2.11-MariaDB-log - MariaDB Server
Protocol version: 10 

Я не помню, чтобы быть на MariaDB и очевидно, что мой провайдер переключил меня, не упомянув об этом (спасибо webhostinghub), и это проблема. Я знаю, что они должны быть совместимы на 99%, но это 1%?

Я удалил параметр --set-gtid-purged=OFF и резервное копирование " --set-gtid-purged=OFF " работать (я не проверял данные, но теперь у файла есть данные).

Я не могу вспомнить, почему я добавил параметр --set-gtid-purged=OFF и то, что он делает, не совсем очевидно для меня. Я знаю, что это для глобальных идентификаторов транзакций (GTID), но я не уверен, использую ли я их. Я не "реплицирую", но хочу, чтобы мой экспорт и импорт сохраняли уникальные первичные идентификаторы. Я импортирую в базу данных mysql на своем localhost.

Я был бы признателен за любую помощь в определении эквивалентной команды mysqldump для базы данных MariaDB и о том, что нужно учитывать при импорте в мою mysql базу данных mysql

Спасибо

  • 0
    dev.mysql.com/doc/refman/5.7/en/...
  • 0
    @Mike - Спасибо за ссылку на документы. Это помогает прояснить, что эта опция мне не нужна, потому что я не копирую.
Теги:
mariadb

1 ответ

2
Лучший ответ

Реализация репликации на основе GTID в MariaDB полностью отличается от MySQL, поэтому логика, которая поддерживает ее в таких инструментах, как mysqldump, также несовместима. set-gtid-purged в MySQL-версии mysqldump задает переменную, которая не существует и не имеет смысла в MariaDB, поэтому опция тоже не существует. Если вы вообще не используете репликацию вообще и GTID, вы можете просто удалить эту опцию из командной строки, остальные должны работать одинаково. Это не должно влиять на первичные ключи, если это то, что вы подразумеваете под основными идентификаторами.

"Почти полная совместимость" на уровне параметра/синтаксиса между MariaDB и MySQL верна для строк выпуска до 5.5 включительно. Начиная с MariaDB 10.0 и MySQL 5.6, есть заметные различия.

Вот список известных несовместимостей между MariaDB и MySQL. Он может быть неполным, но он должен охватывать большую часть.

Загрузка дампа сервера MySQL в сервер MariaDB должна работать, если только сервер MySQL не использует какой-либо синтаксис или функции, которые MariaDB либо не имеет, либо имеет другую форму. Загрузка дампа, созданного MySQL-версией mysqldump на сервер MariaDB, может вызвать проблемы, например, если он задает переменные, которых нет у MariaDB (например, @@global.gtid_purged контролируемые командой set-gtid-purged, может быть больше). В этом случае может потребоваться ручное редактирование дампа.

  • 0
    Я, вероятно, использовал этот переключатель (несколько лет назад) из примера SO. Поскольку я не полностью понимаю GTID-based replication вполне вероятно, что я неправильно понял ее актуальность в моей ситуации. Спасибо за проверку несовместимости и объяснение, почему она мне не нужна. (Да я имел ввиду первичные ключи).
  • 0
    Я добавил ссылку на список известных несовместимостей для справки. В значительной степени это поддерживается на основе вклада сообщества, дополнения приветствуются.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню