2011-04-12 6 views
2

Je souhaite donner à un client la possibilité de télécharger manuellement une sauvegarde de sa base de données. Je suis en train de coder le site en utilisant PHP et MySQL. Ainsi, après que l'utilisateur admin se soit connecté, il y aurait un lien dans le menu pour télécharger un fichier .sql sur l'ordinateur local. Comment puis-je accomplir cela avec PHP?Sauvegarde de téléchargement PHP de la base de données MySQL

+0

http://stackoverflow.com/questions/3595976/backup-mysql-database-with-php est similaire – mikel

+0

Exact duplicate de [Sauvegarder une base de données mysql et télécharger comme fichier] (http://stackoverflow.com/ questions/3751069/backup-a-mysql-database-et-download-as-a-file), et la moitié des questions dans la liste Related sur la droite. – Charles

Répondre

3

Cela peut être gênant en essayant de sauvegarder une base de données de PHP, vous seriez mieux de laisser MySql gérer cela, et la meilleure façon de dire mysql de le faire est avec un script shell:

#!/bin/bash 
# Shell script to backup MySql database 
# To backup Nysql databases file to /backup dir and later pick up by your 
# script. You can skip few databases from backup too. 
# For more info please see (Installation info): 
# http://www.cyberciti.biz/nixcraft/vivek/blogger/2005/01/mysql-backup-script.html 
# Last updated: Aug - 2005 
# -------------------------------------------------------------------- 
# This is a free shell script under GNU GPL version 2.0 or above 
# Copyright (C) 2004, 2005 nixCraft project 
# Feedback/comment/suggestions : http://cyberciti.biz/fb/ 
# ------------------------------------------------------------------------- 
# This script is part of nixCraft shell script collection (NSSC) 
# Visit http://bash.cyberciti.biz/ for more information. 
# ------------------------------------------------------------------------- 

MyUSER="SET-MYSQL-USER-NAME"  # USERNAME 
MyPASS="SET-PASSWORD"  # PASSWORD 
MyHOST="localhost"   # Hostname 

# Linux bin paths, change this if it can not be autodetected via which command 
MYSQL="$(which mysql)" 
MYSQLDUMP="$(which mysqldump)" 
CHOWN="$(which chown)" 
CHMOD="$(which chmod)" 
GZIP="$(which gzip)" 

# Backup Dest directory, change this if you have someother location 
DEST="/backup" 

# Main directory where backup will be stored 
MBD="$DEST/mysql" 

# Get hostname 
HOST="$(hostname)" 

# Get data in dd-mm-yyyy format 
NOW="$(date +"%d-%m-%Y")" 

# File to store current backup file 
FILE="" 
# Store list of databases 
DBS="" 

# DO NOT BACKUP these databases 
IGGY="test" 

[ ! -d $MBD ] && mkdir -p $MBD || : 

# Only root can access it! 
$CHOWN 0.0 -R $DEST 
$CHMOD 0600 $DEST 

# Get all database list first 
DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')" 

for db in $DBS 
do 
    skipdb=-1 
    if [ "$IGGY" != "" ]; 
    then 
    for i in $IGGY 
    do 
     [ "$db" == "$i" ] && skipdb=1 || : 
    done 
    fi 

    if [ "$skipdb" == "-1" ] ; then 
    FILE="$MBD/$db.$HOST.$NOW.gz" 
    # do all inone job in pipe, 
    # connect to mysql using mysqldump for select mysql database 
    # and pipe it out to gz file in backup dir :) 
     $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $db | $GZIP -9 > $FILE 
    fi 
done 

et vous dites php pour indiquer au système d'exploitation pour exécuter ce script et attendre que cela se fasse, cela se fait habituellement avec exec ou system tels que:

exec('/path/to/backup/script.sh'); 

ensuite, vous pouvez simplement envoyer le fichier créé par le script au navigateur pour tha t utilisateur.

+0

+1 laisser MySQL le faire est le chemin à parcourir. La chose importante à enlever du script ci-dessus est l'utilisation de mysqldump. Voir http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html pour plus de référence. – mfonda

+0

le script shell semble être la meilleure solution car vous avez plus de contrôle sur les erreurs, etc., si vous utilisez juste 'mysqldump' avec' exec', vous risquez fort de rencontrer des erreurs en cours de route. – RobertPitt

+0

Merci cela m'a mis sur la bonne voie, mais j'ai fait mon propre script shell pour exécuter la commande mysqldump –

Questions connexes