написание perl-скрипта для создания инкрементной резервной копии mysql с помощью mysqldump

Я имею дело с инкрементным решением для резервного копирования базы данных mysql в centos. Мне нужно написать Perl-скрипт для создания инкрементной резервной копии. затем я запущу этот скрипт с помощью crontabs. Я немного смущен. Решения есть, но они не особо помогают. Я провел много исследований. существует так много способов сделать полное резервное копирование и добавочное резервное копирование файлов. Я могу легко их понять, но мне нужно сделать инкрементную резервную копию базы данных mysql. Я не знаю как это сделать. Может ли кто-нибудь помочь мне, посоветовав источник или кусок кода.


person user403295    schedule 16.01.2011    source источник
comment
Что конкретно вы пробовали и что не сработало? Какая конкретная часть документации была неясна?   -  person DVK    schedule 16.01.2011
comment
Документы MySQL содержат довольно хорошее резюме: dev.mysql.com/doc /refman/5.1/en/backup-methods.html   -  person DVK    schedule 16.01.2011


Ответы (2)


Метод инкрементного резервного копирования, который вы рассматривали, задокументирован MySQL здесь:

http://dev.mysql.com/doc/refman/5.0/en/binary-log.html

По сути, вам нужно настроить свой экземпляр mysql для записи любых изменений в вашей базе данных в этот двоичный журнал. Это означает, что любые обновления, удаления, вставки и т. д. заносятся в двоичный журнал, но не операторы выбора (которые не изменяют базу данных, поэтому не заносятся в двоичный журнал).

Как только вы запустите свой экземпляр mysql с включенным двоичным ведением журнала, вы сделаете полную резервную копию и запишите положение мастера. Затем позже, чтобы сделать инкрементную резервную копию, вы хотите запустить mysqlbinlog из главной позиции, и результатом этого будут все изменения, внесенные в вашу базу данных с тех пор, как вы сделали полную резервную копию. В этот момент вам нужно будет снова принять к сведению основную позицию, чтобы вы знали точку, из которой вы хотите сделать следующую инкрементную резервную копию.

Понятно, что если вы затем снова и снова создаете несколько инкрементных резервных копий, вам необходимо сохранить все эти инкрементные резервные копии. Я бы рекомендовал делать полную резервную копию довольно часто.

Действительно, я бы рекомендовал всегда делать полную резервную копию, если это возможно. Создание добавочных резервных копий просто причинит вам боль, IMO, но если вам нужно это сделать, это, безусловно, один из способов сделать это.

person Kenny    schedule 08.02.2011

mysqldump - это билет.

Пример:

mysqldump -u [user_name] -p[password] --database [database_name] >/tmp/databasename.sql

-u = имя пользователя базы данных mysql

-p = пароль базы данных mysql

Примечание: после параметра -p пробела нет. И если вам нужно сделать это в perl, вы можете использовать системную функцию, чтобы вызвать ее следующим образом:

system("mysqldump -u [user_name] -p[password] --database [database_name] >/tmp/databasename.sql") or die "system call failed: $?";

Однако помните о рисках безопасности, связанных с этим. Если бы кто-то сделал список текущих процессов, запущенных в системе во время ее работы, он смог бы увидеть учетные данные, которые использовались для доступа к базе данных.

person Steve Dickinson    schedule 17.01.2011
comment
Привет Стив, спасибо за ваш ответ. Это требует полной резервной копии базы данных, которую я уже получил. Можете ли вы сказать мне, как я могу получить инкрементную резервную копию базы данных? То, что я прочитал, говорит мне запустить mysqld с параметром --bin-log, чтобы узнать последние изменения в базе данных и сделать инкрементную резервную копию. А еще smo сказал мне, что для выполнения этой задачи мне нужно использовать некоторый параметр времени в mysqldump, чтобы я мог знать последние изменения. Однако я не видел, чтобы какой-либо параметр требовал времени для создания файла резервной копии. Вы понимаете, что я имею в виду? Можете ли вы помочь мне сейчас? Еще раз спасибо. С уважением. Озлем. - person user403295; 19.01.2011
comment
Извините, я на самом деле не делал никаких инкрементных резервных копий. Вот еще одно обсуждение на эту тему, которое может быть полезным: mobile.experts-exchange.com/Q_23185202.html. . Удачи. Мне было бы интересно узнать, добились ли вы успеха. - person Steve Dickinson; 19.01.2011
comment
Я оставил этот вопрос, не мог завершить его. что-то вроде этого может помочь вам в дальнейшем расследовании. ** mysqlbinlog --start-date=2009-07-07 15:00:00 --stop-date=2009-07-07 18:00:00 /backups/mysqlbin.0005 /backups /mysqlbin.0007 |mysql * * если вы заставите это работать, я хотел бы видеть, как игрушка сделала .. С уважением. - person user403295; 09.02.2011