Как я могу замедлить дамп MySQL, чтобы не влиять на текущую нагрузку на сервер?
При выполнении дампа MySQL достаточно просто, у меня есть выделенный выделенный MySQL сервер, на который я хочу настроить репликацию. Для этого мне нужны дампы баз данных для импорта в мое подчинение репликации.
Проблема возникает, когда я делаю дампы, MySQL прилагает все усилия к ней и связывает ресурсы с сайтами, которые подключаются к ней. Мне интересно, есть ли способ ограничить запросы дампа до состояния с низким приоритетом, которому предпочтение отдается живым соединениям? Идея состоит в том, что нагрузка с внешних сайтов не зависит от усилий MySQL, чтобы сделать полную дамп...
Ответы
Ответ 1
У меня очень большие базы данных с десятками тысяч таблиц, некоторые из которых содержат до 5 ГБ данных в 10 миллионах записей. (Я пользуюсь популярным сервисом)... У меня всегда были головные боли при резервном копировании этих баз данных. Используя mysqldump по умолчанию, он быстро выводит серверную нагрузку из-под контроля и блокирует все... затрагивающее моих пользователей. Попытка остановить процесс может привести к сбою таблиц и большому времени простоя во время восстановления этих таблиц.
Я сейчас использую...
mysqldump -u USER -p --single-transaction --quick --lock-tables=false DATABASE | gzip > OUTPUT.gz
Ссылка mysqldump на dev.mysql.com даже говорит...
Чтобы получить дамп больших таблиц, вы должны объединить опцию --single-транзакции с --quick.
Ничего не говорит о том, что, будучи зависимой от базы данных InnoDB, мои myISAM, и это прекрасно работает для меня. Нагрузка на сервер почти не пострадала, и мой сервис работал как Rolex в течение всего процесса. Если у вас большие базы данных и их резервное копирование влияет на конечного пользователя... это решение. ;)
Ответ 2
При использовании таблиц InnoDB используйте параметры -single-transaction и -quick для mysqldump
Ответ 3
Используйте команду nice и gzip для выполнения команды с наименьшим приоритетом.
nice -n 10 ionice -c2 -n 7 mysqldump db-name | gzip > db-name.sql.gz
Ответ 4
Вы можете префикс команды mysqldump следующим образом:
ionice -c3 nice -n19 mysqldump ...
который будет запускать его при низком уровне ввода-вывода и приоритете ЦП, поэтому он должен ограничить его влияние.
Примечание. Это задерживает время между выполнением MySQL. Сами скрипты по-прежнему будут такими же интенсивными, как и раньше, только с более длинным перерывом между сценариями.