Avatar billede jammerlab Nybegynder
13. februar 2007 - 18:19 Der er 16 kommentarer og
1 løsning

Backup af bestemte MYSQL tabeller

Hej derude... har kigget eksperten igennem men kan ikke finde nogle hvor man kan tage backup af bestemte tabeller. Jeg har 4 tabeller blandet sammen med en masse andre, og det er kun disse jeg vil havde backup af... hvordan gør jeg dette? (del af et større system så PHPMyAdmin osv er udelukket)

- På forhånd tak
Avatar billede erikjacobsen Ekspert
13. februar 2007 - 18:24 #1
$ mysqldump
Usage: mysqldump [OPTIONS] database [tables]
OR    mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR    mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help

Du angiver blot de tabeller, du vil have et dump af. Det er i hvert fald een mulighed
Avatar billede jammerlab Nybegynder
13. februar 2007 - 22:34 #2
Pokker der for jeg ikke så meget ud af :/
Avatar billede gentlebug Nybegynder
13. februar 2007 - 22:58 #3
erik - problemet med mysqldump (har siddet med samme problem) er at hvis man ikke har write access i sin mysql, så bliver den ked af det.
Avatar billede jammerlab Nybegynder
14. februar 2007 - 21:03 #4
Som jeg sagde tidligere jeg for ikke så meget ud af det der er blevet sagt :) Jeg skal bruge noget mere kode for at forstå det... $mysqldump er ikke en php string (som jeg troede et kort øjeblik) ...
Avatar billede erikjacobsen Ekspert
14. februar 2007 - 21:11 #5
Nej, mysqldump er et program du kan bruge til at tage backup af databaser og tabeller. Mit eksempel viste brugen i Linux, derfor den '$'. Findes nok også til Windows. Kan hentes på mysql.com

Det kræver så at du har adgang til mysql-serveren, men nu siger du at det er for stort til phpmyadmin, så det har du jo nok.
Avatar billede jammerlab Nybegynder
15. februar 2007 - 14:46 #6
Havde nu håbet på lidt PHP kode :)
Avatar billede mcgoat Nybegynder
15. februar 2007 - 14:52 #7
Using PHP To Backup MySQL Database
http://www.php-mysql-tutorial.com/perform-mysql-backup-php.php

Nogen du kan bruge?
Avatar billede jammerlab Nybegynder
15. februar 2007 - 16:58 #8
Hvis det ellers havde virket så ville jeg være helt vild :)

mysql_connect("**","**","**") or die (mysql_error());
mysql_select_db("**") or die (mysql_error());


$tableName  = 'kalender';
$backupFile = 'kalender.sql';
$query      = "SELECT * INTO OUTFILE '$backupFile' FROM $tableName";
$result = mysql_query($query);

?>

men den gør intet...
Avatar billede erikjacobsen Ekspert
15. februar 2007 - 19:48 #9
Helt generelt, uden at kende til dit konkrete problem, eller det du prøver her, så er der kun to måder man kan håndtere store datamængder i en mysql-database

1) Direkte adgang til serveren, fx ssh på unix/linux, eller fjernskrivebord på Windows, og så kører man mysqldump eller lignende direkte på serveren
2) Evt. kan man nøjes med adgang til mysql-serveren udefra (åbnet for port 3306) - det vil være langsommere, men muligt.

Efter min mening er der ikke andre måder. Men jeg ved ikke hvad du har af webhosting eller lignende.
Avatar billede jammerlab Nybegynder
15. februar 2007 - 22:47 #10
Hm... jeg tænker bare på for eksempel PHPMyAdmin har en backup funktion... jeg vil bare gerne havde det samme men hvor man bare trykker på "klik her" og så for man 4 bestemte tabeller (med data) i en *.sql fil som man kan downloade... (safe as til sin com)
Avatar billede erikjacobsen Ekspert
15. februar 2007 - 23:09 #11
Ok, så det er ikke størrelsen som sådan, der er et problem? Du ville kunne bruge phpmyadmin, men "gider" ikke vælge de 4 relevante tabeller?
Avatar billede jammerlab Nybegynder
17. februar 2007 - 13:39 #12
Det er et system hvor brugeren bare skal kunne klikke på et link der hedder "backup" og så tar den backup af systemets tabeller som er ca. 4 (med data) ... den skal ignorere alle andre tabeller som brugeren måtte havde i sin mysql... og navnene på de 4 tabeller er faste så de ændres ikke...
Avatar billede erikjacobsen Ekspert
17. februar 2007 - 14:44 #13
Så er der jo gode ting at hente i linket som mcgoat gav.
Men vær alligevel opmærksom på, at når det skal afvikles i PHP på serveren, så er der altid en timeout, og dermed en øvre grænse for hvor store ting du kan lave backup på.
Avatar billede jammerlab Nybegynder
18. februar 2007 - 14:06 #14
Okay jeg er kommet frem til noget... nedstående kode henter data'en fra de tabeller jeg ønsker... men jeg vil gerne lave et dump af tabellens opbygning... altså en CREATE table med felterne og det hele... Tror i at i kan hjælpe med det? Ligsom det her:

DROP TABLE IF EXISTS `kalender`;
CREATE TABLE `kalender` (
  `id` int(11) NOT NULL auto_increment,
  `month` varchar(250) default NULL,
  `year` int(11) default NULL,
  `date` varchar(250) default NULL,
  `tilk` varchar(255) NOT NULL default '',
  `aftale_id` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=105 ;

Koden jeg har på nuværende tidspunk:

<?php
require 'mysql.php';
set_time_limit(300);


function datadump ($table) {

    $result .= "# Dump af $table \n";
    $result .= "# Dump DATO : " . date("d-M-Y H:i:s") ."\n\n";

    $query = mysql_query("select * from $table");
    $num_fields = @mysql_num_fields($query);
    $numrow = mysql_num_rows($query);
        $result .= "DROP TABLE IF EXISTS $table;\n";   
    for ($i =0; $i<$numrow; $i++) {
    $row = mysql_fetch_row($query);
      $result .= "INSERT INTO ".$table." VALUES(";
    for($j=0; $j<$num_fields; $j++) {
    $row[$j] = addslashes($row[$j]);
    $row[$j] = ereg_replace("\n","\\n",$row[$j]);
    if (isset($row[$j])) $result .= "\"$row[$j]\"" ; else $result .= "\"\"";
    if ($j<($num_fields-1)) $result .= ",";
  } 
      $result .= ");\n";
    }

    return $result . "\n\n\n";
}
$kalender = datadump ("kalender");
$kalender_aftale = datadump ("kalender_aftale");
$kalender_forbrugssatser = datadump ("kalender_forbrugssatser");
$kalender_kontrakt = datadump ("kalender_kontrakt");
$kalender_set = datadump ("kalender_set");
$kalender_user = datadump ("kalender_user");
$koersel_tabel = datadump ("koersel_tabel");

$content = $kalender . $kalender_aftale . $kalender_forbrugssatser . $kalender_kontrakt . $kalender_set . $kalender_user . $koersel_tabel;
$date = date("d-M-Y H:i:s");
$file_name = "Kalender_system_backup.sql";
Header("Content-type: application/octet-stream");
Header("Content-Disposition: attachment; filename=$file_name");
echo $content;
exit;
?>
Avatar billede jammerlab Nybegynder
03. marts 2007 - 11:11 #15
Har slev fået alt på plads nu... det virker fint... fik desværre ikke så meget ud af det i skrev, men i skal havde tak alligevel :) Smid et svar - tak.
Avatar billede erikjacobsen Ekspert
03. marts 2007 - 11:13 #16
Ingen point til mig, tak.
Avatar billede jammerlab Nybegynder
24. maj 2007 - 15:23 #17
Så lukker vi...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester