Din păcate, baza InnoDB funcționează pe principiul unui mamelon, adică du-te acolo, de acolo x ... Explicând acest lucru este un limbaj accesibil, spațiul de tabelă se poate extinde și descrește, dar dimensiunea fizică a bazei de date se modifică numai în direcția creșterii. Pur și simplu pune, dacă te baza a fost la 20gigov maximă, și apoi curățat eliberat 90% din spațiul din interiorul bazei va fi liber până la 90% (a se vedea spațiul poate fi o echipă în Management Console Server: Stare tabel mysql> spectacol;), dar din afară va ocupa încă 20 de spațiu pe hard disk pe disc. Deci, pentru mine, unul dintre serverele, a reușit să crească în timp ce eu Prochukhan faptul că a uitat să stabilească skriptik de curățare, 250 gig-uri, care, desigur, funcționează ca un ceas, dar cele mai multe cifre de acțiune pe nervi. În acest sens, trebuie să faceți ceva. Dar puteți face o singură cale, și anume să conduceți baza de date în spațiul de stocare sql și să o trageți înapoi, lăsând mai întâi monstrul existent. În acest sens, exact cum să defragmenta un spațiu tabelă, cel mai bun prieten al nostru este sistemul de utilitate mysqldump, o parte a serverului standard, mySQL pachetul de livrare.
*** Pentru a defragmenta InnoDB, puteți utiliza și metoda distilației cu bază dublă, utilizați comanda ALTER pentru ao converti la tipul MyISAM și apoi înapoi la tipul InnoDB.
Acest utilitar vă permite să facă o impresie instantanee a bazei de date (privind instantaneitate, desigur, am fost doar frumos la slovtsa- jumătate concert a fost de 7 minute, 250 au avut loc timp de 2,5 ore), care este un fișier text cu un set de comenzi SQL pentru a crea și popula tabele.
De fapt, mergem la lucru:
# mysqldump -uSQL_USER_EXIM -p EXIM_DATABASE> /tmp/exim.sql
-u sau -user = - nume de utilizator
-p-parolă - solicitare parolă
exim_database este numele bazei de date
exim.sql - fișier pentru ieșire dump
la un moment dat puteți să aruncați câteva baze de date, dacă le listați unul câte unul, după opțiunea -B sau -databases:
# mysqldump -uSQL_USER_EXIM -p bază de date1 -B baza de date2 bază de date3> /tmp/database.sql
De asemenea, puteți să aruncați toate tabelele dacă utilizați operatorul -A sau -all-databases:
# mysqldump -uSQL_USER_EXIM -p -A> /tmp/database.sql
Această operație va dura ceva timp și un spațiu pe disc, în funcție de dimensiunea bazei de date SQL.
După aceea, opriți serverul mySQL
*****
Din versiunea 6.x există o așa-numită copie de rezervă on-line pentru toate tipurile de baze de date. Caracteristicile sale distinctive sunt că nu blochează execuția INSERT / UPDATE / DELETE și se realizează prin cele mai simple comenzi:
DATABASE BACKUP
RESTABILIȚI
*****
Faceți o copie de rezervă a bazei de date pe care ne așteptăm să exporte din folderul% mysql% / date rescrie fișierul bază de date și jurnalul InnoDB și dosar * .frm corespunzător în locul cel mai retras pe șurubul.
După aceea, ștergeți tabelul și fișierele corespunzătoare acestuia și porniți serverul:
Serverul va gândi puțin și va restabili baza de date InnoDB goală, după care vom completa rezervarea noastră. Puteți face acest lucru în două moduri, fie din linia de comandă:
# mysql -uSQL_USER_EXIM -p EXIM_DATABASE
fie din consola server:
mysql> folosiți EXIM_DATABASE;
mysql> sursa exim.sql
Apoi ne uităm la performanța și mărimea discului pe care o ocupă baza de date.
******
Câteva sfaturi utile:
Cu resurse limitate de memorie sau o bază de date mare, ar trebui să utilizați opțiunea -quick sau -opt, care va permite utilitarul mysqldump să înceapă să elimine baza de date fără să o introducă mai întâi în memorie.
De asemenea, poate fi necesar să specificați codificarea în care doriți să obțineți o bază de date a bazei dvs. de date, pentru aceasta utilizați opțiunea -default-character-set =
Opțiunea -f va continua să execute copia de rezervă chiar dacă se primește o eroare în timpul procedurii.
O comandă convenabilă pentru backup automat cu compresie:
mysqldump -uROOT -psssswd DBNAME | gzip -c> `data '+% Y-% m-." ".gz
De asemenea, este posibil să rezervați o gazdă la distanță:
mysqldump -uROOT -PNUMBER_PORT -hHOST -password DBNAME