Блокируются ли таблицы InnoDB во время mysqldump при смешивании с MyISAM?


9

Я ищу решение для резервного копирования для моих серверов MySQL и мне нужно как можно меньше времени простоя. У меня есть следующее:

  • MySQL серверы
  • они не тиражируются
  • каждый сервер выступает за свой

Это число может возрасти, поэтому настройка репликации master / slave не будет хорошей идеей.

На мой взгляд, самый простой способ резервного копирования - использовать mysqldump с таким программным обеспечением, как «automysqlbackup». Мои самые важные данные использует InnoDB. Мои таблицы InnoDB довольно тяжелые.

Вопрос заключается в следующем: если я сделаю mysqldump для всех баз данных на сервере, заблокирует ли он таблицы Innodb?

Ответы:


7

mysqldumps с InnoDB и MyISAM вместе рассматриваются как взаимоисключающие. Вот почему:

Если вы можете войти в mysql во время работы mysqldump, вы увидите что-то вроде этого:

SELECT /* SQL_NO_CACHE */ * FROM tblname

По умолчанию mysqldump сделает следующее:

  • Каждая база данных выгружается в алфавитном порядке
  • Каждая таблица, выгруженная в базу данных, выводится в алфавитном порядке (независимо от механизма хранения)

Это должно быть хорошо для экземпляра MySQL, который не имеет никакой другой активности базы данных. Таблицы InnoDB и таблицы MyISAM не влияют друг на друга.

Использование --single-transactionинстанса MySQL против InnoDB создает контрольную точку и создает дамп всех таблиц за один и тот же момент времени. Как только таблица MyISAM обнаружена, все ставки отключены. Это может привести к тому, что все таблицы InnoDB после MyISAM будут выгружены из другого момента времени.

Чтобы иметь согласованный дамп на определенный момент времени для смеси InnoDB и MyISAM, у вас есть варианты

ОПЦИЯ 1

Перезапустите mysql, чтобы никто другой не мог войти через TCP / IP, а затем mysqldump

service mysql restart --skip-networking --skip-grant-tables
mysqldump --routines --triggers --all-databases > MySQLData.sql
service mysql restart 

ВАРИАНТ № 2

Если все таблицы MyISAM предназначены только для чтения, просто mysqldump, используя --single -action

ВАРИАНТ № 3

Если пишутся какие-либо таблицы MyISAM, --single-транзакции недостаточно

Вам придется сделать следующее:

mysql -u... -p... -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)"
sleep 30
mysqldump --routines --triggers --all-databases > MySQLData.sql

Сразу после завершения mysqldump войдите в MySQL и выполните show processlist;. Найдите запрос SELECT SLEEP(86400), найдите идентификатор процесса и запуститеKILL <procidnumn>;


5

mysqldump --single-transactionне блокирует таблицы, но таблицы MyISAM не гарантируют наличие согласованных дампов с этой опцией. Лучше использовать mydumper, mydumperблокирует таблицы MyISAM и не блокирует InnoDB, поэтому дамп является согласованным.


Вау, спасибо за этот замечательный инструмент! Вы знакомы с инструментом, который может автоматизировать ежедневное, еженедельное, ежемесячное резервное копирование с mydumper? Что-то вроде «automysqlbackup», только с mydumper? Спасибо.
Tounano

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.