Navigare după înregistrări
Periodic, acolo, atunci întrebarea este ridicată, cum să faceți o copie de rezervă a bazei de date sau cum să executați un script SQL de dimensiuni uriașe.
Dacă aveți acces la server prin FTP numai și este interzisă de scripturi PHP executa comenzi shell, atunci nu există nici o altă alternativă decât să caute script-uri îndeplini funcțiile necesare în PHP pură. Cu toate acestea, pe cele mai multe platforme de hosting de acces SSH disponibil la server. Și pe majoritatea server de * nix, chiar dacă acestea nu sunt servere de baze de date instalate deja utilitarele linie de comandă pentru baza de date MySQL.
Deci, avem nevoie de acces SSH la server, disponibilitatea mysql și mysqldump pe server și acces la lansarea lor.
Dacă există Windows pe calculatorul de acasă, este convenabil să lucrați cu serverul prin intermediul WinSCP ca manager de fișiere și PuTTY ca client SSH. WinSCP și PuTTY pot fi legate. Dacă operațiile cu baza de date sunt o singură dată și nu vor fi stocate în scripturi, WinSCP nu este necesară, ci doar o consolă.
Pentru a face o copie de siguranță a întregii baze de date, trebuie să executați comanda;
mysqldump --host = $ gazdă --user = $ user - p $ pass $ db> $ sqlfile
aici:
$ host - Server de baze de date
$ user - Utilizator bază de date
$ pass - Parola bazei de date
$ db - Numele bazei de date
$ sqlfile - Numele fișierului în care va fi salvată memoria.
Pentru a copia anumite tabele de baze de date, puteți utiliza următoarea sintaxă:
mysqldump --host = $ gazdă --user = $ user - p $ pass $ db $ table1 $ table2> $ sqlfile
Pentru a umple acest depozit într-o altă bază de date, trebuie să executați comanda:
mysql --host = $ host2 --user = $ user2 -p $ pass2 $ db2 <$sqlfile
# datele celei de-a doua baze de date în care copiem:
pass2 = 'pass2'
user2 = 'user2'
db2 = 'db2'
host2 = 'mysql2.ru'
# numele fișierului este format din masca: DB_year_month_day.day.sql
sqlfile = $ db '_' `data +% Y_% m_.``.sql '
# Creați o copie a primei baze de date
mysqldump --host = $ gazdă --user = $ user - p $ pass $ db> $ sqlfile
# Completați fișierul la cea de-a doua bază de date
mysql --host = $ host2 --user = $ user2 -p $ pass2 $ db2 <$sqlfile
Backup-urile bazei de date sunt create cel mai bine într-un program și imediat comprimate. Prin urmare, următorul script include comenzi pentru selectarea directorului și arhivarea.
sqldump.sh:
# cale către dosarul de backup
home = '/ home / web / back / dbname'
pass = 'parola'
user = 'user'
db = 'bază'
host = 'server'
# selectați un subfolder: în prima zi a lunii, adăugați-l în dosarul "m"
# în fiecare duminică - în dosarul "w", toate celelalte - în dosarul "d"
dacă [`data + .` =" 01 "]
atunci
subf = "m"
elif [`data +% u` =" 7 "]
atunci
subf = "w"
altfel
subf = "d"
Fi
# Stabiliți numele fișierelor sql și tar.gz
sqlfile = $ db '_' `data +% Y_% m_.``.sql '
tgzfile = 'înapoi /' $ subf '/' $ sqlfile'.tgz '
# creați un depozit
mysqldump --host = $ gazdă --user = $ user - p $ pass $ db> $ sqlfile
# arhivă
tar -czf $ tgzfile $ sqlfile
# ștergeți comanda
rm $ sqlfile
Dacă se creează o copie a unei baze de date mari, cu un număr mare de tabele, se poate obține o eroare a formularului:
Eroare de eroare: 1016: Nu se poate deschide fișierul: "bază / tabel" (errno: 24) atunci când se utilizează TABLA DE ÎNCĂRCARE
apoi în opțiunea mysqldump, adăugați opțiunea "singură-tranzacție":
mysqldump - singură-tranzacție --host = $ gazdă --user = $ user - p $ pass $ db> $ sqlfile