Архивиране на MySQL бази данни

Посетители: 31619 Преглеждания: 56005 (днес 0)Шрифт:

Как да направите копие на базата данни MySQL

Има програма mysqldump, която ви позволява бързо и лесно да създавате резервни копия на MySQL бази данни. Също така mysqldump ви позволява да правите много фини настройки, за да контролирате процеса на създаване на резервни копия на бази данни или отделни таблици. Може да се каже, че mysqldump е основният инструмент, който трябва да използвате, ако правите резервно копие на MySQL.

Нека веднага да вземем проста задача, която ще решим с помощта на mysqldump, и да разберем какво е какво. Има хостинг, има DBNAME база данни, която ви е предоставена от хостинг доставчик. Има HOST хост, който хоства MySQL сървъра, LOGIN за влизане в него, PORT порт, на който сървърът работи, и PASS парола. Имайки всички тези данни, можете да изхвърлите (изхвърлите, копирате) базата данни DBNAME по следния начин (ние я изпълняваме в unix shell):

След като изпълним тази команда във файла dump.txt, ще имаме копие на базата данни DBNAME MySQL. Това ще се случи, разбира се, само ако зададете всички параметри правилно, в съответствие с настройките на вашия хостинг. Веднага трябва да се каже, че програмата mysqldump извежда резултатите директно на вас на STDIN, тоест на екрана. Трябва да пренасочите изхода към някакъв файл. Например, както в този случай - " > dump.txt ". Ако това не е направено и базата данни е голяма, ще получите на екрана всички тези мегабайти информация, която съдържа.

Нека поговорим малко за това какво прави mysqldump. Тази програма създава скрипт за възстановяване на вашите данни. Това означава, че резултатът от mysqldump не е някаква абстрактна и нечетима двоична информация, а смислен скриптов текст. Например, ако вашата база данни имаше тестова таблица, която имаше полеtest2 с тип данни integer и единичен запис "1111", mysqldump ще създаде скрипт, подобен на този:

Така mysqldump ще "опише" всичките ви таблици и ще създаде INSERT команди за възстановяване на данните в таблиците. И така, ние пренасочваме изхода на mysqldump към текстов файл, който след това ще използваме за възстановяване. Нека разгледаме този процес - пресъздаване на базата данни от резервно копие.

За възстановяване ще използваме стандартната програма mysql, която е включена в разпределението на MySQL заедно с mysqldump. Да кажем, че имаме резервно копие във файла dump.txt. Трябва да го възстановим в работеща база данни. Например случайно изтрихме нашата база данни и сега се опитваме да поправим този лош късмет. Правим го така:

Тоест, принуждаваме mysql клиента да се свърже със сървъра и да изпълни скрипта, който имаме. След изпълнение на тази команда таблиците и данните от архива ще се появят във вашата база данни. Имайте предвид, че данните просто ще бъдат възстановени според скрипта от dump.txt. Тоест, ако таблиците, които са споменати в дъмпа на базата данни, вече съществуват и имат различна структура, тук очевидно ще възникне грешка. Просто погледнете скрипта и работната база и си представете, че ръчно изпълнявате команди от скрипта. Ако сте сигурни, че всичко ще бъде наред - не се колебайте да възстановите.

Помислете за по-фините настройки на mysqldump:

--databases позволява на mysqldump да включва командите CREATE DATABASE /*!33333 IF NOT EXISTS*/ DBNAME и USE DBNAME в скрипта за възстановяване. Това ще ви позволи да създавате работещи бази данни от нулата. Тоест, без да се използва --databases, се приема, че потребителят възстановява една база данни и изрично указва къде трябва да бъдат поставени възстановените данни. Ако се създаде резервно копие с цел да се направи пълноработно копие на данните, например на друг MySQL сървър, тогава трябва да използвате този ключ;

--all-databases ви позволява да правите копия на всички бази данни, които съществуват на даден MySQL сървър. Ако трябва да направите копия само на някои бази данни, просто трябва да ги посочите разделени с интервал, когато извиквате mysqldump от командния ред (вижте по-горе);

Ключ --помощ. Програмата mysqldump има много версии. Можете да видите какви функции се поддържат конкретно от вашата версия, като използвате този ключ;

--add-drop-table е ключ, който ще накара mysqldump да добави командата drop table към крайния скрипт, преди да създаде таблиците. Това ще избегне някои грешки при възстановяване на базата данни от резервно копие. Разбира се, трябва да вземете под внимание, че таблиците в работното копие (ако таблици със същото име съществуват в резервното копие) ще бъдат изтрити от основната база данни и пресъздадени от резервното копие, преди да бъдат възстановени от резервното копие;

--няма данни . С този ключ можете бързо да направите копие на структурата на таблицата / базите данни без самите данни. Например, вие сте създали сложна таблица и бихте искали да запазите нейната структура за в бъдеще, но не се нуждаете от данните, които са в тази таблица в резервно копие;

--result-file=. - този ключ може да се използва за пренасочване на изхода към файл. Можете да използвате обичайното пренасочване на Unix с командата ">" или можете да използвате този ключ. Кой какво харесва;

В допълнение към изброените ключове, mysqldump има редица много полезни функции, които можете да използвате според обстоятелствата. Пълната документация за mysqldump е достъпна на http://www.mysql.com/doc/m/y/mysqldump.html.

Друг много полезен съвет за използване на mysqldump в хостинг среда. Като правило, когато използвате хостинг напотребителят подлежи на определени ограничения. Например, не можете да използвате повече от определено количество физическа памет (RAM, RAM). mysqldump поставя всички данни, получени от MySQL сървъра, в паметта по подразбиране и след това ги записва на диск. Съответно, ако доставчикът ви позволи да вземете например 30 MB памет, а базата данни, на която правите копие с помощта на mysqldump, заема 50 MB, разбира се, тук ще възникне грешка - mysqldump няма да може да работи правилно и ще приключи необичайно, което ще ви информира. За да "принудите" mysqldump да записва данни директно на диска, вместо да ги съхранява, дори временно, в паметта, използвайте превключвателя --quick. Това ще реши проблема.

Автоматизация на архивирането

Сега нека помислим как можем да автоматизираме процеса на създаване на резервни копия на бази данни. И така, има програма - cron. Тя ви позволява да стартирате процеси в зададено от потребителя време или на определена честота. Внимание - cron обикновено съществува само под Unix, така че ако хоствате на Windows, консултирайте се с вашия хостинг доставчик за най-добрия начин да стартирате процеси в точното време. И като цяло, може би този елемент ще представлява интерес само за потребители на Unix.

В unix shell изпълнете crontab -e и създайте следното правило за стартиране на процеса на създаване на копия на база данни:

Записваме правилото за cron и чакаме резултатите. И така, всеки ден ще имаме компресирано копие на нашата база данни на диск. Можете бързо да намерите желания архив по името му и да възстановите това, което се е повредило, например. Между другото, ако искате да автоматизирате премахването на стари архиви, опитайте да използвате cron и командата find, която обикновено се намира в unix. Като стартирате намиране периодично

/archives-directory -name "*.gz" -mtime +7, ще го направитеизтриване на архиви, които са "по-стари" от седем дни. Прочетете документацията за намиране - тя е достъпна от командата man find на unix shell.

Допълнителни функции