Mysql segédprogramok használata, mysqldump ssh segítségével

Navigáció rekordok szerint

Időnként ott, akkor felmerül a kérdés, hogyan készítsünk biztonsági másolatot az adatbázisról, vagy hogyan kell végrehajtani egy hatalmas méretű SQL szkriptet.






Ha csak a FTP-n keresztül férhet hozzá a kiszolgálóhoz, és a php parancsfájlok nem futtathatnak shell parancsokat, akkor nincs más módja annak, hogy olyan szkripteket keresjen, amelyek a szükséges funkciókat tiszta PHP-ben hajtják végre. Azonban a legtöbb hosting weboldal SSH hozzáférést biztosít a kiszolgálóhoz. És a legtöbb * nix szerveren, még akkor is, ha nem adatbázis-kiszolgálók, a parancssori segédprogramok a mysql-hez való használatra már telepítve vannak.

Tehát: szükségünk van az SSH hozzáférésre a szerverre, a mysql és a mysqldump elérhetőségére a kiszolgálón, és hozzáférést kell biztosítani azok indításához.
Ha van otthoni számítógépen a Windows, kényelmes a WinSCP-n keresztül a szerverrel dolgozni, mint a fájlkezelő és a PuTTY, mint az SSH kliens. A WinSCP és a PuTTY összekapcsolható. Ha az adatbázis-műveletek egyszeriek, és nem lesznek tárolva a szkriptekben, akkor nincs szükség WinSCP-re, csak egy konzolra.

A teljes adatbázis biztonsági másolatának elkészítéséhez futtatni kell a parancsot;

mysqldump --host = $ host --user = $ felhasználó -p $ pass $ db> $ sqlfile

itt:
$ host - Adatbázis-kiszolgáló
$ user - Adatbázis felhasználó
$ pass - Adatbázis jelszó
$ db - Adatbázis neve
$ sqlfile - Az a fájl neve, amelyre a dump mentésre kerül.







Bizonyos adatbázis-táblák másolásához a következő szintaxist használhatja:
mysqldump --host = $ host --user = $ felhasználó -p $ pass $ db $ table1 $ table2> $ sqlfile

Ha ezt a dumpot egy másik adatbázishoz szeretné kitölteni, végre kell hajtania a következő parancsot:
mysql --host = $ host2 - felhasználó = $ user2 -p $ pass2 $ db2 <$sqlfile

# a második adatbázis adat, amelybe másolunk:
pass2 = 'pass2'
user2 = 'user2'
db2 = 'db2'
host2 = 'mysql2.ru'

# a fájlnév a maszkból áll: DB_year_month_day.day.sql
sqlfile = $ db '_' `dátum +% Y_% m_.`'.sql '

# Hozzon létre egy példányt az első adatbázisból
mysqldump --host = $ host --user = $ felhasználó -p $ pass $ db> $ sqlfile

Töltse ki a fájlt a második adatbázisba
mysql --host = $ host2 - felhasználó = $ user2 -p $ pass2 $ db2 <$sqlfile
Az adatbázis-biztonsági mentések a legegyszerűbbek az ütemterv alapján és azonnal tömörítve. Ezért a következő parancsfájl tartalmaz parancsokat a könyvtár kiválasztásához és az archiváláshoz.

sqldump.sh:
# a mentési mappa elérési útja
home = '/ home / web / back / dbname'
pass = "jelszó"
user = 'felhasználó'
db = "alap"
host = "szerver"

# válasszon egy almappát: a hónap első napján add hozzá az 'm' mappába,
# minden vasárnap - a "w" mappában, az összes többi - a "d"
ha [`dátum + .` =" 01 "]
majd
subf = "m"
elif [`dátum +% u` =" 7 "]
majd
subf = "w"
más
subf = "d"
fi

# Állítsa be az sql és a tar.gz fájlok nevét
sqlfile = $ db '_' `dátum +% Y_% m_.`'.sql '
tgzfile = 'back /' $ subf '/' $ sqlfile'.tgz '

# hozzon létre egy dumpot
mysqldump --host = $ host --user = $ felhasználó -p $ pass $ db> $ sqlfile
# archívum
tar -czf $ tgzfile $ sqlfile
# törölje a dumpot
rm $ sqlfile

Ha egy nagy adatbázis létrehozása nagyszámú táblázattal történik, az űrlap hibája szerezhető be:
Hiba történt: 1016: Nem lehet megnyitni a fájlt: "base / table" (errno: 24) a LOCK TABLES használatakor
majd a mysqldump opcióban adja hozzá a -single-transaction opciót:

mysqldump - egyedüli tranzakció - host = $ host --user = $ felhasználó -p $ pass $ db> $ sqlfile