Mysql backup
Door Eris -, 24 jaar geleden, 16.674x bekeken
Let op beperking er zit een beperking op van de maximale bestandsgroote in php/mailserver NIET in de script!
Dit script maakt een mysql backup van je database en mailt het naar je toe als een attachement.
Verander deze settings:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
#create a sql backup. Send this to your email
//define settings
//database host
DEFINE('dbhost','localhost');
//database name
DEFINE('dbnaam','mijndatabase');
//database user
DEFINE('dbuser','ik');
//database passwordt
DEFINE('dbpass','mijgeheimww');
//domeinnaam
DEFINE('domein','mijndomein.nl');
//doel
DEFINE('email','[email protected]');
?>
#create a sql backup. Send this to your email
//define settings
//database host
DEFINE('dbhost','localhost');
//database name
DEFINE('dbnaam','mijndatabase');
//database user
DEFINE('dbuser','ik');
//database passwordt
DEFINE('dbpass','mijgeheimww');
//domeinnaam
DEFINE('domein','mijndomein.nl');
//doel
DEFINE('email','[email protected]');
?>
Daarnaast dien je een cronjob in te stellen. Dit is per controlpannel verschillend dus leg het alleen voor Direct Admin uit! (Ik ben niet verantwoordelijk voor enige schade hierdoor!!
0 0 * * 1 /usr/local/bin/php /home/accountnaam/domains/mijndomein.nl/public_html/mysql_backup.php
Het is misschien slimmer om het in de map private_html te zetten :)
Gesponsorde koppelingen
PHP script bestanden
Er zijn 46 reacties op 'Mysql backup'
Gesponsorde koppelingen
en jij post dit nu pas, een week geleden heb ik er ook één gemaakt.
De opbouw van de keys werkt niet helemaal tegoei maar het werkt ongeveer, dit is het:
ps: ok dit word slecht uitgelijnd op deze site....
De opbouw van de keys werkt niet helemaal tegoei maar het werkt ongeveer, dit is het:
Code (php)
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<?php
######
#Functie om database te kopiëren
######
function DBdump(){
$this->DBclose();
$this->connectie = @mysql_connect($this->host, $this->user, $this->password);
if(!@mysql_ping($this->connectie) || empty($this->connectie)){
return "Er is geen verbinding met de database!";
}
$tabellen = mysql_list_tables($this->database, $this->connectie);
//wegens probleem met mysql_num_rows dat ik ondervond:
$aantal = 0;
while ($rij = mysql_fetch_row($tabellen)) {
$aantal++;
}
mysql_data_seek($tabellen, 0);
$out = "#Mysql-dump voor database: ".$this->database."
#Datum: ".date("d-m-Y H:i")."
#---------------------------------- ";
for($i = 0; $i<$aantal; $i++){
$tabelnaam = mysql_tablename($tabellen, $i);
$sql = "SHOW FIELDS FROM ".$tabelnaam;
$res = mysql_db_query($this->database, $sql, $this->connectie);
if(!$res && $this->error == 0){
die(@$this->DBfout($sql));
} elseif(!$res && $this->error != 0){
die($this->error);
}
$out .= "
######
# Structuur voor tabel ".$tabelnaam."
######
DROP TABLE IF EXISTS `".$tabelnaam."`;
CREATE TABLE ".$tabelnaam."(
";
// de velden
while($rij = mysql_fetch_array($res, MYSQL_ASSOC)){
$default = ($rij['Default'] != "") ? " DEFAULT '".$rij['Default']."'" : "";
$null = ($rij['Null'] != "YES") ? " NOT NULL" : "";
$extra = ($rij['Extra'] !="") ? " ".$rij['Extra'] : "";
$out .= " ".$rij['Field']." ".$rij['Type'].$default.$null.$extra.",\n";
}
$len = strlen($out)-2;
$out = substr($out,0,$len);
$sql = "SHOW KEYS FROM ".$tabelnaam;
$res = mysql_db_query($this->database, $sql, $this->connectie);
if(!$res && $this->error == 0){
die(@$this->DBfout($sql));
} elseif(!$res && $this->error != 0){
die($this->error);
}
$x = 0;
while($rij = mysql_fetch_array($res, MYSQL_ASSOC)){
if($rij['Non_unique'] == 1 && $rij['Key_name'] != "PRIMARY" && $rij['Index_type']!="FULLTEXT"){
$knaam = "UNIQUE";
} elseif($rij['Non_unique'] == 1 && $rij['Key_name'] != "PRIMARY" && $rij['Index_type']=="FULLTEXT"){
$knaam = "FULLTEXT";
} elseif($rij['Key_name'] == "PRIMARY"){
$knaam = "PRIMARY";
}else{
$knaam = "KEY";
}
$index[$x][0] = $rij['Column_name'];
$index[$x][1] = $knaam;
$x++;
}
foreach($index as $rij) {
list($rijnaam, $wat) = $rij;
if($wat == "PRIMARY") {
$out .= ",
PRIMARY KEY (".$rijnaam.")";
}elseif ($wat == "UNIQUE"){
$out .= ",
UNIQUE (".$rijnaam.")";
}elseif ($wat == "FULLTEXT"){
$out .= ",
FULLTEXT (".$rijnaam.")";
}else{
$out .= ", KEY (".$rijnaam.")";
}
}
$out .= "
)TYPE=MyISAM; \n
######
# Gegevens voor tabel ".$tabelnaam."
######
";
$this->genomendb = @mysql_select_db($this->database, $this->connectie);
$inhoud = $this->DBexe("SELECT * FROM ".$tabelnaam);
//door een warning gebruik ik nu mysql_fetch_array inplaats den DBarray
while($rij =mysql_fetch_array($inhoud, MYSQL_ASSOC)){
$out .= "INSERT INTO ".$tabelnaam." SET ";
$veldnamen = $this->DBarray("SHOW FIELDS FROM ".$tabelnaam);
foreach($veldnamen as $veldnaam){
$out.=$veldnaam['Field']." = '".htmlspecialchars($rij[$veldnaam['Field']])."', ";
}
unset($veldnamen);
$len = strlen($out)-2;
$out = substr($out, 0, $len).";\n";
}
unset($index);
unset($inhoud);
$out .= "
#----------------------------------
";
}
return nl2br($out);
}
?>
######
#Functie om database te kopiëren
######
function DBdump(){
$this->DBclose();
$this->connectie = @mysql_connect($this->host, $this->user, $this->password);
if(!@mysql_ping($this->connectie) || empty($this->connectie)){
return "Er is geen verbinding met de database!";
}
$tabellen = mysql_list_tables($this->database, $this->connectie);
//wegens probleem met mysql_num_rows dat ik ondervond:
$aantal = 0;
while ($rij = mysql_fetch_row($tabellen)) {
$aantal++;
}
mysql_data_seek($tabellen, 0);
$out = "#Mysql-dump voor database: ".$this->database."
#Datum: ".date("d-m-Y H:i")."
#---------------------------------- ";
for($i = 0; $i<$aantal; $i++){
$tabelnaam = mysql_tablename($tabellen, $i);
$sql = "SHOW FIELDS FROM ".$tabelnaam;
$res = mysql_db_query($this->database, $sql, $this->connectie);
if(!$res && $this->error == 0){
die(@$this->DBfout($sql));
} elseif(!$res && $this->error != 0){
die($this->error);
}
$out .= "
######
# Structuur voor tabel ".$tabelnaam."
######
DROP TABLE IF EXISTS `".$tabelnaam."`;
CREATE TABLE ".$tabelnaam."(
";
// de velden
while($rij = mysql_fetch_array($res, MYSQL_ASSOC)){
$default = ($rij['Default'] != "") ? " DEFAULT '".$rij['Default']."'" : "";
$null = ($rij['Null'] != "YES") ? " NOT NULL" : "";
$extra = ($rij['Extra'] !="") ? " ".$rij['Extra'] : "";
$out .= " ".$rij['Field']." ".$rij['Type'].$default.$null.$extra.",\n";
}
$len = strlen($out)-2;
$out = substr($out,0,$len);
$sql = "SHOW KEYS FROM ".$tabelnaam;
$res = mysql_db_query($this->database, $sql, $this->connectie);
if(!$res && $this->error == 0){
die(@$this->DBfout($sql));
} elseif(!$res && $this->error != 0){
die($this->error);
}
$x = 0;
while($rij = mysql_fetch_array($res, MYSQL_ASSOC)){
if($rij['Non_unique'] == 1 && $rij['Key_name'] != "PRIMARY" && $rij['Index_type']!="FULLTEXT"){
$knaam = "UNIQUE";
} elseif($rij['Non_unique'] == 1 && $rij['Key_name'] != "PRIMARY" && $rij['Index_type']=="FULLTEXT"){
$knaam = "FULLTEXT";
} elseif($rij['Key_name'] == "PRIMARY"){
$knaam = "PRIMARY";
}else{
$knaam = "KEY";
}
$index[$x][0] = $rij['Column_name'];
$index[$x][1] = $knaam;
$x++;
}
foreach($index as $rij) {
list($rijnaam, $wat) = $rij;
if($wat == "PRIMARY") {
$out .= ",
PRIMARY KEY (".$rijnaam.")";
}elseif ($wat == "UNIQUE"){
$out .= ",
UNIQUE (".$rijnaam.")";
}elseif ($wat == "FULLTEXT"){
$out .= ",
FULLTEXT (".$rijnaam.")";
}else{
$out .= ", KEY (".$rijnaam.")";
}
}
$out .= "
)TYPE=MyISAM; \n
######
# Gegevens voor tabel ".$tabelnaam."
######
";
$this->genomendb = @mysql_select_db($this->database, $this->connectie);
$inhoud = $this->DBexe("SELECT * FROM ".$tabelnaam);
//door een warning gebruik ik nu mysql_fetch_array inplaats den DBarray
while($rij =mysql_fetch_array($inhoud, MYSQL_ASSOC)){
$out .= "INSERT INTO ".$tabelnaam." SET ";
$veldnamen = $this->DBarray("SHOW FIELDS FROM ".$tabelnaam);
foreach($veldnamen as $veldnaam){
$out.=$veldnaam['Field']." = '".htmlspecialchars($rij[$veldnaam['Field']])."', ";
}
unset($veldnamen);
$len = strlen($out)-2;
$out = substr($out, 0, $len).";\n";
}
unset($index);
unset($inhoud);
$out .= "
#----------------------------------
";
}
return nl2br($out);
}
?>
ps: ok dit word slecht uitgelijnd op deze site....
Prima script. Ik moest meerdere databases backuppen en heb het script daarom iets aangepast:
Code (php)
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?
$dbhost = array("localhost","localhost");
$dbnaam = array("dbnaam1","dbnaam2");
$dbuser = array("dbuser1","dbuser2");
$dbpass = array("dbpass1","dbpass2");
$domein = array("domein1","domein2");
$email = array("email1","email2");
for ($a = 0; $a < sizeof($dbhost); $a++)
{
#create a sql backup and send it to your e-mail address
//define settings
//database host
DEFINE('dbhost',$dbhost[$a]);
//database name
DEFINE('dbnaam',$dbnaam[$a]);
//database user
DEFINE('dbuser',$dbuser[$a]);
//database passwordt
DEFINE('dbpass',$dbpass[$a]);
//domeinnaam
DEFINE('domein',$domein[$a]);
//doel
DEFINE('email',$email[$a]);
//connect with database
$link = mysql_connect(dbhost,dbuser,dbpass) or die('No datbase conection could be establised');
mysql_select_db(dbnaam,$link) or die('No datbase selected');
//query to recive table names
$query = mysql_query('SHOW TABLE STATUS') or die(mysql_error());
$sql_backup = '';
//whileloop to loop trough every table
while($row = mysql_fetch_assoc($query))
{
//show sql query to rebuild the query
$sql = 'SHOW CREATE TABLE '.$row['Name'].'';
//exucte error or give a error
$query2 = mysql_query($sql) or die(mysql_error());
//create sql
$sql_backup.="\r\n#Create table ".$row['Name']."\r\n\r\n";
$out = mysql_fetch_assoc($query2);
$sql_backup.=$out['Create Table'].";\r\n\r\n";
$sql_backup.="#Dump data\r\n\r\n";
//SQL code to select everything for table
$sql = 'SELECT * FROM '.$row['Name'];
$out = mysql_query($sql);
$sql_code = '';
//loop trough the colloms
while($code = mysql_fetch_array($out,MYSQL_ASSOC))
{
$sql_code .= "INSERT INTO ".$row['Name']." SET ";
foreach($code as $insert => $value)
{
$sql_code.=$insert ."='".addslashes($value)."',";
}
$sql_code = substr($sql_code, 0, -1);
$sql_code.= ";\r\n";
}
$sql_backup.= $sql_code;
}
//generade a unique id
$unique = md5(uniqid(time()));
//message
$message = "Backup procedure van database: ".dbnaam." is met succes verlopen. U vind in de bijlage een backup van de inhoud gemaakt op. ".date('d-m-Y H:i:s')."\r\n Autobot";
//maak headers aan
//form header
$headers = "From: Autobot <noreply@".domein.">\r\n";
//terug sturen naar een niet bestaand mail adress ([email protected])
$headers .= "Reply-To: Autobot <noreply@".domein.">\r\n";
//vertel dat het een mine versie is
$headers .= "MIME-Version: 1.0\r\n";
//email bestaat uit meerdere bestanden dus vertel wat de scheidings teken is en dat het een multipart is
$headers .= "Content-Type: multipart/mixed; boundary=\"".$unique."\"\r\n";
//we zenden een attachment mee
$headers .= "Content-Disposition: attachment\r\n";
//generenen een body. Dit is een multi part gezeik
$body.= "This is a multi-part message in MIME format.\r\n";
$body.= "\r\n";
//boundary
$body.= "--".$unique."\r\n";
//content type + charater set (iso in dit geval)
$body.= "Content-Type: text/plain; charset=iso-8859-1\r\n";
//codering (7 bit)
$body.= "Content-Transfer-Encoding: 7bit\r\n";
$body.= "\r\n";
//het bericht
$body.= $message ."\r\n";
//boundaty
$body.= "--".$unique."\r\n";
//content type + naam bestand (database.sql)
$body .= "Content-Type: application/octet-stream; name=database.sql\r\n";
//codering
$body .= "Content-Transfer-Encoding: base64\r\n";
//als bijlage toegevoegd
$body.= "Content-disposition: attachment\r\n";
$body .= "\n";
//de inhoud van het bestand
$body .= chunk_split(base64_encode($sql_backup)) . "\r\n";
//zet alles op email!
//hier kan wat tijdsverschil in zitten!
mail(email,'Mysql backup '.date('d-m-Y H:i:s'),$body,$headers);
echo "Backup van " . $dbnaam[$a] . " is verstuurd naar " . $email[$a] . "<br/>";
flush();
}
?>
$dbhost = array("localhost","localhost");
$dbnaam = array("dbnaam1","dbnaam2");
$dbuser = array("dbuser1","dbuser2");
$dbpass = array("dbpass1","dbpass2");
$domein = array("domein1","domein2");
$email = array("email1","email2");
for ($a = 0; $a < sizeof($dbhost); $a++)
{
#create a sql backup and send it to your e-mail address
//define settings
//database host
DEFINE('dbhost',$dbhost[$a]);
//database name
DEFINE('dbnaam',$dbnaam[$a]);
//database user
DEFINE('dbuser',$dbuser[$a]);
//database passwordt
DEFINE('dbpass',$dbpass[$a]);
//domeinnaam
DEFINE('domein',$domein[$a]);
//doel
DEFINE('email',$email[$a]);
//connect with database
$link = mysql_connect(dbhost,dbuser,dbpass) or die('No datbase conection could be establised');
mysql_select_db(dbnaam,$link) or die('No datbase selected');
//query to recive table names
$query = mysql_query('SHOW TABLE STATUS') or die(mysql_error());
$sql_backup = '';
//whileloop to loop trough every table
while($row = mysql_fetch_assoc($query))
{
//show sql query to rebuild the query
$sql = 'SHOW CREATE TABLE '.$row['Name'].'';
//exucte error or give a error
$query2 = mysql_query($sql) or die(mysql_error());
//create sql
$sql_backup.="\r\n#Create table ".$row['Name']."\r\n\r\n";
$out = mysql_fetch_assoc($query2);
$sql_backup.=$out['Create Table'].";\r\n\r\n";
$sql_backup.="#Dump data\r\n\r\n";
//SQL code to select everything for table
$sql = 'SELECT * FROM '.$row['Name'];
$out = mysql_query($sql);
$sql_code = '';
//loop trough the colloms
while($code = mysql_fetch_array($out,MYSQL_ASSOC))
{
$sql_code .= "INSERT INTO ".$row['Name']." SET ";
foreach($code as $insert => $value)
{
$sql_code.=$insert ."='".addslashes($value)."',";
}
$sql_code = substr($sql_code, 0, -1);
$sql_code.= ";\r\n";
}
$sql_backup.= $sql_code;
}
//generade a unique id
$unique = md5(uniqid(time()));
//message
$message = "Backup procedure van database: ".dbnaam." is met succes verlopen. U vind in de bijlage een backup van de inhoud gemaakt op. ".date('d-m-Y H:i:s')."\r\n Autobot";
//maak headers aan
//form header
$headers = "From: Autobot <noreply@".domein.">\r\n";
//terug sturen naar een niet bestaand mail adress ([email protected])
$headers .= "Reply-To: Autobot <noreply@".domein.">\r\n";
//vertel dat het een mine versie is
$headers .= "MIME-Version: 1.0\r\n";
//email bestaat uit meerdere bestanden dus vertel wat de scheidings teken is en dat het een multipart is
$headers .= "Content-Type: multipart/mixed; boundary=\"".$unique."\"\r\n";
//we zenden een attachment mee
$headers .= "Content-Disposition: attachment\r\n";
//generenen een body. Dit is een multi part gezeik
$body.= "This is a multi-part message in MIME format.\r\n";
$body.= "\r\n";
//boundary
$body.= "--".$unique."\r\n";
//content type + charater set (iso in dit geval)
$body.= "Content-Type: text/plain; charset=iso-8859-1\r\n";
//codering (7 bit)
$body.= "Content-Transfer-Encoding: 7bit\r\n";
$body.= "\r\n";
//het bericht
$body.= $message ."\r\n";
//boundaty
$body.= "--".$unique."\r\n";
//content type + naam bestand (database.sql)
$body .= "Content-Type: application/octet-stream; name=database.sql\r\n";
//codering
$body .= "Content-Transfer-Encoding: base64\r\n";
//als bijlage toegevoegd
$body.= "Content-disposition: attachment\r\n";
$body .= "\n";
//de inhoud van het bestand
$body .= chunk_split(base64_encode($sql_backup)) . "\r\n";
//zet alles op email!
//hier kan wat tijdsverschil in zitten!
mail(email,'Mysql backup '.date('d-m-Y H:i:s'),$body,$headers);
echo "Backup van " . $dbnaam[$a] . " is verstuurd naar " . $email[$a] . "<br/>";
flush();
}
?>
Ik heb dit:
Het werkt goed :D
Maar ik wil nu nog extra gegevens en weet niet hoe ik het moet doen:
$veld = "veldnaam"; //Naam dat je aan het veld op gegeven
$type = "type"; //Type: varchar, int, text, date,...
$waarde = "waarde"; //Een getal dat toewijst hoeveel karakters in het veld mogen
$attributen = "attribute"; //Binary, unsigned, unsigned zerofill
$null = "null"; //NULL, NOT NULL
$standaardwaarde = "waarde"; //Wat er standaard moet ingevuld worden in het veld
$extra = "extra"; //auto_increment
$key = "key"; //Primaire, index, uniek, ---, volledige tekst
Kan iemand mij hierbij helpen?
Code (php)
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
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
<?php
//database informatie
$dbhost = "localhost";
$dblogin = "jouwlogin";
$dbw8wrd = "jouww8wrd";
$dbnaam = "databasenaam";
//Maak verbinding
mysql_pconnect("$dbhost","$dblogin","$dbw8wrd") && @mysql_select_db("$dbnaam");
$query = mysql_query('SHOW TABLE STATUS') or die(mysql_error());
while($row = mysql_fetch_assoc($query)){
$sql = 'SHOW CREATE TABLE '.$row['Name'].'';
$query2 = mysql_query($sql) or die(mysql_error());
//Toon tabelnaam
echo "<b>Tabelnaam: {$row['Name']} bevat volgende gegevens:</b><br>";
$out = mysql_fetch_assoc($query2);
$sql = 'SELECT * FROM '.$row['Name'];
$out = mysql_query($sql);
$sql_code = '';
while($code = mysql_fetch_array($out,MYSQL_ASSOC))
{
foreach($code as $insert => $value)
{
$sql_code.=$insert ."='".addslashes($value)."',";
//Toon gegevens van de tabel
echo $insert.": ".addslashes($value)."<br>";
}
}
}
?>
//database informatie
$dbhost = "localhost";
$dblogin = "jouwlogin";
$dbw8wrd = "jouww8wrd";
$dbnaam = "databasenaam";
//Maak verbinding
mysql_pconnect("$dbhost","$dblogin","$dbw8wrd") && @mysql_select_db("$dbnaam");
$query = mysql_query('SHOW TABLE STATUS') or die(mysql_error());
while($row = mysql_fetch_assoc($query)){
$sql = 'SHOW CREATE TABLE '.$row['Name'].'';
$query2 = mysql_query($sql) or die(mysql_error());
//Toon tabelnaam
echo "<b>Tabelnaam: {$row['Name']} bevat volgende gegevens:</b><br>";
$out = mysql_fetch_assoc($query2);
$sql = 'SELECT * FROM '.$row['Name'];
$out = mysql_query($sql);
$sql_code = '';
while($code = mysql_fetch_array($out,MYSQL_ASSOC))
{
foreach($code as $insert => $value)
{
$sql_code.=$insert ."='".addslashes($value)."',";
//Toon gegevens van de tabel
echo $insert.": ".addslashes($value)."<br>";
}
}
}
?>
Het werkt goed :D
Maar ik wil nu nog extra gegevens en weet niet hoe ik het moet doen:
$veld = "veldnaam"; //Naam dat je aan het veld op gegeven
$type = "type"; //Type: varchar, int, text, date,...
$waarde = "waarde"; //Een getal dat toewijst hoeveel karakters in het veld mogen
$attributen = "attribute"; //Binary, unsigned, unsigned zerofill
$null = "null"; //NULL, NOT NULL
$standaardwaarde = "waarde"; //Wat er standaard moet ingevuld worden in het veld
$extra = "extra"; //auto_increment
$key = "key"; //Primaire, index, uniek, ---, volledige tekst
Kan iemand mij hierbij helpen?
Hoi allen,
Ik gebruik dit script om mijn sqldatabase te back-uppen, en dat werkt prima.
Ik loop echter steeds tegen foutmeldingen aan bij het uitvoeren van de sql-script: de oorzaak is dat mijn sql-database velden bevat die toevallig dezelfde naam hebben als sql gereserveerde woorden (bijv OPTION)
Bij het terugzetten van de back-up struikeld het sql script natuurlijk over deze velden, dat kan ik dus oplossen door die velden tussen ` ` te zetten, maar het zijn zoveel velden... dus ik dacht; zou dat niet in het script aangepast kunnen worden? Even een voorbeeld:
INSERT INTO jos_components SET id='1',name='Banners',link='',menuid='0',parent='0',admin_menu_link='',admin_menu_alt='Banner Management',option='com_banners',ordering='0',admin_menu_img='js/ThemeOffice/component.png',iscore='0',params='';
Wat ik dus wil is:
INSERT INTO jos_components SET `id`='1',`name`='Banners',`link`='',`menuid`='0' etc...
Iemand een idee of en hoe ik de velden tussen `` kan krijgen in het script?
Groet,
Ronald
Ik gebruik dit script om mijn sqldatabase te back-uppen, en dat werkt prima.
Ik loop echter steeds tegen foutmeldingen aan bij het uitvoeren van de sql-script: de oorzaak is dat mijn sql-database velden bevat die toevallig dezelfde naam hebben als sql gereserveerde woorden (bijv OPTION)
Bij het terugzetten van de back-up struikeld het sql script natuurlijk over deze velden, dat kan ik dus oplossen door die velden tussen ` ` te zetten, maar het zijn zoveel velden... dus ik dacht; zou dat niet in het script aangepast kunnen worden? Even een voorbeeld:
INSERT INTO jos_components SET id='1',name='Banners',link='',menuid='0',parent='0',admin_menu_link='',admin_menu_alt='Banner Management',option='com_banners',ordering='0',admin_menu_img='js/ThemeOffice/component.png',iscore='0',params='';
Wat ik dus wil is:
INSERT INTO jos_components SET `id`='1',`name`='Banners',`link`='',`menuid`='0' etc...
Iemand een idee of en hoe ik de velden tussen `` kan krijgen in het script?
Groet,
Ronald
Voor mensen die niks snappen van cronjobs, of er te weinig tijd voor hebben:
http://www.webcron.org/
http://www.webcron.org/
Ik heb het script gebruikt voor mijn website paarden www.koopeenpaard.nl. Ik zag dat er een website was gegeven voor een cronjob.
Dit is een tip voor jullie op het gebied van cronjobs: http://www.adminschoice.com/docs/crontab.htm
Het script werkt super!
Dit is een tip voor jullie op het gebied van cronjobs: http://www.adminschoice.com/docs/crontab.htm
Het script werkt super!
Prima script, ik gebruik het al een paar jaar.
Alleen om eenvoudiger iet terug te zetten
$sql_code .= 'INSERT INTO `'.$row['Name'].'` SET ';
in plaats van
$sql_code .= 'INSERT INTO '.$row['Name'].' SET ';
of te wel backtics om de veldnaam, toevallig een veldnaam die ook iets betekend in MySql is hierdoor geen probleem meer.
In plaats van een cronjob kan je natuurlijk gewoon de eerste bezoeker op een dag dit script kunnen laten starten :-)
$query='SELECT `backup` FROM `diversen` WHERE `backup` ORDER BY `backup` DESC LIMIT 0,1';
$result=mysql_query($query) OR die
$record=mysql_fetch_array($result);
$vorige=$record[backup];
if (date('d') !== date('d',$vorige)){
$query='INSERT INTO `diversen` SET `backup`= UNIX_TIMESTAMP()';
$result=mysql_query($query) OR die
/*************** hier de sql backup, */
}enz
Alleen om eenvoudiger iet terug te zetten
$sql_code .= 'INSERT INTO `'.$row['Name'].'` SET ';
in plaats van
$sql_code .= 'INSERT INTO '.$row['Name'].' SET ';
of te wel backtics om de veldnaam, toevallig een veldnaam die ook iets betekend in MySql is hierdoor geen probleem meer.
In plaats van een cronjob kan je natuurlijk gewoon de eerste bezoeker op een dag dit script kunnen laten starten :-)
$query='SELECT `backup` FROM `diversen` WHERE `backup` ORDER BY `backup` DESC LIMIT 0,1';
$result=mysql_query($query) OR die
$record=mysql_fetch_array($result);
$vorige=$record[backup];
if (date('d') !== date('d',$vorige)){
$query='INSERT INTO `diversen` SET `backup`= UNIX_TIMESTAMP()';
$result=mysql_query($query) OR die
/*************** hier de sql backup, */
}enz
Een gewoon script kan nooit alles tegelijkertijd lezen. Dan kan er iets anders 'tussendoor' komen waardoor je data niet klopt.
Stel je hebt een relate tussen de tabel wielen en de tabel fiets.
Jij maakt een backup en daarbij wordt tabel fiets en daarna de tabel wielen. Terwijl jij dat aan het inlezen bent wordt een nieuwe fiets aangemaakt met wielen. Dan kan het zijn dat jou script wel de nieuwe wielen leest en niet je fiets. Dan heb jij bij het terugzetten van je database dus een probleem omdat je dan wielen zonder fiets hebt.
Dit wordt nog veel lastiger als je getallen aan het veranderen bent (stel je voor je haalt 10 euro van iemands rekening en zet het bij iemand anders op. Als daar tussendoor de backup draait kan die 10 euro in rook zijn opgegaan of juist dubbel in het systeem zitten)
Om backups te maken heb je database programma's zoals mysql_dump voor mysql.
Stel je hebt een relate tussen de tabel wielen en de tabel fiets.
Jij maakt een backup en daarbij wordt tabel fiets en daarna de tabel wielen. Terwijl jij dat aan het inlezen bent wordt een nieuwe fiets aangemaakt met wielen. Dan kan het zijn dat jou script wel de nieuwe wielen leest en niet je fiets. Dan heb jij bij het terugzetten van je database dus een probleem omdat je dan wielen zonder fiets hebt.
Dit wordt nog veel lastiger als je getallen aan het veranderen bent (stel je voor je haalt 10 euro van iemands rekening en zet het bij iemand anders op. Als daar tussendoor de backup draait kan die 10 euro in rook zijn opgegaan of juist dubbel in het systeem zitten)
Om backups te maken heb je database programma's zoals mysql_dump voor mysql.
Ik gebruik tegenwoordig views in mijn database. Dit zorgt er echter voor dat het script niet meer wordt uitgevoerd. Ik krijg de volgende foutmelding:
SHOW VIEW command denied to user '*******'@'localhost' for table 'balans'
Op de plaats van de gebruiker heb ik zelf een * gezet.
Hoe zorg ik ervoor dat het script weer gaat werken ?
SHOW VIEW command denied to user '*******'@'localhost' for table 'balans'
Op de plaats van de gebruiker heb ik zelf een * gezet.
Hoe zorg ik ervoor dat het script weer gaat werken ?
Ik gebruik dit script om diverse databases te backuppen.
Het vreemde is dat de één wel een attachment verstuurd maar de ander niet. Die heeft alles in de body van de mail staan.
De php files zijn exact gelijk behalve dan de gegevens natuurlijk om de database aan te spreken.
De databases staan op dezelfde server, ze zijn alleen anders in grootte.
Wat doe ik verkeerd?
Het vreemde is dat de één wel een attachment verstuurd maar de ander niet. Die heeft alles in de body van de mail staan.
De php files zijn exact gelijk behalve dan de gegevens natuurlijk om de database aan te spreken.
De databases staan op dezelfde server, ze zijn alleen anders in grootte.
Wat doe ik verkeerd?
PHP is toch backward compatible? Bij mij draait het, alleen wel bij alle tabel en veldnamen backtics ingevoegd, dat doe ik altijd consequent dus in dit script ook. Bij de vraagsteller doet ie het ook bij de ene setup. Kan je misschien ook aangeven WAAROM het niet meer veilig zou kunnen draaien. Dat je database mogelijk gewijzigd is tijdens het uitvoeren van het script is waar maar dat is een in te schatten risico (bij mij is het risico klein en de gevolgen minimaal bijvoorbeeld).
Als inderdaad, heel zeker weten, alleen de grote van de database verschilt is het mogelijk de maximum tijd dat een script mag draaien of een maximum grote van je mail die in de weg zit. Bestudeer je mail eens of het op zo iets mis gaat zou ik zeggen.
Als inderdaad, heel zeker weten, alleen de grote van de database verschilt is het mogelijk de maximum tijd dat een script mag draaien of een maximum grote van je mail die in de weg zit. Bestudeer je mail eens of het op zo iets mis gaat zou ik zeggen.
Bjorri geen:
alleen wel bij alle tabel en veldnamen backtics ingevoegd, dat doe ik altijd consequent dus in dit script ook.
NOOIT backtricks in SQL gebruiken. Backtricks zijn slecht, gebruik gewoon geen gereserveerde tabel/veld namen.
Bjorri geen:
Kan je misschien ook aangeven WAAROM het niet meer veilig zou kunnen draaien.
Oké:
- geen goede foutafhandeling
- SQL injection
- Mail injection
- Geen juiste mail headers
- Gebruik van verkeerde functie addslashes
- Gebruik van * in SQL.
- Verkeerde INSERT query (niet de veldnamen benoemd)
- SQL niet met hoofdletters
Dat ik een aantal jaar terug begon met MySQL werd ik er juist op geattendeerd om altijd bacticks te gebruiken, mocht er in de toekomst een extra functie komen met een naam gelijk aan een bestaand veld dan heb je een veel groter probleem. Het enige nadeel van backtics wat ik kan vinden is dat daarmee een script niet compatible is met M$SQL, so what?
Die addslashes zal ik inderdaad vervangen voor mysql_real_escape_string. Foutafhandeling en injection maak ik me niet zo druk om, het script heeft geen enkele interactie met gebruikers.
Mail komt dagelijks prima aan, ik ga waarschijnlijk niet snappen wat er fout aan is.
De * komt nog altijd in elke tutorial voor, waarom mag dat niet meer gebruikt worden?
Die INSERT kan ik op het eerste gezicht geen fout in ontdekken maar daar zal ik eens induiken.
Hoofdlettergebruik is afaik een best practice, geen technische voorwaarde.
Blijft staan dat het script als vier jaar dagelijks draait op mn website en nog nooit een fout heeft opgeleverd. Maar het is inderdaad een niet ongelooflijk druk bezochte site waarbij een storing wat ongemak zou opleveren maar geen onoverkomelijke problemen.
Die addslashes zal ik inderdaad vervangen voor mysql_real_escape_string. Foutafhandeling en injection maak ik me niet zo druk om, het script heeft geen enkele interactie met gebruikers.
Mail komt dagelijks prima aan, ik ga waarschijnlijk niet snappen wat er fout aan is.
De * komt nog altijd in elke tutorial voor, waarom mag dat niet meer gebruikt worden?
Die INSERT kan ik op het eerste gezicht geen fout in ontdekken maar daar zal ik eens induiken.
Hoofdlettergebruik is afaik een best practice, geen technische voorwaarde.
Blijft staan dat het script als vier jaar dagelijks draait op mn website en nog nooit een fout heeft opgeleverd. Maar het is inderdaad een niet ongelooflijk druk bezochte site waarbij een storing wat ongemak zou opleveren maar geen onoverkomelijke problemen.
Er zijn wel wat meer mogelijkheden hoor:
http://dev.mysql.com/doc/refman/5.5/en/insert.html
http://dev.mysql.com/doc/refman/5.5/en/insert.html
Heeft niks met php te maken maar ik gebruik Site vault
http://www.site-vault.com/
Hiermee maak ik een backup van de mysql van alle klanten 1x per dag ongeacht de grote.
Kost wel wat maar oh hier ben ik blij mee :-)
http://www.site-vault.com/
Hiermee maak ik een backup van de mysql van alle klanten 1x per dag ongeacht de grote.
Kost wel wat maar oh hier ben ik blij mee :-)
Sinds kort maak ik gebruik van http://www.phpmybackuppro.net. Werkt perfect en is gratis!
Om te reageren heb je een account nodig en je moet ingelogd zijn.
Inhoudsopgave
Labels
- Geen tags toegevoegd.
PHP hulp
0 seconden vanaf nu