Запланированное резервное копирование с использованием mysqldump в одной из наших баз данных вызывает Too many connections
. База данных состоит из таблиц InnoDB и MyISAM размером около 500 МБ. В Too many connections
появляется примерно на 2-3 минуты
Мы понимаем, что mysqldump блокирует таблицы и заставляет все остальные запросы и соединения накапливаться и блокировать сервер mysql.
Нам нужно частое резервное копирование, и мы не можем позволить себе простой сервера или перевод веб-сайтов в режим обслуживания при этом. Наши веб-сайты являются глобальными, и трафик постоянно высок, поэтому трудно найти время для резервного копирования.
Как избежать простоев во время резервного копирования?
Есть ли способ использовать mysqldump так, чтобы он не блокировал все таблицы одновременно?
Есть ли альтернатива резервному копированию с помощью mysqldump?
1) Настройте второй сервер, реплицируйте на него свою БД, сделайте резервную копию оттуда
Это может быть не лучшим решением, если у вас много изменений на главном сервере, поскольку репликация на подчиненном сервере является однопоточной.
2) Использование http://www.percona.com/doc/percona-xtrabackup/
Или, как всегда, обратитесь к официальной документации, в которой описаны другие альтернативы:
http://dev.mysql.com/doc/refman/5.1/en/backup-methods.html
Сначала попробуйте сделать резервную копию таблицы по таблице или БД по БД - не блокируйте все.
Увеличьте max_connections, в противном случае попробуйте использовать ограничение на подключение: http://dev.mysql.com/doc/refman/5.5/en/user-resources.html
Я не уверен, что для увеличения max_connections потребуется слишком много памяти.
Если вы используете MyISAM - другого способа резервного копирования нет. С InnoDB или XTraDB - никаких проблем. http://www.innodb.com/doc/hot_backup/manual.html
Есть ли альтернатива резервному копированию с помощью mysqldump?
Как вы планируете их использовать? Если вам нужны быстрые и дешевые инкрементные резервные копии, я бы просто использовал rsync
(или rsnapshot
который использует rsync
чтобы сохранить несколько одновременных копий, не занимая слишком много дополнительного дискового пространства) для резервного копирования /var/lib/mysql
(или где бы то ни было файлы данных).
я предполагая вы на самом деле не будете использовать их для репликации / синтаксического анализа или иной интерпретации, но на случай, если ваш сервер (ы) выйдет из строя, вы захотите выполнить (по сути) полное восстановление диска. Это также делает такое восстановление невероятно быстрым (но жестким, вы восстанавливаете все или ничего), поскольку это стандартная операция копирования. В лучшем случае вы можете использовать это так часто, как захотите, с другим механизмом резервного копирования (скажем, mysqldump
в непиковое время), чтобы никогда не обойтись без обновленного анализируемого дампа.
Ваше сочетание таблиц myisam и innodb несколько усложняет ситуацию. Если вы можете преобразовать таблицы myisam в таблицы innodb, вы можете запустить mysqldump внутри транзакции. Таким образом вы получите согласованную резервную копию без необходимости блокировки таблицы / базы данных.
Проблемы могут быть: