У меня Linux centos 6.4
сервер с mysql5.6
У меня есть задание cron для ежечасного резервного копирования базы данных mysql, подобного этому
Это в питоне
os.popen("mysqldump -u %s --password=%s -h %s -e --opt --skip-lock-tables --skip-extended-insert -c %s | gzip -c > %s.gz" % (username, password, hostname, database, filename))
Проблема в том, что очень мало данных меняется, но каждый раз мне приходится делать резервные копии всех баз данных 24 раза, что занимает слишком много места.
Какая для этого лучшая альтернатива
Есть ли способ создать инкрементные резервные копии, чтобы я делал 1 полную резервную копию базы данных каждую неделю, а затем только инкрементные резервные копии.
Я хочу иметь отдельные файлы для отдельных баз данных, чтобы, если мне нужно восстановить единую базу данных, я мог бы это сделать.
Очень просто: ведение журнала. Настройте mysql на ведение двоичного журнала как минимум в течение одного дня (возможно, дольше). Затем измените резервную копию, чтобы не выполнять mysqldump, а использовать что-то вроде xtrabackup.
Таким образом, вы можете сократить расписание резервного копирования до одного раза в день и по-прежнему иметь возможность выполнить откат до любого момента времени с помощью binlog.
Ты можешь сделать инкрементные резервные копии с xtrabackup. Чтобы восстановить единую базу данных, подготовьте полные и инкрементные резервные копии (включая все базы данных), а затем запустите MySQL, используя каталог xtrabackup в качестве datadir, и возьмите mysqldump для отдельной базы данных, которую вы хотите.
В большинстве случаев делать резервную копию каждый час довольно глупо. Возможно, вам нужно подумать о репликации mysql на другой узел.
Если вы хотите сэкономить место, вы можете продолжать делать полные резервные копии ежечасно, но в дедуплицированной файловой системе, например lessfs. Вы можете легко вырезать раздел и отформатировать / смонтировать его с помощью lessfs
а затем позвольте ему обработать дедупликацию, сохранив возможность восстановления в любой час, только без пространства.