sql >> Database teknologi >  >> RDS >> Mysql

Automatiseret eller regelmæssig backup af mysql-data

CSV og VÆLG I UDFIL

http://dev.mysql.com/doc/refman /5.7/da/select-into.html

SELECT ... INTO OUTFILE skriver de valgte rækker til en fil. Kolonne- og linjeterminatorer kan specificeres til at producere et specifikt outputformat.

Her er et komplet eksempel:

SELECT * FROM my_table INTO OUTFILE '/tmp/my_table.csv'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'
  FROM test_table;

Filen gemmes på serveren, og den valgte sti skal være skrivbar. Selvom denne forespørgsel kan udføres via PHP og en webanmodning, udføres den bedst via mysql-konsollen.

De data, der eksporteres på denne måde, kan importeres til en anden database ved hjælp af INDLÆS DATAINFIL

Selvom denne metode er overlegen at gentage et resultatsæt og gemme til en fil række for række, er det ikke så godt som at bruge...

mysqldump

mysqldump er overlegen i forhold til SELECT INTO OUTFILE på mange måder, er produktion af CSV blot én af de mange ting, som denne kommando kan gøre.

Mysqldump-klientværktøjet udfører logiske sikkerhedskopier og producerer et sæt SQL-sætninger, der kan udføres for at reproducere de originale databaseobjektdefinitioner og tabeldata. Den dumper en eller flere MySQL-databaser til backup eller overførsel til en anden SQL-server. mysqldumpcommand kan også generere output i CSV, anden separeret tekst eller XML-format.

Ideelt set bør mysqldump påberåbes fra din shell. Det er muligt at bruge exec i php for at køre det, men da produktionen af ​​dumpet kan tage lang tid afhængigt af mængden af ​​data, og php-scripts normalt kun kører i 30 sekunder, skal du køre det som en baggrundsproces.

mysqldump er ikke uden sin rimelige andel af problemer.

Det er ikke tænkt som en hurtig eller skalerbar løsning til sikkerhedskopiering af betydelige mængder data. Med store datastørrelser, selvom sikkerhedskopieringen tager rimelig tid, kan gendannelse af data være meget langsom, fordi genafspilning af SQL-sætningerne involverer disk I/O til indsættelse, indeksoprettelse og så videre.

Et klassisk eksempel se dette spørgsmål: Servernedbrud på MySQL-sikkerhedskopi ved hjælp af python hvor den ene mysqldump ser ud til at starte før den tidligere er færdig og har gjort hjemmesiden fuldstændig uresponsiv.

Mysql-replikering

Replikering gør det muligt at kopiere data fra én MySQL-databaseserver (masteren) til en eller flere MySQL-databaseservere (slaverne). Replikering er som standard asynkron; slaver behøver ikke at være forbundet permanent for at modtage opdateringer fra masteren. Afhængigt af konfigurationen kan du replikere alle databaser, udvalgte databaser eller endda udvalgte tabeller i en database.

Således replikering fungerer anderledes end SELECT INTO OUTFILE eller msyqldump Det er ideelt at holde dataene i den lokale kopi næsten opdateret (ville have sagt perfekt synkroniseret, men der er noget, der hedder slavelag) På den anden side, hvis du bruger en planlagt opgave til at køre mysqldump en gang hver 24 timer. Forestil dig, hvad der kan ske, hvis serveren går ned efter 23 timer?

Hver gang du kører mysqldump, producerer du en stor mængde data, fortsæt med at gøre det regelmæssigt, og du vil opdage, at din harddisk er fyldt op, eller dine fillagringsregninger rammer taget. Med replikering videregives kun ændringerne til serveren (ved at bruge den såkaldte binlog)

XtraBackup

Et alternativ til replikering er at bruge Percona XtraBackup .

Percona XtraBackup er et open source hot backup-værktøj til MySQL-baserede servere, der ikke låser din database under sikkerhedskopieringen.

Selvom Percona er kompatibel med Mysql og Mariadb. Det har evnen til at lave inkrementelle sikkerhedskopier, hvilket er den største begrænsning ved mysqldump.



  1. SQLite COUNT

  2. Flere indekser vs Multi-kolonne indekser

  3. Sådan forbinder du en database med en Amazon VPC

  4. ScaleGrid DBaaS udvider MySQL Hosting Services gennem AWS Cloud