Komunitní web pro každé město
Zobrazují se odpovědi 1 až 5 z 5

Split mysql dump PERL

  1. Server mi servíruje mysql dump všech databází v jednom velkém souboru. Potřeboval bych tento soubor rozdělit na X menších, každý by obsahoval dump pouze jedné databáze. Na internetu jsem stáhl skript v perlu, který funguje a dělá to. Nicméně, jelikož perlu moc nerozumím a určitě to bude jen nějaká drobná ptákovina, potřeboval bych, aby mi ten skript ty malé nově vytvořené soubory vytvořil v té samé složce, ve které je ten originální sql dump.
    Tzn. mám následující kód (viz níže) v souboru splitmysqldump.pl, ten spustím přes příkaz
    perl splitmysqldump.pl /backup/20150412/mysql.sql
    ale on mi to vytvoří v adresáři kde je splitmysqldump.pl, a já potřebuji docílit toho, aby to flákal do adresáře /backup/20150412/.
    Můžete na to prosím někdo znalý kouknout a upravit aby to dělalo co chci?

    Kód:
    #!/usr/bin/perl -w
    #
    # splitmysqldump - split mysqldump file into per-database dump files.
    
    use strict;
    use warnings;
    
    my $dbfile;
    my $dbname = q{};
    my $header = q{};
    
    while (<>) {
    	# Beginning of a new database section:
        # close currently open file and start a new one
        if (m/-- Current Database\: \`([-\w]+)\`/) {
        if (defined $dbfile && tell $dbfile != -1) {
            close $dbfile or die "Could not close file!"
        } 
        $dbname = $1;
        open $dbfile, ">>", "$1_dump.sql" or die "Could not create file!";
        print $dbfile $header;
        print "Writing file $1_dump.sql ...\n";
        }
    
        if (defined $dbfile && tell $dbfile != -1) {
        print $dbfile $_;
        }
    
        # Catch dump file header in the beginning
        # to be printed to each separate dump file.  
        if (!$dbname) { $header .= $_; }
    }
    close $dbfile or die "Could not close file!"

  2. Co se právě děje na Webtrhu?
  3. Kód:
    #!/bin/bash
    
    # $Id: mysqlbu.sh 5 2011-06-08 23:58:15Z john $
    
    # Simple MySQL dump script which dumps each database to a compressed
    # file with the date included in the file name
    # http://johnbokma.com/mexit/2011/06/08/
    
    MYSQL='/usr/bin/mysql'
    
    MYSQLDUMP='/usr/bin/mysqldump'
    DUMPOPTS='--opt --hex-blob --skip-extended-insert'
    
    DATEFORMAT='%Y%m%d-%H%M%S'  # See man date
    
    user=root
    pass=
    dir='.'
    while getopts 'u:d:p:h' OPTION
    do
        case $OPTION in
         u)
             user="$OPTARG"
                ;;
         d)
             dir="$OPTARG"
                ;;
         p)
             pass="$OPTARG"
                ;;
         h|?)
             printf  "Usage: %s: [-u USER] [-p PASSWORD] [-d DIRECTORY]\n" \
              $(basename $0) >&2
             exit 2
                ;;
        esac
    done
    if [ -z "$pass" ]
    then
        read -s -p "password: " pass ; printf "%b" "\n"
    fi
    
    # Get the names of the database tables
    databases=`$MYSQL -u$user -p$pass --skip-column-names -e'SHOW DATABASES'`
    
    # Write the compressed dump for each table
    for db in $databases; do
        filename=`date +"$dir/$db-$DATEFORMAT.sql.gz"`
        echo "creating $filename"
        $MYSQLDUMP $DUMPOPTS -u$user -p$pass --database $db \
         | gzip -9 > $filename
    done

  4. vdusek: asi jsme si nerozuměli, já nechci dumpovat mysql databáze do jednotlivých malých souborů, dump už mám a je prostě v jednom velkém souboru obsahující všechny databáze...s tímto nemám potřebu nic dělat, prostě to takto mám k dispozici ze záložního serveru a je to OK...stejně OK mi funguje ten skript pro rozdělení do menších dumpů z toho velkého, až na to umístění...takže potřebuji upravit jen ten skript aby mi ty malé cílové dumpy udělal do stejného adresáře jako je ten zdrojový

  5. Jinak pro zálohování DB nastudujte automysqlbackup - http://sourceforge.net/projects/automysqlbackup/
    Bývá v bežných distribucích v balíčku

  6. vdusek: díky, ze zájmu mrknu, nicméně nepotřebuji, jak jsem psal výše, pro mé účely potřebuji tu zálohu databází rozdělit, abych to měl efektivněji zautomatizováno a nemusel v případě potřeby ztrácet více času než je nezbytné (a starost o server a způsob zálohování není mým cílem, od toho si platím hostera :)

Hostujeme u Server powered by TELE3