[Mysqldump] tabel overslaan

Pagina: 1
Acties:

  • dirkpostma
  • Registratie: Juni 2001
  • Laatst online: 15-02 08:23
Ik maak dagelijkse backups van een paar mysql databases. Nu is het zo dat dit best veel ruimte vraagt en dat komt doordat er 1 tabel is die nogal groot is, terwijl juist deze data niet gebackupped hoeft te worden. Nu ben ik dus op zoek naar een methode om alle tabellen van een database te backuppen, op die ene na. Nu heb ik http://dev.mysql.com/doc/refman/4.1/en/mysqldump.html doorgenomen, maar ik zie niet de mogelijkheid om iets te geven als "--skip-table tabel1" of iets dergelijks.

Ik kan mij doel wel bereiken door een script te schrijven die een string genereert van alle tabellen, behalve die ene, om vervolgens daarmee een mysqldump commando uit te voeren, maar ik vind het vreemd dat dit niet anders kan... Ik heb sterk het gevoel dat ik iets over het hoofd zie in de beschrijving van mysqldump.

Zie ik inderdaad iets over het hoofd, of moet ik echt zo omslachtig te werk gaan...?

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Dump is altijd supersimpel. Dump alles zonder uitzondering.

Dus inderdaad je zal iets ervoor moeten zetten

  • DDemolition
  • Registratie: Augustus 2003
  • Laatst online: 21-02 18:50

DDemolition

slopen is mijn lust en leven

Scripje in PHP?
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
//Connectie naar db maken
    $dbhost = "localhost";
    $dblogin = "login";
    $dbpass = "pass";
    $dbnaam = "db";
    mysql_connect ($dbhost , $dblogin , $dbpass , $dbnaam) or die (mysql_error());
    mysql_select_db($dbnaam) or die (mysql_error());


    $SQLCommand = NULL;
    $SQL = "SHOW TABLES FROM voetbalpool";
    $rs = mysql_query($SQL) or die ("fout: " . mysql_error());
    while (list($strTables)= mysql_fetch_row($rs))
        {
        $SQLcretbl = "SHOW CREATE TABLE $strTables";
        $rscretbl = mysql_query($SQLcretbl) or die ("fout: " . mysql_error());
        list($strTable, $strCreateTableCommand)= mysql_fetch_row($rscretbl);

        $SQLCommands[] = "DROP TABLE `$strTable` ";
        $SQLCommands[] = "$strCreateTableCommand";
        
        //echo "$strCreateTableCommand<p>";
        
        $SQLitems = "SELECT * FROM $strTable";
        $rsitems = mysql_query($SQLitems);
        while ($row = mysql_fetch_array($rsitems, MYSQL_NUM))
            {
            $Columns = NULL;
            $Value = NULL;
            $Column = NULL;
            $Values = NULL;

            $count = (count($row) - 1);
            //echo $row[0] . "<br>";
            //$field1 =  mysql_field_name($rsitems, 1);
            
            for ($i = 0; $i <= $count; $i++)
                {
                
                $Column =  mysql_escape_string(mysql_field_name($rsitems, $i));
                $Value = mysql_escape_string($row[$i]);
                $Columns .= "$Column, ";
                if ( (empty($Value)) and ($Value != '0') )
                    {
                    $Values .= "NULL, ";
                    }
                else
                    {
                    $Values .= "'$Value', ";
                    }
                
                $value = NULL;
                }
            $Values = substr($Values, 0, -2);
            $Columns = substr($Columns, 0, -2);
            $SQLCommands[] = "INSERT INTO $strTable ($Columns) VALUES ($Values); ";
            }
        }
        ?>
        
<?
    mysql_close();

    $dbhost = "localhost";
    $dblogin = "login";
    $dbpass = "pass";
    $dbnaam = "fallbackdb";
    mysql_connect ($dbhost , $dblogin , $dbpass , $dbnaam) or die (mysql_error());
    mysql_select_db($dbnaam) or die (mysql_error());
    
    $count = (count($SQLCommands) -1);

    $ecount = NULL;
    
    for ($i = 0; $i <= $count; $i++)
        {
        //echo $SQLCommands[$i] . "<br>";
        mysql_query($SQLCommands[$i]);// or die (mysql_error());

        $e = mysql_errno();
        if ($e > 0)
            {
            $ecount++;
            echo 'SQLFOUT:' . mysql_error() . "<p>";
            }
        echo '<p>';
        }
    
    if ($ecount < 1) { $ecount = '0';}
    
    echo "
        <div class=\"Content\">
        <b>'$i'</b> commando's uitgevoerd.<br>
        In totaal <b>'$ecount'</b> fouten geconstateerd.<p>
        Doel: <b>$dbhost</b> op database: <b>$dbnaam</b>
        </div>
        <p>
        <input class=Buttons name=cmdBack type=Button id=cmdBack onclick=\"location.href='Toernooi.php'\" VALUE=&nbsp;OK&nbsp;>
    ";
?>

Deze gooit de db naar een fallback locatie. Je zou er zelf dus voor kunnen zorgen dat de ene tabel wordt overgeslagen. Oja, reden dat de invoegen in een array zit: mysql accepteerd maar 1 commando, dus moet ze 1 voor 1 invoegen. Dus als iemand een betere manier weet _/-\o_

[ Voor 28% gewijzigd door DDemolition op 13-05-2006 11:19 ]

Specs: Server, WS boven, WS beneden


  • Koffie
  • Registratie: Augustus 2000
  • Laatst online: 21-02 07:44

Koffie

Koffiebierbrouwer

Braaimeneer

Move PNS > DTE

Tijd voor een nieuwe sig..


  • Thekk
  • Registratie: Augustus 2002
  • Laatst online: 18-02 00:23
Volgens mij kan dat wel gewoon met mysqldump, dus ik denk dat je inderdaad iets over het hoofd ziet.
--ignore-table=db_name.tbl_name

Do not dump the given table, which must be specified using both the database and table names. To ignore multiple tables, use this option multiple times. This option was added in MySQL 4.1.9.

[ Voor 10% gewijzigd door Thekk op 15-05-2006 09:03 ]

Ik heb geen zin om een sig te maken.