Резервное копирование баз MySQL без прерывания службы MySQL
В данной статье описывается, как можно осуществлять резервное копирование баз данных MySQL, не прерывая работы MySQL службы. Обычно, когда вы хотите создать резервную копию MySQL, вы должны остановить MySQL или решить проблему блокировки таблиц MySQL, чтобы создать корректную резервную копию; если вы так не делаете, вы можете получить некорректную резервную копию. Чтобы получить корректную резервную копию без прерывания MySQL, я использую следующий трюк: Я реплицирую мою базу MySQL на второй MySQL сервер, и на втором сервере MySQL я использую задание cron чтобы создать регулярную резервную копию реплицированной базы данных.
Этот документ предоставляется без каких – либо гарантий! Я хочу сказать, что это не единственный способ создания такой системы. Есть много способов достижения этой цели, но я выбрал этот. Я не даю каких-либо гарантий, что это будет работать у вас!
Предварительные примечания
Чтобы следовать этому решению, вам нужен второй сервер MySQL (ведомый), и вы должны установить репликацию MySQL от вашего первого MySQL сервера (система, с которой вы хотите воспользоваться копий, мастер) на ведомую, например как описано в этой статье: http://www.howtoforge.com/mysql_database_replication. Установка репликации MySQL выходит за рамки этого документа. Все настройки, которые я описываю здесь, должны быть сделаны на ведомом MySQL сервере!
Я испытал это на Debian системы; этом должен работать на другие дистрибутивы, но вполне возможно, что некоторые пути будут отличаться (в скрипте /usr/local/sbin/mysqlbackup.sh).
Выполнение автоматизированного резервного копирования реплицируемой базы данных на ведомом сервере После того как вы создали рабочую репликации MySQL с основного сервера на ведомый, я предполагаю, что вы хотите сделать автоматическое резервное копирование ведомой базы данных в директорию /home/sqlbackup. Во-первых, вы должны создать эту директорию:
mkdir /home/sqlbackup Далее мы создадим скрипт командного интерпретатора /usr/local/sbin/mysqlbackup.sh который остановит ведомую базу данных, сделает SQL дамп всей базы данных MySQL в /home/sqlbackup (имя файла дампа SQL будет выглядеть следующим образом: backup-20070423-18.sql; этот дамп получен 23 Апреля 2007 года, в 18.00ч), после чего перезапустит ведомую БД (ведомая БД наверстает все, что случилось на основной БД так, чтобы никакие данные не были потеряны), и удалит все SQL дампы в /home/sqlbackup которые старше, чем два дня: vi /usr/local/sbin/mysqlbackup.sh #--------mysqlbackup.sh----------------------------------------- #!/bin/sh datum=`/bin/date +%Y%m%d-%H` /usr/bin/mysqladmin --user=root --password=yourrootsqlpassword stop-slave /usr/bin/mysqldump --user=root --password=yourrootsqlpassword --lock-all-tables \ --all-databases > /home/sqlbackup/backup-${datum}.sql /usr/bin/mysqladmin --user=root --password=yourrootsqlpassword start-slave for file in "$( /usr/bin/find /home/sqlbackup -type f -mtime +2 )" do /bin/rm -f $file done exit 0 #------------------------------------------------------------------ (Пожалуйста, убедитесь, что вы заменили «yourrootsqlpassword» на пароль root MySQL, используемый на ведомой базе данных!) Теперь мы должны сделать скрипт исполняемым: chmod 755 /usr/local/sbin/mysqlbackup.sh Конечно, мы не хотим запустить /usr/local/sbin/mysqlbackup.sh вручную; вместо этого мы создадим задание cron которое запускает скрипт автоматически каждые три часа: crontab -e 0 */3 * * * /usr/local/sbin/mysqlbackup.sh &> /dev/null Конечно, вы можете свободно изменять задание cron для запуска с такой частотой, которая вам нужна.
Автор: Amber
Источник: www.sbsi.ru
Добавить закладку на материал:
|