Avatar billede nemlig Professor
24. marts 2025 - 12:52 Der er 2 kommentarer og
1 løsning

Dump af Mysql-DB, men ikke alle tabeller

Hejsa.
Jeg har hidtil benyttet et php-script til at tage backup af SQL-database, men opdager, at der er nogle formateringer i backup-filen, som phpMyAdmin ikke er glad for.
Jeg har så leget med nedenstående simple script, som fungerer perfekt.
Det dumper hele databasen og gemmer som ZIP-fil.

Men jeg har 2 tabeller, som jeg ikke ønsker medtaget i backup'en.
Kan nogen se en løsning til, hvordan det kan klares. Det ser ud til, at der anvendes en SQL-kommando til at dumpe databasen, så jeg vil tro, at der skal en helt anden kode til, hvor tabelnavnene indlæses i et array, og derefter fjernes de ekskluderede. Det er sådan et script, jeg har benyttet hidtil.
function exportDatabase($host, $username, $password, $database, $outputPath) {
    // Validate the input
    if (empty($host) || empty($username) || empty($password) || empty($database) || empty($outputPath)) {
        return false;
    }
   
    // Connect to the MySQL server
    $conn = mysqli_connect($host, $username, $password, $database);
    if (!$conn) {
        return false;
    }
   
    // Create a temporary file for the SQL dump
    $tempFile = tempnam(sys_get_temp_dir(), 'db_export_');
   
    // Export the database to the temporary file
    $command = "mysqldump --host={$host} --user={$username} --password={$password} {$database} > {$tempFile}";
    exec($command, $output, $returnCode);
    if ($returnCode !== 0) {
        return false;
    }
   
    // Create a zip file and add the SQL dump file to it
    $zip = new ZipArchive();
    if ($zip->open($outputPath, ZipArchive::CREATE) !== true) {
        return false;
    }
   
    $zip->addFile($tempFile, "{$database}.sql");
    $zip->close();
   
    // Delete the temporary file
    unlink($tempFile);
   
    return true;
}
Avatar billede arne_v Ekspert
24. marts 2025 - 14:00 #1
$command = "mysqldump --host={$host} --user={$username} --password={$password} {$database} > {$tempFile}";
exec($command, $output, $returnCode);

er faktisk en shell kommando.

mysqldump har en --ignote-table option:

https://dev.mysql.com/doc/refman/8.4/en/mysqldump.html#option_mysqldump_ignore-table
Avatar billede nemlig Professor
24. marts 2025 - 14:20 #2
Spændende..... Det kigger jeg på i aften.
Mange tak indtil videre.
Avatar billede nemlig Professor
24. marts 2025 - 16:42 #3
Det spiller 100%.
Jeg har aldrig haft en ordentlig løsning - synes altid at SQL-filen har været "corrupt", hvor jeg manuelt skulle gennemgå filen og rette fejl - typisk når der i felter var anvendt anførselstegn og andre specialtegn.
Den nye løsning her spiller 100%. Det er bare at copy/paste i phpMyAdmin.

Hurra hurra for dig Arne - jeg er bare så glad lige nu. :).
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