Database backup systeem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Youri van Weegberg

Youri van Weegberg

21/07/2009 10:09:00
Quote Anchor link
Hallo iedereen,

Wat vinden jullie van mijn database backup systeem? En is dit te plaatsen als script of niet?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
// --- Begin config ---

$user_naam = ""; // Hier jouw naam invullen
$site_naam = ""; // Hier de naam van jouw site invullen
$show_at_end = 0; // Aangeven of je het bestand wilt echoën aan het einde van dit script; 0 voor Nee; 1 voor Ja

// Hier de gegevens invullen van de database die moet worden ge-backupt


$sql_u = "";         // Gebruikersnaam van MySql
$sql_p = "";             // Wachtwoord van MySql
$sql_h = "localhost";             // Host van MySql
$sql_d = ""; // Database van MySql

mysql_connect($sql_h,$sql_u,$sql_p); // Verbinding maken met MySql
mysql_select_db($sql_d);

// --- Einde config ---

if(!is_dir("backup/")) {  // Nakijken of de map bestaat waar de backup in word gemaakt
 mkdir("backup/"); // De map bestaat niet, de maken word aangemaakt!
}

function
makeline($array) {      // Functie om makkelijk een lijn van een kolom te maken vanuit een array
 if($array['Null'] == "NO") {    // Not Null opvragen
  $null = "NOT NULL";
 }
else{
  $null = "NULL";
 }

 $line = $array['Field']." ".$array['Type']." ".$null; // Basislijn met de tabelnaam enz. maken
 if(!empty($array['Default'])) {                  // Kijken of er een Default is ingesteld voor die kolom
  $line .= " DEFAULT '".$array['Default']."'";
 }

 if(!empty($array['Extra'])) {      // Kijken of er een Extra waarde is ingesteld voor die kolom (bijv. auto_increment)
  $line .= " ".$array['Extra'];
 }

 $line .= ",";
 return $line;  // Die lijn terugsturen
}

$tab = mysql_list_tables($sql_d);  // Alle tabellen op en rijtje
$count = mysql_num_rows($tab);   // Tellen hoeveel tabellen we hebben
for ($i = 0; $i < $count; $i++) {   // Alle tabellen in een array met een for()
 $tabellen[] = mysql_tablename($tab,$i);
}

$sqlcode = "-- Backup database ".$site_naam."\n"; // Het begin in de code; $sqlcode is het variabele waar de hele backup in word gezet
$sqlcode .= "-- COPYRIGHT ".$user_naam." ".date('Y')."\n\n\n";
foreach($tabellen as $tabel) { // Met een foreach() elke tabel afwerken
 $rijen = "";
 $sqlcode .= "-- Structuur voor tabel ".$tabel."\n\n";
 $sqlcode .= "CREATE TABLE IF NOT EXISTS ".$tabel." (\n"; // Nieuwe tabel aanmaken
 $sql = mysql_query("SHOW COLUMNS FROM ".$tabel);  // Alle kolommen opvragen van de tabel
 while($r = mysql_fetch_object($sql)) { // Elke kolom in een de array: $array
  foreach($r as $n => $v) {
   $array[$n] = $v;
  }

  $sqlcode .= "      ".makeline($array)."\n"; // De functie makeline aanroepen, en de array: $array meesturen
 }
 $sqlcode .= "     PRIMARY KEY  (id)\n"; // Bij mij is Id altijd de primary, dit kun je zelf veranderen (Let op! Dit is voor alle tabellen!)
 $sqlcode .= ") ENGINE=MyISAM DEFAULT CHARSET=latin1"; // he.t einde met de engine enz,

 // Waarden van deze tabel ophalen en in het bestand zetten


 $query = mysql_query("SELECT * FROM ".$tabel); // Waarden ophalen
 $rows = mysql_num_rows($query); // Waarden tellen
 $inc = $rows + 1; // Auto increment tellen

 $sqlcode .= " AUTO_INCREMENT=".$inc." ;\n\n\n"; // Auto increment instellen voor de tabel
 
 if($rows !== 0) { // Als er waarden aanwezig zijn in de tabel, voor elke waarde een lijn schrijven in het bestand
  $sqlcode .= "-- Gegevens voor tabel ".$tabel."\n\n"; // Kopje
  $field = mysql_num_fields($query); // Alle velden op een rij zetten
  for($i = 0;$i < $field;$i++) { // Met een for() alle rijen een mooi stukje tekst van maken voor de INSERT query
   $rijen .= ",".mysql_field_name($query,$i); // Voor elke rij een ',' en de de rij
  }
  $rijen = substr($rijen,1); // De eerste komma eraf halen
  while($loop = mysql_fetch_object($query)) { Voor elke waarde een rijtje maken
   $waarden = ""; // Waarden dumpen
   $sqlcode .= "INSERT INTO ".$tabel." ("; // INSERT query maken, in de actuele tabel
   $sqlcode .= $rijen.") VALUES ("; // Verder met INSERT query, alle rijen maken
   foreach($loop as $v) { // Met een foreach alle waarden voor die rij opvragen en in een mooie lijn zetten
    $waarden .= ",'".$v."'";
   }

   $waarden = substr($waarden,1); // Weer de eerste komma eraf halen, want die hoort niet op het begin :P
   $sqlcode .= $waarden."); \n\n"; // Alle waarden voor die rij in het bestand zetten
  }
 }

 $sqlcode .= "\n\n"; // Even een stukje leeg maken tussen deze en de volgende tabel
}
$sqlcode .= "\n\n\n\n-- ".$site_naam." ".$user_naam." Mysql-backup bestand --"; // Eindtekstje


$handle = fopen("backup/backup_".date('d-m-Y').".txt",'w'); // Het bestand openen; Het bestand gaat heten: Backup_'datum van vandaag'
$file = fwrite($handle,$sqlcode); Het hele bestand $sqlcode opslaan in het tekst bestand
fclose($handle);

if($show_at_end == 1) { // Als je de code wilt zien op het einde; instellen bovenaan
 $str = str_replace("\n","<br>",$sqlcode); // \n vervangen door <br>, zodat HTML het goed 'print'
 echo $str; // Het bestand op de pagina 'printen'
}

?>



PHPgast
Gewijzigd op 01/01/1970 01:00:00 door Youri van Weegberg
 
PHP hulp

PHP hulp

25/04/2024 17:49:51
 
TJVB tvb

TJVB tvb

21/07/2009 10:14:00
Quote Anchor link
Dit is nooit 100% veilig
Waarom niet gewoon mysql_dump gebruiken?

Verder mis ik hier in het geheel de relaties tussen de tabellen.
Waarom trouwens perse myisam? Die zou ik juist niet gebruiken (dan heb je geen relaties)
Gewijzigd op 01/01/1970 01:00:00 door TJVB tvb
 
Youri van Weegberg

Youri van Weegberg

21/07/2009 10:33:00
Quote Anchor link
Ik heb die bestandjes bij mij in een beveildigde map staan, .htaccess, MyISAM heb ik gebruikt omdat die gewoon standaard bij mij staat ingesteld, dus zo heb ik het overgenomen uit phpmyadmin. Ik heb zitten kijken naar mysql_dump, maar weet even niet wrm ik dat niet heb gedaan.
 
TJVB tvb

TJVB tvb

21/07/2009 11:08:00
Quote Anchor link
Ik gebruik zelf een .sh script met een cronjob
Dan gaat die mee in mijn volledige backup naar een externe locatie en kan ik het makkelijk terug zetten.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/sh

DIR=/root/cronscripts/mysqlbackups/
DATESTAMP=$(date +%Y%m%d)
DB_USER=backup_user
DB_PASS='wachtwoord'

# remove backups older than $DAYS_KEEP
DAYS_KEEP=14
find ${DIR}* -mtime +$DAYS_KEEP -exec rm -f {} \; 2> /dev/null

# create backups securely
umask 006

# list MySQL databases and dump each
DB_LIST=`mysql -u $DB_USER -p"$DB_PASS" -e'show databases;'`
DB_LIST=${DB_LIST##Database}
for DB in $DB_LIST;
do
  FILENAME=${DIR}${DB}-${DATESTAMP}.sql.gz
  mysqldump -u $DB_USER -p"$DB_PASS" --opt --flush-logs $DB | gzip > $FILENAME
done

Ik heb een zelfde soort script voor mijn postgresql database
 
Youri van Weegberg

Youri van Weegberg

21/07/2009 12:39:00
Quote Anchor link
Maar denk je dat ik het kan plaatsen als script?
 
TJVB tvb

TJVB tvb

21/07/2009 15:49:00
Quote Anchor link
Het php script in de scriptlib? Zou het niet doen, het kan goed gaan maar kan ook fout gaan en mensen gaan er dan op vertrouwen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.