Säkerhetskopiera databasen med PDO

PHPportalen Forum Index » Tips och Trix
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
thedragon



Medlem i: 5703 dagar

Status: Offline



#729054
Inlägg Skrivet: 2013-01-09 21:04      Ämne: Säkerhetskopiera databasen med PDO Citera

Hej.

Jag har skapat en funktion som skapar en kopia av ens databas och sparar den till en SQL-fil. Du kan välja om du vill att katalogen som filen ska ligga i, ska skapas per automatik innan själva filen skapas, eller inte. Ni hittar källkoden på min GitHub: https://github.com/edgren/sql-dump

Källkoden är väl kommenterad (dock på engelska) och det är enkelt att komma igång. För tillfället kan den bugga, om det finns många data i en tabell. Jag vet inte varför den gör det, men jag arbetar på att åtgärda problemet.

Det hade varit trevligt om ni kunde skriva vad ni tycker om funktionen Smile

Senast ändrad av thedragon den 2013-01-10 00:39, ändrad totalt 1 gång
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Figgy



Medlem i: 4799 dagar

Status: Offline



#729057
Inlägg Skrivet: 2013-01-09 22:08      Ämne: Citera

Jag skulle tips om att kanske skriva till dumpfilen i realtid. Att buffra dumpen kommer med en stor databas att bidra med att minnet tar slut.

Snacka om att jag vart förvirrad också. Läs kommentarerna på rad #67 samt #72 Smile Jag kunde inte för mitt liv förstå varför du räknade rader som du gjorde, och inte förstod jag varför du räknade kolumner som du gjorde. Hehe, innan jag insåg att kommentarerna ligger på fel plats, samt att du döpt dina variabler lite fel. (Kanske är därför du inte får med all data?)

När du räknar kolumner är det också bra att du sätter en "LIMIT 1" för optimeringens skull. Detta gör att mysql hämtar en rad istället för alla rader, när syftet bara är att räkna antalet kolumner.

+1 för snygg kodformatering.

Senast ändrad av Figgy den 2013-01-09 22:45, ändrad totalt 1 gång
 

_________________
Vebut.se
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
thedragon



Medlem i: 5703 dagar

Status: Offline



#729060
Inlägg Skrivet: 2013-01-09 22:20      Ämne: Citera

I realtid? Menar du med hjälp av jQuery och/eller AJAX?

Hehe. Det där var den enda lösningen som jag kunde komma på här om natten. Jag var väldigt trött när jag skrev SQL Dump, så det kan finnas "tonvis" med finslipning Smile

Varför ska jag sätta dit en LIMIT 1$count_columns? All data följer ju inte med då, vilket de ska.

Tack Smile
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Figgy



Medlem i: 4799 dagar

Status: Offline



#729062
Inlägg Skrivet: 2013-01-09 22:34      Ämne: Citera

Du sparar allt i en sträng med .=, vilket gör att om du har en databas på 500mb så kommer scriptet behöva mer än 500MB tillgängligt minne att arbeta med.

Om du istället börjar med att skapa filen, antingen den riktiga filen eller en temporär fil, så kan du skriva allt direkt istället för att först buffra och sedan skriva till filen med en stream. fopen

Enkelt beskrivet;
KOD:
1:
Såhär arbetar ditt script idag:
2:
- hämta data
3:
- buffra data (nu arbetar ditt script med t.ex. 500MB i resurser)
4:
- skriv till fil
5:
 
6:
Det blir bättre om du gör såhär;
7:
- hämta data
8:
- skriv till fil (2kb skrivet)
9:
- hämta data
10:
- skriv till fil (3kb skrivet)
11:
osv. osv.


Som jag förstår det vill du räkna antalet kolumner och inte hämta någon data vid detta tillfälle. Om du ställer frågan "SELECT * FROM tabel" utan en limit kommer mysql hämta alla rader från den tabellen 2 gånger (rad #140). Om du sätter en limit kostar bara frågan (på rad #68 ) en rad istället för kanske 200k rader.
 

_________________
Vebut.se
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
thedragon



Medlem i: 5703 dagar

Status: Offline



#729064
Inlägg Skrivet: 2013-01-09 22:44      Ämne: Citera

Japp. Jag tittade lite mer noga i SQL-filen från phpMyAdmin och såg där att de hade tagit en ny INSERT INTO ... efter var 608:e rad. Jag ska fixa in detta till SQL Dump nu.

Nu förstår jag varför funktionen buggade lite ^^
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
h0tsh0t



Medlem i: 5890 dagar

Status: Offline



#729072
Inlägg Skrivet: 2013-01-10 09:45      Ämne: Citera

Bra initiativ osv ser lovande ut.
Fast varför inte bara använda mysqldump i consolen?.

Att göra backupen via PHP och spara i www katalogen känns inte som något man gör i produktions miljö i vart fall.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
thedragon



Medlem i: 5703 dagar

Status: Offline



#729075
Inlägg Skrivet: 2013-01-10 12:12      Ämne: Citera

Tack Smile

Jag letade häromdagen efter en funktion som gör just det min funktion gör - säkerhetskopierar databasen. Jag hittade dock ingen, så jag testade mysqldump() på både min stationära dator (Windows) och på mitt domäns server (Linux), men jag fick det inte att funka. Den vägrade att göra en kopia av min databas, trots att jag hade angett rätt uppgifter. Jag har letat överallt efter just den kopian, men hittade den aldrig.

Därför bestämde jag mig för och göra en egen säkerhetskopierings-funktion, vilket fick bära namnet SQL Dump.

Att säkerhetskopiera databasen med hjälp av en PHP-funktion och göra så att filen sparas utanför målkatalogen (till exempel i /www/backup istället för /www/public_html) efter ett klick på en länk, är lika säkert som att använda sig av mysqldump().

Det enda som kan gå fel, är undertiden när filen skapas och läggs i målkatalogen. Ja, att någon till exempel lyckas spåra filen medan den skapas och hackar sig därefter in på servern och tar den. Detta anser jag bara hända (om det ens möjligt att andra kan spåra ens sparade filer) en på miljonen, typ.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
h0tsh0t



Medlem i: 5890 dagar

Status: Offline



#729076
Inlägg Skrivet: 2013-01-10 12:28      Ämne: Citera

Jaja en på miljonen... ändå vinner folk på lotto, skämt åsido.
Allt beror på vilken policy man har för sina backup rutiner.

Väldigt underligt att du inte kunde köra mysqldump.
Mysqldump borde finnas i mysql\bin under windows dvs du måste stå i den katalogen för att kunna köra programmet, det räcker inte med att öppna kommando prompt-en. Om det ens är installerat..

Under linux bör det finnas redan om mysql är installerat, om inte annat
KOD:
1:
apt-get install mysqldump
Med viss reservation, beroende på vilken dist.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
thedragon



Medlem i: 5703 dagar

Status: Offline



#729079
Inlägg Skrivet: 2013-01-10 13:51      Ämne: Citera

Självklart är det så som du säger - risken/chansen finns alltid där.

I sådana fall har inte webbhotellet som jag har webbsidan på, installerat eller aktiverat mysqldump(). Hur som helst så gör min funktion det den ska göra, trots lite småbugg.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
h0tsh0t



Medlem i: 5890 dagar

Status: Offline



#729083
Inlägg Skrivet: 2013-01-10 14:26      Ämne: Citera

du har testat mysqldump utan () hoppas jag verkligen.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Figgy



Medlem i: 4799 dagar

Status: Offline



#729084
Inlägg Skrivet: 2013-01-10 14:48      Ämne: Citera

h0tsh0t skrev:
du har testat mysqldump utan () hoppas jag verkligen.
Tror inte webbhotell ger tillgång till SSH på det sättet. Eller ja, binero tror jag gjorde det tidigare i alla fall men tror inte det är många som kan/vet hur man använder det.

Det låter lite på OP som att han inte förstod att det är ett kommando och inte en funktion i php.
 

_________________
Vebut.se
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
h0tsh0t



Medlem i: 5890 dagar

Status: Offline



#729085
Inlägg Skrivet: 2013-01-10 14:53      Ämne: Citera

Figgy skrev:

Det låter lite på OP som att han inte förstod att det är ett kommando och inte en funktion i php.


Ja det var det jag var inne på det sista.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
thedragon



Medlem i: 5703 dagar

Status: Offline



#729086
Inlägg Skrivet: 2013-01-10 14:57      Ämne: Citera

h0tsh0t skrev:
du har testat mysqldump utan () hoppas jag verkligen.


Hoppsan! Jag menade såklart exec(mysqldump ...). Mitt misstag :/ Vi som är kund hos Binero har inte tillgång till någon egen cronjob än, så man får ringa till dem varje gång man vill ha något sånt, vilket är drygt i längden.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
JimmieJohansson



Medlem i: 4511 dagar

Status: Offline



#729093
Inlägg Skrivet: 2013-01-10 16:32      Ämne: Citera

Gillar idén!

Ang. cronjobs på Binero är det ett jävla drygt pissjobb. Själv kör jag setcronjob.com om jag behöver det på Binero.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
thedragon



Medlem i: 5703 dagar

Status: Offline



#729096
Inlägg Skrivet: 2013-01-10 17:29      Ämne: Citera

JimmieJohansson skrev:
Gillar idén!

Ang. cronjobs på Binero är det ett jävla drygt pissjobb. Själv kör jag setcronjob.com om jag behöver det på Binero.


Roligt att höra Smile

SetCronJob var en väldigt trevlig tjänst. Man tackar så mycket för tipset ^^
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » Tips och Trix
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic