7
votes

Ajout du temps au travail de MySqldump Cron?

Les travaux suivants:

/usr/bin/mysqldump -u[username] -p[password] --all-databases --single-transaction > /home/[domain]/public_html/backups/full_backup_`date -I`.sql


1 commentaires

Je ne sais pas pourquoi cette question était fermée. Cela semble être une excellente question.


5 Réponses :


3
votes

Utiliser date +% y-% m-% d_% h-% m-% s code> (ou tout autre format):

édité fort> P>

Pour éviter les sujets longs dans des courriels de cron, utilisez Créer un fichier / home / /mycron.sh code> (nom de fichier et emplacement est juste un exemple): P >

[cron parameters]    /home/<your user>/mycron.sh


6 commentaires

Salut j'utilise cpanel x et j'ai été envoyé par courrier électronique: / bin / sh: -c: ligne 0: EOF inattendu lors de la recherche de "` "/ bin / sh: -C: ligne 1: erreur de syntaxe: extrémité inattendue de déposer


Dans mon précédent poste, vous voudrez peut-être supprimer les nouvelles lignes et les backslashes `\`. Je les ai bien placés ici pour la lisibilité du forum. Je suis édité.


Oui, j'ai enlevé les backslashes. BTW dans la ligne d'objet de l'e-mail, cela m'envoie qu'il a initialement dit "... / public_html / sauvegarde / FULL_BACKUP_ date -i .sql" mais maintenant "... / public_html / sauvegarde / FULL_BACKUP_`DATE + "


Voir mon édition. Le sujet de l'email ne sera pas interprété. Vous pouvez utiliser un script pour que le sujet soit plus court (seul le chemin du script) au lieu de la commande complète


Mon point n'est pas qu'il y a un problème avec le sujet du courrier électronique. La chose est que date -i fonctionne et tout autre format type de date donne des erreurs. (Je n'ai reçu qu'un email quand il y a une sorte d'erreur - pour -i il n'y a généralement pas d'erreur et il crée le fichier SQL) Le manuel de commande de date indiqué par HD1 mentionné par -i ... je pense La solution est celle qui reconnaît l'option -i mais inclut également d'autres options.


OK je vois. Ouais, l'option -i n'est pas dans le manuel ( Stackoverflow. com / questions / 9650041 / ... ). Vous voudrez peut-être toujours utiliser un script et l'appeler par /foo/bar/mycron.sh `date -i` et ignorer l'option est le script: D



1
votes

La commande date (1) a une option "+ [format]". Je pense que l'option que vous souhaitez est soit les options '% s' ou '% n', qui vous donneront des secondes ou des nanosecondes respectivement. De votre chemin pour MySQL, je vais supposer que vous êtes sous Linux. Si tel est effectivement le cas, vous pouvez trouver le Manpage ici qui vous donnera plus de détails .


1 commentaires

J'utilise cPanel X .... entre l'option de date actuelle est -i ... Je n'arrive pas à voir cette option sur cette page man.



2
votes

date -minutes pourrait être le moyen d'aller, qui utilise le format ISO 8601. Le page wiki a quelques informations.


1 commentaires

J'ai un travail de cron courir deux fois par jour et jusqu'à présent, il a ajouté: "FULL_BACKUP_2012-11-14T00: 00-0600.SQL" Je vais simplement vérifier que cela continue de travailler ...



2
votes

Bien que mon script d'origine fonctionne, quelque chose comme ceci peut être beaucoup plus simple:

#!/bin/bash
###########################################################################
# snapshot
#
#     Rotates snapshots of backups using hard links
#
#     Keeps track of:
#          - 48 hours of snapshots (48*60/interval)
#          - 60 days worth of midnight snapshots
#          - 24 months of snapshots from the 1st
#     Ussage:
#          snapshot /path/to/backup.sql.gz
#          mysqldump ... | gzip -c | snapshot /path/to/backup.sql.gz
#
###########################################################################

if ! hash date 2> /dev/null; then
        echo "-snapshot: date command not found" 1>&2
        exit 1
fi

if ! hash ln 2> /dev/null; then
        echo "-snapshot: ln: command not found" 1>&2
        exit 1
fi

# Date Info

month=$(date +"%b")
day=$(date +"%d")
year=$(date +"%Y")
time=$(date +"%H_%M")
date=$(date +"%d%b%Y")
dateFirst=$(date --date="$month 01" +"%d%b%Y" 2> /dev/null)

# Test to see if we're using GNU date or BSD date

if [ "$dateFirst" == "" ]; then
        dateFirst=$(date -v1d +"%d%b%Y")
        back2date=$(date -v-2d +"%d%b%Y")
        back2monthY=$(date -v-2m +"%b%Y")
        back2year=$(date -v-2y +"%Y")
else
        back2date=$(date --date="-2 day" +"%d%b%Y")
        back2monthY=$(date --date="-2 month" +"%b%Y")
        back2year=$(date --date="-2 year" +"%Y")
fi

if [ "$dateFirst" == "" ]; then
        echo "-snapshot: Unknown version of date command." 1>&2
        exit 1
fi

# Directories

filepath=$1
backup=$2

if [ "$filepath" == "" ]; then
        echo "-snapshot: Expecting filename as first argument" 1>&2
        exit 1
fi

if [ "$backup" == "" ]; then
        backup=/backup
fi

if [ ! -d "$backup" ]; then
        echo "-snapshot: Directory "$backup" doesn't exist" 1>&2
        exit 1
fi

snapshots=$backup/snapshots
daily=$backup/daily
monthly=$backup/monthly
basename=${filepath##*/}
ext=${basename#*.}
basename=${basename%%.*}
filename=$basename-$date-$time.$ext

##############################
# Make new snapshot
##############################

if [ ! -d "$snapshots/$date" ]; then
        mkdir -p "$snapshots/$date"
fi

if [ -t 0 ]; then
        if [ ! -f "$filepath" ]; then
                echo "-snapshot: '$filepath' doesn't exist" 1>&2
                exit 1
        fi

    ln "$filepath" "$snapshots/$date/$filename"
else
    cat > "$snapshots/$date/$filename"
fi

##############################
# Daily/monthly snapshots
##############################

if [ "$time" == "00_00" ]; then
        if [ ! -d "$daily/$month$year" ]; then
                mkdir -p "$daily/$month$year"
        fi

        ln "$snapshots/$date/$filename" "$daily/$month$year/$filename"

        if [ "$day" == "01" ]; then
                if [ ! -d "$monthly/$year" ]; then
                        mkdir -p "$monthly/$year"
                fi

                ln "$snapshots/$date/$filename" "$monthly/$year/$filename"
        fi
fi

##############################
# Clean up old snapshots
##############################

if [ -d "$snapshots/$back2date" ]; then
        rm -fr "$snapshots/$back2date"
fi

if [ -d "$daily/$back2monthY" ]; then
        rm -fr "$daily/$back2monthY"
fi

if [ -d "$monthly/$back2year" ]; then
        rm -fr "$monthly/$back2year"
fi


0 commentaires

2
votes

Si vous voulez tout faire dans l'entrée CRONTAB (et non un script shell), voici comment:

/usr/bin/mysqldump -u[username] -p[password] --all-databases --single-transaction > /home/[domain]/public_html/backups/full_backup_`date +\%F_\%R`.sql


0 commentaires