Что, когда mysqldump становится очень медленным
В настоящее время моя база данных имеет размер почти 20 ГБ и продолжает расти. Я беру ежедневную резервную копию с mysqldump, и она становится очень медленной. Настолько медленно, что тем временем новые соединения складываются и в конечном итоге вызывают эту ошибку:
SQLSTATE[HY000] [1040] Too many connections
(Я мог бы улучшить количество принятых соединений, но это ничего не изменит, потому что соединения все еще просто заморожены, ожидая завершения резервного копирования, что приведет к тайм-ауту)
Я читал о некоторых вариантах улучшения скорости, и вот что я нашел:
- опция --quick (вероятно, поможет)
- опция --single-транзакция (предотвращает блокировку таблиц, но может привести к некорректной работе базы данных)
- Репликация Master-Slave (вероятно, лучшее, что я мог сделать, одна проблема, у меня есть только один доступный сервер)
Репликация "главный-подчиненный" действительно звучит так, как будто это лучший вариант, поскольку я могу остановить обновление ведомого устройства, создать резервную копию и возобновить синхронизацию. Проблема в том, что у меня есть только одна физическая машина для работы.
Я знаю, что могу установить несколько экземпляров mysql на этом одном сервере. Вопрос: разумно ли это делать? Подчиненный действительно используется только для создания этого файла резервной копии (который будет скопирован на другой диск в сети), чтобы мастер мог остаться в живых.
1 ответ
Если вы используете просто innodb - попробуйте xtrabackup.
если вы используете и myisam, и innodb - flush + lvm snapshot + копия на уровне файлов может работать для вас.
действительно, репликация для резервного копирования также является хорошей идеей. просто не забывайте периодически проверять согласованность данных между ведущим и ведомым устройствами.