Что, когда mysqldump становится очень медленным

В настоящее время моя база данных имеет размер почти 20 ГБ и продолжает расти. Я беру ежедневную резервную копию с mysqldump, и она становится очень медленной. Настолько медленно, что тем временем новые соединения складываются и в конечном итоге вызывают эту ошибку:

SQLSTATE[HY000] [1040] Too many connections

(Я мог бы улучшить количество принятых соединений, но это ничего не изменит, потому что соединения все еще просто заморожены, ожидая завершения резервного копирования, что приведет к тайм-ауту)

Я читал о некоторых вариантах улучшения скорости, и вот что я нашел:

  1. опция --quick (вероятно, поможет)
  2. опция --single-транзакция (предотвращает блокировку таблиц, но может привести к некорректной работе базы данных)
  3. Репликация Master-Slave (вероятно, лучшее, что я мог сделать, одна проблема, у меня есть только один доступный сервер)

Репликация "главный-подчиненный" действительно звучит так, как будто это лучший вариант, поскольку я могу остановить обновление ведомого устройства, создать резервную копию и возобновить синхронизацию. Проблема в том, что у меня есть только одна физическая машина для работы.

Я знаю, что могу установить несколько экземпляров mysql на этом одном сервере. Вопрос: разумно ли это делать? Подчиненный действительно используется только для создания этого файла резервной копии (который будет скопирован на другой диск в сети), чтобы мастер мог остаться в живых.

1 ответ

Если вы используете просто innodb - попробуйте xtrabackup.

если вы используете и myisam, и innodb - flush + lvm snapshot + копия на уровне файлов может работать для вас.

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

Другие вопросы по тегам