Я хотел бы удаленно сделать резервную копию моего сервера mysql. У меня три проблемы и одно требование.
Я попытался использовать скрипт automysqlbackup, но он блокирует таблицы, и, поскольку соединение медленное, требуется время, и сайт не работает.
Я не хочу использовать репликацию, у моего второго сервера также есть собственное приложение, и на другом сервере много записей. У меня недостаточно ресурсов.
Я не хочу использовать xtrabackup (в любом случае это не решает основную проблему, кроме проблемы с блокировкой). У меня был плохой опыт.
Резервная копия должна быть сначала сохранена локально, затем заархивирована, а затем передана.
Главный сервер должен хранить только одну копию (или, желательно, ограничение размера файла, поэтому, если какая-либо из резервных копий не удастся, он все равно сохранит старую). Сценарий Automysqlbackup не имеет ограничений, которые я могу установить. (Итак, я мог бы использовать automysqlbackup для локального резервного копирования и ограничить общее выделенное дисковое пространство)
Я могу использовать SFTP и chroot пользователя и получить резервную копию.
Сервер резервного копирования должен хранить неограниченное (или 100) количество файлов. Он не должен удалять файлы, как главный сервер.
Надо написать пару скриптов? Или есть какие-то готовые решения? (и, возможно, с большим количеством функций)
Похоже, ваши требования достаточно индивидуальны, и вам нужно будет написать собственный сценарий. Пара замечаний по этому поводу:
Вам не нужно все выгружать на диск и затем сжать его. Используйте канал dump / gzip, и он сэкономит кучу дискового пространства:
mysqldump ... | gzip -c >/var/backups/mysqldump-$(date +%Y-%m%-d).sql.gz
Вы можете избавиться от большинства проблем с блокировкой, если используете все таблицы InnoDB и дамп в транзакции с --single-transaction
возможность mysqldump
.
Весь сценарий dump / push должен занимать около 5 строк. Это довольно банально.
Вам нужно будет написать свой собственный сценарий.
Учитывая, что вам не нужна расширенная блокировка, и похоже, что у вас есть место на главном сервере, я рекомендую вам запустить второй экземпляр mysql для репликации на главном сервере и сделать резервную копию с подчиненного сервера репликации.
Не рекомендуется использовать только одну копию. Существует множество сервисов, которые позволяют создавать резервные копии пространства по очень низкой цене. Например, вы можете использовать Amazon AWS для резервного копирования или найти другого поставщика пространства. Это будет стоить вам менее 10 долларов в месяц, но позволит выполнять несколько резервных копий (в течение недели или больше), и в результате у вас не будет никаких проблем, которые есть у вас сейчас.
Другие варианты: получить hetzner.de
или другой недорогой VPS и настроить репликацию + резервное копирование на нем.
Если большая часть ваших данных находится в innodb, изучите Xtrabackup
Преимущество его использования, если у вас есть база данных innodb, заключается в том, что она не блокирует таблицы, пока вы делаете резервную копию.
Моря.
Я делаю резервные копии mysql с помощью
xtrabackup
rdiff-backup
Если тебе правда не нравится xtrabackup
, затем используйте mysqldump
(возможно mk-parallel-dump
из набора мааткит) или что угодно. После этого вы можете создавать резервные копии через rdiff-backup, который должен просто копировать измененные части файлов - также его можно использовать по сети.
Итак, на «маленькой» машине вы можете просто хранить свои ночные дампы, а на удаленной «большой» машине вы можете хранить все rdiff-резервные копии, обновляемые каждую ночь после того, как ваши mysql-дампы были сняты.
Может быть легко написать сценарий (== напишите вашу команду dump и вызов rdiff-backup в ваш crontab) это ...
Чао