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.

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.