15%

Economisește 15% la toate serviciile de găzduire

Testează-ți abilitățile și obține Reducere la orice plan de găzduire

Utilizați codul:

Skills
Începeți
22.10.2024
1 +1

Cum să Restaurezi o Bază de Date MySQL Dintr-o Copie de Rezervă Folosind MySQL Workbench

Restaurarea unei baze de date MySQL dintr-o copie de rezervă folosind MySQL Workbench înseamnă importarea unui fișier dump .sql (sau un export bazat pe directoare) într-o schemă țintă prin intermediul expertului Data Import/Restore din GUI, care execută intern comenzi client mysql împotriva serverului dvs. Procesul durează mai puțin de cinci minute pentru baze de date mici și medii și necesită trei lucruri: o instanță de server MySQL funcțională, un fișier de rezervă valid și un cont de utilizator cu privilegii suficiente (CREATE, DROP, INSERT, ALTER și INDEX ca minimum).

Acest ghid acoperă fiecare pas, de la configurarea conexiunii până la verificarea post-restaurare, inclusiv cazurile limită — nepotriviri de seturi de caractere, restaurări parțiale, timeout-uri pentru fișiere mari și erori de privilegii — pe care documentația oficială le trece cu vederea.

Cerințe preliminare și listă de verificare a mediului

Înainte de a utiliza MySQL Workbench, confirmați următoarele:

  • MySQL Workbench 8.0+ este instalat. Aspectul UI descris aici corespunde versiunii 8.0.x. Versiunile mai vechi 6.x au o cale de meniu diferită.
  • Formatul fișierului de rezervă este compatibil. Expertul Data Import din MySQL Workbench acceptă fișiere .sql produse de mysqldump, Data Export din MySQL Workbench sau orice instrument care generează SQL DDL/DML standard. NU importă nativ fișiere .xbstream (Percona XtraBackup) sau fișiere binare .frm/.ibd — acestea necesită un proces separat de restaurare fizică.
  • Versiunea serverului MySQL țintă. Restaurarea unui dump din MySQL 8.0 într-un server MySQL 5.7 va eșua dacă dump-ul folosește sintaxă specifică versiunii 8.0 (de ex., coloane invizibile, indecși funcționali). Potriviți întotdeauna versiunile majore sau restaurați pe o versiune mai nouă.
  • Privilegii de utilizator. Rulați această interogare pentru a verifica că contul dvs. are ce este necesar:
SHOW GRANTS FOR 'your_user'@'localhost';
  • Setarea max_allowed_packet. Pentru dump-uri mari care conțin coloane BLOB sau instrucțiuni INSERT lungi, max_allowed_packet al serverului trebuie să fie suficient de mare. Verificați și măriți-l temporar dacă este necesar:
SHOW VARIABLES LIKE 'max_allowed_packet';
SET GLOBAL max_allowed_packet = 1073741824; -- 1 GB
  • net_read_timeout și net_write_timeout. Restaurările mari prin conexiuni lente pot atinge pragurile de timeout. Setați ambele la cel puțin 3600 secunde înainte de a începe.

Dacă gestionați un server la distanță, asigurați-vă că instanța dvs. de VPS Hosting are portul 3306 al MySQL accesibil de pe stația dvs. de lucru sau utilizați un tunel SSH (descris mai jos).

Pasul 1: Lansați MySQL Workbench și conectați-vă la serverul dvs.

Deschideți MySQL Workbench. Pe ecranul principal, veți vedea conexiunile salvate sub MySQL Connections.

Conectarea la un server local: Faceți clic pe dala de conexiune. Introduceți parola când vi se solicită.

Conectarea la un server la distanță prin tunel SSH: Dacă serverul dvs. MySQL se află pe un host la distanță și portul 3306 nu este expus public (postura de securitate recomandată), utilizați tunelul SSH integrat al Workbench:

  1. Faceți clic pe pictograma + de lângă „MySQL Connections.”
  2. Setați Connection Method la Standard TCP/IP over SSH.
  3. Completați hostname-ul SSH, numele de utilizator SSH și calea fișierului cheii SSH.
  4. Setați hostname-ul MySQL la 127.0.0.1 și portul la 3306.
  5. Faceți clic pe Test Connection pentru a confirma că tunelul funcționează înainte de a continua.

Aceasta este abordarea corectă pentru orice server de producție — nu expuneți niciodată MySQL direct pe internet public.

Pasul 2: Pregătiți schema bazei de date țintă

Aveți nevoie de o schemă de destinație înainte de import. Aveți două opțiuni:

Opțiunea A: Restaurare într-o schemă existentă

Dacă backup-ul a fost realizat dintr-o schemă care există încă pe server (de ex., efectuați un rollback după o migrare eșuată), schema este deja vizibilă în panoul Navigator > Schemas din stânga. Nu este necesară nicio acțiune aici — o veți selecta în timpul configurării importului.

Avertisment critic: Importul într-o schemă existentă NU elimină automat tabelele existente mai întâi, cu excepția cazului în care fișierul dvs. dump conține instrucțiuni DROP TABLE IF EXISTS. Dacă dump-ul a fost creat cu mysqldump --add-drop-table (implicit), tabelele existente vor fi eliminate și recreate. Dacă nu, este posibil să ajungeți cu date duplicate sau violări de constrângeri. Inspectați primele 50 de linii ale fișierului dvs. .sql pentru a confirma:

head -50 /path/to/your_backup.sql

Opțiunea B: Crearea unei scheme noi

Dacă restaurați într-o schemă nouă (migrare, mediu nou, recuperare în caz de dezastru), creați-o mai întâi. Mergeți la File > New Query Tab și rulați:

CREATE DATABASE `database_name`
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

Specificați întotdeauna CHARACTER SET utf8mb4 în mod explicit. Dacă creați schema cu setul de caractere implicit al serverului și dump-ul a fost realizat dintr-o bază de date utf8mb4, riscați coruperea silențioasă a codificării caracterelor pe coloanele de tip string. După executare, faceți clic pe pictograma de reîmprospătare (săgeată circulară) din panoul Schemas pentru a face vizibilă noua schemă.

Pasul 3: Deschideți expertul Data Import

Navigați la Server > Data Import în bara de meniu de sus. Panoul Data Import/Restore se deschide în spațiul de lucru principal.

Veți vedea două moduri de import:

Mod de importCând să utilizați
Import from Self-Contained FileUn singur fișier .sql produs de mysqldump sau Data Export din Workbench (modul fișier unic). Acesta este cel mai frecvent caz.
Import from Dump Project FolderUn director care conține mai multe fișiere .sql organizate pe schemă/tabel, produs de Data Export din Workbench în modul „project folder”. Fiecare tabel are propriul fișier.

Pentru marea majoritate a operațiunilor de restaurare, selectați Import from Self-Contained File.

Faceți clic pe Browse și navigați la fișierul de backup .sql. Workbench va afișa calea completă în câmp.

Pasul 4: Configurați schema țintă și opțiunile de import

Selectarea schemei țintă implicite

Sub Default Schema to be Imported To, deschideți lista derulantă și selectați schema țintă identificată sau creată la Pasul 2.

Când să lăsați acest câmp gol: Dacă fișierul dvs. dump conține propriile instrucțiuni CREATE DATABASE și USE (frecvent când mysqldump a fost rulat cu indicatorul --databases sau --all-databases), puteți lăsa câmpul schemei țintă gol. Workbench va lăsa scriptul SQL să gestioneze selecția schemei. Cu toate acestea, aceasta înseamnă că dump-ul va încerca să creeze baza de date — dacă aceasta există deja, este posibil să primiți o eroare dacă dump-ul nu include CREATE DATABASE IF NOT EXISTS.

Când trebuie să selectați o schemă țintă: Dacă dump-ul a fost creat cu mysqldump database_name > backup.sql (fără --databases), fișierul nu conține nicio instrucțiune CREATE DATABASE sau USE. TREBUIE să selectați schema țintă aici, altfel importul va eșua cu ERROR 1046: No database selected.

Structura dump vs. date

Dacă ați folosit exportul în folder de proiect al Workbench, veți vedea casete de selectare pentru a importa selectiv:

  • Dump Structure and Data — restaurare completă (implicit, recomandat pentru recuperare în caz de dezastru)
  • Dump Data Only — repopulează tabelele fără a recrea schema; util când schema corespunde deja
  • Dump Structure Only — recreează tabele/vizualizări/proceduri fără a insera rânduri

Pasul 5: Executați importul

Faceți clic pe Start Import în colțul din dreapta jos al panoului.

Workbench lansează un proces în fundal care transmite fișierul dvs. .sql prin clientul de linie de comandă mysql. Fila Import Progress și panoul Logs se actualizează în timp real. Urmăriți:

  • Bara de progres verde ajungând la 100% — finalizare cu succes.
  • ERROR 1044 — acces refuzat; utilizatorul dvs. nu are privilegii pe schema țintă.
  • ERROR 1005 / ERROR 1215 — eroare de constrângere a cheii externe; tabelele sunt create în ordine greșită sau un tabel referențiat lipsește. Aceasta se întâmplă uneori cu dump-uri parțiale.
  • ERROR 2006: MySQL server has gone away — pragul max_allowed_packet sau de timeout a fost atins. Măriți ambele valori conform secțiunii Cerințe preliminare și reîncercați.
  • Packet too large — aceeași cauză principală ca mai sus.

Pentru baze de date mari (dump-uri de mai mulți GB), GUI-ul Workbench poate părea înghețat. Nu este — procesul mysql de bază rulează în continuare. Nu închideți fereastra. Dacă aveți nevoie de mai mult control asupra restaurărilor mari, abordarea prin linie de comandă este mai fiabilă:

mysql -u your_user -p --max_allowed_packet=1G database_name < /path/to/backup.sql

Pasul 6: Verificați baza de date restaurată

Un mesaj de import reușit nu este o confirmare suficientă. Efectuați întotdeauna o verificare activă.

Verificare la nivel de schemă

În panoul Navigator, faceți clic dreapta pe Schemas și selectați Refresh All. Extindeți baza de date restaurată și confirmați vizual:

  • Toate tabelele așteptate sunt prezente
  • Vizualizările, procedurile stocate și declanșatoarele sunt listate sub nodurile respective

Verificare spot a numărului de rânduri

Deschideți o filă de interogare nouă, selectați baza de date restaurată și rulați:

SELECT
  table_name,
  table_rows,
  ROUND((data_length + index_length) / 1024 / 1024, 2) AS size_mb
FROM information_schema.tables
WHERE table_schema = 'database_name'
ORDER BY table_rows DESC;

Comparați aceste numere de rânduri cu sistemul sursă sau un manifest de backup anterior. table_rows din information_schema este o estimare pentru InnoDB — pentru numărători exacte pe tabelele critice, rulați SELECT COUNT(*) FROM table_name direct.

Verificarea integrității datelor

Pentru tabelele InnoDB, rulați o verificare rapidă de consistență:

CHECK TABLE your_table_name EXTENDED;

Dacă aveți relații de cheie externă, verificați că integritatea referențială nu a fost compromisă în timpul importului:

SET FOREIGN_KEY_CHECKS = 1;
-- Then attempt a JOIN across related tables to confirm linkage
SELECT COUNT(*) FROM orders o JOIN customers c ON o.customer_id = c.id;

Verificarea codificării caracterelor

Dacă aplicația dvs. stochează conținut multilingv, verificați că caracterele speciale nu au fost alterate:

SELECT column_name FROM table_name WHERE column_name LIKE '%ü%' LIMIT 5;

Dacă rezultatele sunt goale când nu ar trebui să fie, probabil aveți o nepotrivire de set de caractere între dump și schema țintă.

Gestionarea fișierelor de backup mari și considerații de performanță

Pentru baze de date care depășesc câteva sute de megabytes, GUI-ul Workbench devine impractical. Luați în considerare aceste abordări:

Împărțiți dump-ul pe tabel: Dacă trebuie să restaurați doar anumite tabele, extrageți-le din dump:

grep -n "Table structure for table" /path/to/backup.sql

Aceasta afișează numerele de linie pentru fiecare bloc de tabel, permițându-vă să extrageți un interval specific cu sed sau awk.

Utilizați mysqlimport pentru restaurări bazate pe CSV: Dacă backup-ul dvs. este în format CSV (exportat prin SELECT ... INTO OUTFILE), mysqlimport este semnificativ mai rapid decât procesarea instrucțiunilor SQL rând cu rând.

Dezactivați indecșii în timpul importului: Pentru seturi de date foarte mari, dezactivarea temporară a actualizărilor de indecși poate reduce timpul de import cu 50–80%:

ALTER TABLE large_table DISABLE KEYS;
-- (import data)
ALTER TABLE large_table ENABLE KEYS;

Specific pentru InnoDB, setați innodb_autoinc_lock_mode = 0 și foreign_key_checks = 0 în sesiunea dvs. înainte de import:

SET SESSION foreign_key_checks = 0;
SET SESSION unique_checks = 0;

Dacă rulați MySQL pe un Server Dedicat cu debit I/O ridicat, puteți de asemenea să măriți temporar innodb_buffer_pool_size pentru a accelera importul, păstrând mai multe date în memorie în loc să le scrieți constant pe disc.

Comparație: Import date MySQL Workbench vs. Restaurare prin linie de comandă

CriteriuGUI MySQL Workbench`mysql` CLI / `mysqldump`
Ușurință în utilizareRidicată — point-and-clickModerată — necesită familiarizare cu CLI
Gestionarea fișierelor mariSlabă peste ~500 MB (GUI îngheață)Excelentă — transmite direct
Vizibilitatea progresuluiPanou de log, detalii limitateDetaliat cu indicatorul --verbose
Restaurare selectivă a tabelelorSuportată (modul folder de proiect)Necesită editare manuală a fișierului sau indicatorul --tables
Automatizare / scriptingNu este posibilComplet scriptabil prin cron/bash
Suport tunel SSHIntegratNecesită redirecționare manuală a portului SSH
Controlul setului de caractereLimitatControl complet prin --default-character-set
Cel mai potrivit pentruRestaurări ad-hoc, medii de dezvoltareProducție, CI/CD, baze de date mari

Capcane frecvente și cum să le evitați

Restaurarea unui dump care include clauze DEFINER: Procedurile stocate și vizualizările conțin adesea DEFINER='original_user'@'original_host'. Dacă acel utilizator nu există pe serverul țintă, importul va reuși, dar executarea acelor obiecte va eșua cu ERROR 1449. Eliminați sau înlocuiți clauzele DEFINER înainte de import:

sed 's/DEFINER=[^ ]* / /g' original_backup.sql > cleaned_backup.sql

Nepotriviri de fus orar: Dacă aplicația dvs. stochează valori DATETIME și serverele sursă și țintă se află în fusuri orare diferite, datele vor apărea decalate. Confirmați întotdeauna că @@global.time_zone corespunde între sursă și țintă înainte de restaurare.

Restaurarea într-un mediu replicat: Dacă serverul MySQL țintă este un primar de replicare, instrucțiunile de import vor fi scrise în jurnalul binar și replicate pe toate replicile. Aceasta este de obicei dorită pentru o restaurare completă, dar poate cauza probleme dacă replicile sunt deja înainte sau în urmă. Întrerupeți replicarea pe replici înainte de o operațiune majoră de restaurare.

Umflarea jurnalului binar: Importurile mari generează fișiere de jurnal binar enorme. Dacă spațiul pe disc este limitat, dezactivați temporar jurnalizarea binară pentru sesiune:

SET SQL_LOG_BIN = 0;
-- (perform import)
SET SQL_LOG_BIN = 1;

Notă: aceasta necesită privilegiul SUPER sau BINLOG ADMIN și ar trebui făcută doar pe servere standalone, niciodată pe primari de replicare unde replicile depind de jurnalul binar.

Configurarea backup-urilor automate pentru a preveni pierderea viitoare de date

O procedură de restaurare este la fel de bună ca backup-ul care o alimentează. Dacă gestionați propriul server MySQL — fie pe un VPS cu cPanel sau un VPS Linux simplu — automatizați backup-urile cu un job cron:

# Daily mysqldump backup with timestamp, retained for 7 days
0 2 * * * /usr/bin/mysqldump -u backup_user -p'StrongPassword' 
  --single-transaction 
  --routines 
  --triggers 
  --hex-blob 
  --default-character-set=utf8mb4 
  your_database | gzip > /backups/db_$(date +%F).sql.gz 
  && find /backups -name "db_*.sql.gz" -mtime +7 -delete

Explicarea indicatorilor cheie:

    --single-transaction — realizează un instantaneu consistent al tabelelor InnoDB fără a le bloca, esențial pentru bazele de date live
    --routines — include proceduri și funcții stocate (omise implicit)
    --triggers — include declanșatoare (incluse implicit, dar explicit este mai bine)
    --hex-blob — exportă coloanele BLOB ca șiruri hexazecimale, prevenind coruperea datelor binare
    
    Stocați backup-urile în afara serverului. Un backup pe același disc ca baza de date pe care o protejează nu este un backup — este o falsă senzație de securitate. Utilizați stocare la distanță, stocare de obiecte sau un server secundar. Dacă mediul dvs. de hosting suportă Panouri de control VPS, majoritatea panourilor includ funcții de backup programat integrate care pot trimite copii automat la destinații la distanță.
    Listă de verificare a punctelor tehnice cheie
    Înainte de a efectua orice restaurare MySQL, parcurgeți această matrice de decizie:
    
    [ ] Confirmați că tipul fișierului de backup este .sql (dump bazat pe text) — nu format binar XtraBackup
    [ ] Potriviți versiunile majore ale serverului MySQL între sursă și țintă
    [ ] Verificați că utilizatorul are privilegiile CREATE, DROP, INSERT, ALTER, INDEX pe schema țintă
    [ ] Verificați max_allowed_packet și variabilele de timeout; măriți-le dacă dump-ul conține BLOB-uri sau este mare
    [ ] Inspectați primele 50 de linii ale dump-ului pentru a determina dacă sunt prezente instrucțiuni CREATE DATABASE / USE
  • [ ] Decideți: restaurare în schema existentă (risc de fuzionare a datelor) sau schemă nouă (tablă curată)
  • [ ] Eliminați clauzele DEFINER dacă restaurați pe un server diferit cu conturi de utilizator diferite
  • [ ] Confirmați că seturile de caractere corespund între dump și schema țintă (utf8mb4 recomandat universal)
  • [ ] Pentru restaurări în producție: dezactivați replicarea, dezactivați jurnalizarea binară dacă este cazul, realizați un instantaneu pre-restaurare
  • [ ] După import: verificați numărul de rânduri, rulați CHECK TABLE, testați conectivitatea aplicației
  • [ ] Pentru baze de date peste 500 MB: ocoliți GUI-ul Workbench și utilizați direct CLI mysql
  • Întrebări frecvente

    Î: Poate MySQL Workbench restaura direct un fișier de backup .sql.gz comprimat?

    Nu. Expertul Data Import din MySQL Workbench nu acceptă fișiere comprimate gzip. Decomprima-ți mai întâi fișierul cu gunzip backup.sql.gz sau transmiteți-l direct prin CLI: gunzip -c backup.sql.gz | mysql -u user -p database_name.

    Î: De ce importul se finalizează fără erori, dar unele tabele lipsesc?

    Cea mai frecventă cauză este că dump-ul a fost creat cu --no-tablespaces sau a fost un export parțial care a exclus anumite tabele. Deschideți fișierul .sql și căutați CREATE TABLE table_name pentru a confirma dacă tabelele lipsă au fost vreodată incluse în dump.

    Î: Care este diferența dintre „Import from Self-Contained File” și „Import from Dump Project Folder” în Workbench?

    Un fișier self-contained este un singur fișier .sql monolitic care conține tot DDL și DML pentru întreaga bază de date. Un folder de proiect dump este o structură de directoare în care schema și datele fiecărui tabel sunt stocate în fișiere separate — acest format este produs când utilizați Data Export din Workbench cu opțiunea „Export to Dump Project Folder”. Formatul folder de proiect permite restaurări selective la nivel de tabel mai ușor.

    Î: Restaurarea mea eșuează cu ERROR 1215: Cannot add foreign key constraint. Cum o remediez?

    Aceasta se întâmplă când tabelele sunt create într-o ordine care violează dependențele de cheie externă — un tabel părinte referențiat nu există încă când tabelul copil este creat. Soluția este dezactivarea verificărilor de cheie externă pentru sesiunea de import. Adăugați SET FOREIGN_KEY_CHECKS=0; la începutul fișierului dvs. .sql și SET FOREIGN_KEY_CHECKS=1; la sfârșit, apoi rulați din nou importul.

    Î: Este sigur să restaurați un backup direct pe o bază de date de producție live fără a realiza mai întâi un instantaneu?

    Nu. Realizați întotdeauna un backup curent al bazei de date live înainte de a o suprascrie. Chiar dacă aveți încredere în fișierul de backup, o operațiune de restaurare care eșuează la jumătate poate lăsa schema într-o stare parțial modificată. Utilizați mysqldump --single-transaction pentru a captura starea curentă în câteva secunde fără timp de nefuncționare, apoi continuați cu restaurarea.

    15%

    Economisește 15% la toate serviciile de găzduire

    Testează-ți abilitățile și obține Reducere la orice plan de găzduire

    Utilizați codul:

    Skills
    Începeți