Copierea de rezervă a bazei de date MySQL către serverul ftp

Furnizorii de gazde oferă de multe ori un serviciu de stocare pentru backup. Dar când vine vorba de utilizarea practică a acestui depozit, se dovedește că puteți să-l accesați numai prin FTP. O altă opțiune: doriți să păstrați o copie a bazei de date a site-ului dvs. pe un site independent pentru a vă proteja de eventualitatea distrugerii datelor în centrul de date al găzduirii dvs. partajate. Puteți să comandați găzduirea virtuală a unui nivel de intrare, care este în mod tradițional descărcat prin FTP. Acest articol descrie modul în care puteți încărca automat o arhivă cu o bază de date MySQL proaspătă pe serverul FTP și, în același timp, să controlați numărul acestor arhive.







Din motive de securitate, este mai bine să aveți un cont MySQL separat, cu drepturi minime. Pentru a utiliza utilitarul mysqldump, aveți nevoie de următoarele drepturi: SELECT (preluarea datelor) și TABLURI DE BLOCARE (blocare tabel). Sub contul administrativ, la linia de comandă mysql

[root @ myserver] # mysql -u rădăcină -p -h localhost

vom crea un astfel de utilizator:

SELECTAREA GRANTULUI, TABELELE DE BLOCARE pe baza mea de date. * TO backuper @ localhost IDENTIFICAT DE "PASSWORD";
PRIVILEGIILE FLUXULUI;

Am oferit astfel de acces la toate tabelele bazei de date mydatabase unui nou utilizator cu autentificare backuper și parolă PASSWORD. Gazda bazei de date este specificată în mod prestabilit atunci când este localizată pe același server ca și aparatul pe care îl vom accesa, localhost. Pe o găzduire virtuală, cel mai probabil va fi o gazdă separată. Cea de-a doua comandă este necesară pentru ca modificările să aibă efect imediat, altfel serverul MySQL nu ne va permite să mergem sub noul utilizator.

Acum creați scriptul db_dump

[root @ myserver] # cat> / root / db_dump

pentru încărcarea și arhivarea bazei de date, după cum urmează:

rm -f /root/db_dump.zip
mysqldump mydatabase -u backuper -PASSWORD -r /root/db_dump.sql
zip /root/db_dump.zip /root/db_dump.sql
rm -f /root/db_dump.sql

(Când terminați tastarea, apăsați Ctrl + D).

Acest script suprascrie arhiva anterioară, pe care o stocăm în directorul / root /; apelează utilitarul mysqldump pentru a arunca toate tabelele bazei de date mydatabase sub backuper-ul creat de noi cu parola PASSWORD la fișierul /root/db_dump.sql; împachetează baza /root/db_dump.sql în arhiva /root/db_dump.zip; îndepărtează depozitul original.







Pentru ca scriptul să fie executat, setăm atributul de execuție la acesta:

[root @ myserver] # chmod a + x / root / db_dump

Acum, să trecem la cea mai interesantă parte - un script pentru încărcarea și controlul arhivelor pe un server FTP. Pentru aceasta vom folosi PHP cu modulul ftp. Pentru a verifica dacă acest modul este conectat, trebuie să executați următoarea comandă:

[root @ myserver] # php -m grep ftp

Dacă este afișat șirul "ftp", totul este OK. În caz contrar, modulul trebuie să fie conectat în fișierul de setări PHP - /etc/php.ini.

Acum creați script-ul însuși, pe care îl vom numi db_to_ftp:

#! / usr / bin / php
$ host = "FTPHOST";
$ login = "FTPUSER";
$ password = "FTPPASSWORD";
$ max_files_to_store = 24 * 7; // 7 zile

dacă ($ fc = ftp_connect ($ host))
dacă (ftp_login ($ fc, $ login, $ password))
$ curtime = timp ();
$ current_name = data ("Y-m-d-H", $ curtime).

ftp_put ($ fc, "db /".$ nume curent," /root/db_dump.zip ", FTP_BINARY);

foreach ($ arhive ca $ archive_id => $ archive_name)
if (preg_match ( "# ^ db / ([0-9]) - ([0-9]) - ([0-9]) - ([0-9]) H.zip $ # i", $ ARCHIVE_NAME , meciuri de $))
$ archives_list [] = array (
"Timestamp" => strtotime (. "". $ Meciuri [3] meciuri $ [2] meciuri $ [1] "" $ chibrituri [4] .. „ ''. .. 00:00„),
"numele fișierului" => arhiva_name
);
>
>

funcția time_sort ($ a, $ b)
returnați $ a ["timestamp"]<$b["timestamp"];
>

/ / pentru a șterge fișierele
$ archives_list_to_delete = Array_slice ($ arhive_list, $ max_files_to_store);

($ archives_list_to_delete ca $ file_id => $ file_item)
ftp_delete ($ fc, $ fișier_item ["nume fișier"]);
tip "DELETED:". $ file_item ["nume fișier"]. "";
>

>
altfel
print "EROARE: nu se poate conecta la gazdă $.";
>

ftp_close ($ fc);
>
altfel
print "EROARE: nu se poate conecta la FTP.";
>
?>

Pe serverul FTP, trebuie să creați un dosar db, unde vor fi localizate arhivele noastre. Toate setările necesare se fac la începutul fișierului. Variabila $ max_files_to_store stochează numărul maxim de arhive pe server. Valoarea curentă corespunde săptămânii de rezervare orare de bază. Și vom analiza ceea ce face scenariul:

După cum era de așteptat, am setat drepturile la acest script:

[root @ myserver] # chmod a + x / root / db_to_ftp

Acum avem nevoie ca ambele scripturi să fie executate secvențial, de exemplu, în fiecare oră. Pentru a face acest lucru, vom folosi crond scheduler de sarcini, pune-l în programul său

[root @ myserver] # crontab -e

0 * * * * / root / db_dump; / root / db_to_ftp

Apăsați Escape, introduceți ": wq" și vedeți mesajul despre adăugarea cu succes a sarcinii la program.

Acum, la 0 minute în fiecare oră de la serverul MySQL, baza de date va fi descărcată, arhivată și trimisă pe serverul FTP, iar arhivele mai vechi de o săptămână vor fi șterse automat.

Copierea de rezervă a bazei de date MySQL către serverul ftp

Actualizare. În practică, se constată că unele servere trebuie să intre în modul pasiv, deci trebuie să executați comanda:

ftp_pasv ($ fc, adevărat); Utilizați-l dacă există arhive goale pe server cu backup. Cel mai probabil, serverul nu le poate descărca.







Articole similare

Trimiteți-le prietenilor: