A MySQL adatbázis mentése az ftp kiszolgálóra

A tárhely szolgáltatók gyakran tárolási szolgáltatást nyújtanak a biztonsági mentéshez. De amikor ezt az adattárat praktikusan használják, kiderül, hogy csak FTP-n keresztül férhet hozzá. Egy másik lehetőség: Szeretné megőrizni egy webhelyének adatbázist egy független webhelyen annak érdekében, hogy megvédje magát a megosztott tárhely adatközpontjában lévő adatok megsemmisítésének esetétől. Rendelkezhet egy belépési szint virtuális tárhelyéről, amely hagyományosan letöltött fájlok az FTP-n keresztül. Ez a cikk azt írja le, hogyan frissíthet egy új MySQL adatbázis archívumot az FTP szerverre, és ezzel egyidejűleg ellenőrizheti az archívumok számát.

Biztonsági okokból a legjobb, ha külön MySQL-fiók van, minimális jogokkal. A mysqldump segédprogram használatához a következő jogok szükségesek: SELECT (adatelfogadás) és LOCK TABLES (asztalzárás). A mysql parancssori adminisztrációs fiók alatt

[root @ myserver] # mysql -u root -p -h localhost

létrehozunk ilyen felhasználót:

GRANT SELECT, LOCK TÁBLÁZATOK mydatabase-ban * TO backuper @ localhost IDENTIFIED BY "PASSWORD";
FLUSH PRIVILEGES;

Ezt a hozzáférést az adatbázishoz tartozó adatbázist tartalmazó táblázathoz egy új felhasználóhoz adtuk meg, amelyhez backuper bejelentkezést és egy PASSWORD jelszót használtunk. Az adatbázis-kiszolgáló alapértelmezés szerint akkor van megadva, ha ugyanazon a kiszolgálón található, mint a gép, amelyhez hozzáférni fogunk, a localhost. A virtuális tárhelyen valószínűleg különálló fogadó lesz. A második parancs szükséges a változások azonnali hatályba léptetéséhez, különben a MySQL kiszolgáló nem engedi meg az új felhasználó alá.

Most hozd létre a db_dump parancsfájlt

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

az adatbázis feltöltéséhez és archiválásához az alábbiak szerint:

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

(Ha befejezte a gépelést, nyomja meg a Ctrl + D billentyűkombinációt.

Ez a szkript felülírja az előző archívumot, amelyet a / root / könyvtárban tárolunk; felhívja a mysqldump segédprogramot, hogy az általam létrehozott backuper által létrehozott adatbázisok összes adatbázisát eldobja a /root/db_dump.sql fájl jelszavas PASSWORDjával; csomagolja az /root/db_dump.sql bázist az archívumba /root/db_dump.zip; eltávolítja az eredeti dumpot.

A parancsfájl végrehajtásához a végrehajtási attribútumot állítjuk be:

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

Most lépjünk át a legérdekesebb részre - az FTP szerver archívumainak feltöltéséhez és ellenőrzéséhez. Ehhez a PHP-t az ftp modul segítségével fogjuk használni. A modul csatlakoztatásának ellenőrzéséhez a következő parancsot kell futtatnia:

[root @ myserver] # php -m | grep ftp

Ha megjelenik az "ftp" karakterlánc, minden rendben van. Ellenkező esetben a modulnak a PHP beállítási fájljába kell kapcsolódnia - /etc/php.ini.

Most készítsd el a szkriptet, amit db_to_ftp:

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

ha ($ fc = ftp_connect ($ host))
ha (ftp_login ($ fc, $ login, $ jelszó))
$ curtime = time ();
$ current_name = dátum ("Y-m-d-H", $ curtime) "H.zip";

ftp_put ($ fc, "db /".$ aktuális név," /root/db_dump.zip ", FTP_BINARY);

foreach ($ archívumok $ archive_id => $ archive_name)
ha (preg_match ("# ^ db / ([0-9]) - ([0-9]) - ([0-9]) - ([0-9]) H.zip $ # i", $ archívum , $ mérkőzések))
$ archives_list [] = array (
$ matches [2]. ". $ matches [1]." ". $ matches [4].": 00:00 ")," $ timer "
"filename" => $ archive_name
);
>
>

függvény time_sort ($ a, $ b)
vissza $ a ["időbélyeg"]<$b["timestamp"];
>

// törölni kívánt fájlok
$ archives_list_to_delete = array_slice ($ archives_list, $ max_files_to_store);

foreach ($ archives_list_to_delete mint $ file_id => $ file_item)
ftp_delete ($ fc, $ file_item ["fájlnév"]);
print "DELETED:" $ file_item ["fájlnév"]. "";
>

>
más
print "ERROR: nem tud bejelentkezni a $ hostra.";
>

ftp_close ($ fc);
>
más
print "ERROR: nem tud csatlakozni az FTP-hez.";
>
?>

Az FTP-kiszolgálón létre kell hoznia egy db-os mappát, ahol archívumainkat megtaláljuk. Minden szükséges beállítás a fájl elején történik. A $ max_files_to_store változó tárolja az archívumok maximális számát a kiszolgálón. Az aktuális érték megfelel az óránkénti bázis foglalási hétnek. És elemezzük, mi a szkript:

A várakozásoknak megfelelően megadtuk a jogokat ehhez a szkripthez:

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

Most mindkettőre szükségünk van szkriptek végrehajtására, például minden óránként. Ehhez használjuk a feladatütemező összetevőt, beillesztjük ütemezésébe

[root @ myserver] # crontab -e

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

Nyomja meg a Escape gombot, írja be a ": wq" parancsot, és olvassa el az üzenetet a feladathoz való sikeres hozzáadásáról.

A MySQL kiszolgálón óránként 0 perc alatt az adatbázis ki lesz töltve, archiválva és elküldve az FTP szerverre, és egy hétnél régebbi archívumok automatikusan törlődnek.

A MySQL adatbázis mentése az ftp kiszolgálóra

Frissítés. A gyakorlatban azt találták, hogy egyes kiszolgálóknak passzív módba kell mennünk, így a parancsot futtatniuk kell:

ftp_pasv ($ fc, true); Használja, ha a kiszolgálón vannak mentett archívumok biztonsági másolatokkal. Valószínűleg a kiszolgáló nem tudja eltávolítani őket.

Kapcsolódó cikkek