Documente Academic
Documente Profesional
Documente Cultură
09/12/2015 15:03
En poursuivant votre navigation sur ce site, vous acceptez lutilisation de Cookies utiliss pour les publicits et pour
les statistiques de visites, en savoir plus OK
Fobec.com
Apps
Source
Accueil> php5 > db > Exporter une base de donnee MySql avec Pdo
Membre
Forum
Chercher
News
Delphi
JAVA
PHP
Tuto
Logiciel
Publi le 26/06/2014
Auteur Fobec
Rseaux sociaux
2 partages
0 tweets
2 plus
0 commentaires
Page 1 sur 8
09/12/2015 15:03
Etant sur un serveur mutualis, les outils en ligne de commande ne sont pas accessibles. Le script PHP permet de
raliser soi-mme les oprations de dump avec possibilits d'automatiser le process de sauvegarde.
La class MySqlDump exporte une ou plusieurs tables au format sql et compresse les fichiers directement dans une
archive zip.
<?php
/**
* MySqlDump Exporter une base de donnee MySql avec Pdo
*
* @author Fobec 06/14
* @see http://www.fobec.com/php5/1148/exporter-une-base-donnee-mysql-avec-pdo.html
*/
class MySqlDump {
private $DB_CONF =
array('host' => '', 'name' => '', 'user' => '',
'password' => '', 'filter' => '*'
);
private $compressToZip = false;
private $colInfo = array();
private $MAX_SQLFILE_SIZE = 1000; //in Mo
public function asZipArchive($host, $dbname, $user, $password, $filter = '*') {
$this->DB_CONF = array('host' => $host,
'name' => $dbname,
'user' => $user,
'password' => $password,
'filter' => $filter);
$this->compressToZip = true;
$fziparchive = tempnam(sys_get_temp_dir(), $this->DB_CONF['name']);
$files_dumpsql = $this->backupDB($this->DB_CONF, $fziparchive);
if ($this->isZipValid($fziparchive, $files_dumpsql) == FALSE) {
echo "ZipArchive seems to be corrupt";
} else {
header("Content-Type: application/zip");
header("Content-Transfer-Encoding: Binary");
header("Content-Length: " . filesize($fziparchive));
header('Content-Disposition: attachment; filename="' . $this->DB_CONF['name'] . '.zip'
header("Content-Transfer-Encoding: binary");
header('Expires: 0');
header('Pragma: no-cache');
/* ob_clean();
flush(); */
readfile($fziparchive);
exit(0);
}
}
/**
* Fixer la taille maximale du fichier d'export Sql
* @param type $maxsize taille en Mo
*/
public function setMaxFileSize($maxsize) {
$this->MAX_SQLFILE_SIZE = $maxsize;
}
/**
* Lancer l'export d'une base de donne
* @param type $db_conf
* @param type $fziparchive
* @return type
http://www.fobec.com/php5/1148/exporter-une-base-donnee-mysql-avec-pdo.html
Page 2 sur 8
09/12/2015 15:03
* @return type
*/
private function backupDB($db_conf, $fziparchive = '') {
set_time_limit(60);
$file_dumptable = array();
try {
$pdo = new PDO('mysql:host=' . $db_conf['host'] . ';dbname=' . $db_conf['name'], $db_con
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//List table from DBname
$stmt = $pdo->prepare('SHOW TABLES');
$stmt->execute();
/** Table filter * */
$filter_table = explode(';', $db_conf['filter']);
while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
if (in_array($row[0], $filter_table) || $db_conf['filter'] == '*') {
$tables[] = $row[0];
}
}
$stmt->closeCursor();
$pdo = null;
/* Dump each Table **/
foreach ($tables as $tablename) {
$ntemp = $this->backupTable($db_conf, $tablename, $fziparchive);
foreach ($ntemp as $sqlfile) {
$file_dumptable[] = $sqlfile;
}
}//end loop table
return $file_dumptable;
} catch (PDOException $err) {
$msg = __METHOD__ . ' - ' . $err->getMessage();
echo $msg;
$this->pdo = NULL;
}
}
/**
* Export Table to SQL File, files can be split
* @param type $db_conf
* @param type $tablename
* @param type $fziparchive
* @return string
*/
private function backupTable($db_conf, $tablename, $fziparchive = '') {
$pdo = new PDO('mysql:host=' . $db_conf['host'] . ';dbname=' . $db_conf['name'], $db_conf
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Avoid General error: 2008 MySQL client ran out of memory
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$sql_files = array();
//Open new SQL File
$tmpfile = tempnam(sys_get_temp_dir(), $tablename);
$filelabel = $tablename . '.sql';
$sql_files[] = array('file' => $tmpfile, 'name' => $filelabel);
$fhandle = fopen($tmpfile, 'w');
//Create Table SQL
$stmt = $pdo->prepare('SHOW CREATE TABLE ' . $tablename);
$stmt->execute();
$rs = $stmt->fetch(PDO::FETCH_NUM);
$buf = '-- MySqlDump v.09 ' . "n";
$buf.='-- http://www.fobec.com/php5/1148/exporter-une-base-donnee-mysql-avec-pdo.html' .
$buf.='-- server: ' . $db_conf['host'] . "n";
$buf.='-- date: ' . date('d/m/Y H:i:s') . "n";
http://www.fobec.com/php5/1148/exporter-une-base-donnee-mysql-avec-pdo.html
Page 3 sur 8
09/12/2015 15:03
Page 4 sur 8
09/12/2015 15:03
Page 5 sur 8
09/12/2015 15:03
filtre: par dfaut le caractre * indique que toutes les tables sont exporter. La dfinition d'une slection de table est
possible en sparant le nom des tables avec ;
setMaxFileSize: la taille des fichiers d'export peut tre limite par exemple 2 Mo pour faciliter l'import via
phpMyAdmin. Attention, lors de l'import toujours commence par le 1er fichier car il contient la structure de la table
export: les donnes sont retournes au format zip directement dans le navigateur internet. La class peut tre modifie
pour enregistrer les donnes dans un rpertoire donne ou envoy par email.
Sur un hbergement mutualis de type 1and1, une erreur 500 peut survenir lors de l?excution du script de dump. En
cherchant la raison, il semble que l?hbergeur limite la dure d?excution du script dans les pack mutualiss, donc a
se sert rien d'augmenter le timeout avec set_time_limit() par exemple.
Il serait intressant d'implmenter une fonction resume ou d'export partielle la class. Justement pour contourner la
limitation des timeout lors des export de tables, la sauvegarde pourrait tre reprise l'ancienne position.
Ajouter un commentaire
Pseudo *
Votre pseudo
Adresse email *
http://www.fobec.com/php5/1148/exporter-une-base-donnee-mysql-avec-pdo.html
Page 6 sur 8
Site internet
09/12/2015 15:03
http://
Votre commentaire
Les champs marqus d'un * sont obligatoires, les adresses emails se sont pas publies.
Publier le commentaire
A LIRE AUSSI
Afficher l'avertissement sur l'utilisation des cookies
Espace membre
Se connecter
Mot de passe oubli
Rseaux sociaux
Prsentation de l'article
Catgorie
php5 - db
Mise a jour
26/06/2014
Visualisation
vu 3708 fois
Public
Internaute
Auteur de la publication
http://www.fobec.com/php5/1148/exporter-une-base-donnee-mysql-avec-pdo.html
Page 7 sur 8
09/12/2015 15:03
Fobec
Admin
Auteur de 255 articles
Contacter Fobec
Visiter le blog de Fobec
Du meme auteur
Afficher l'avertissement sur l'utilisation des
cookies
Supprimer les accents d'une chaine de caracteres
Modifier les droits des fichiers
Liste commande recherche Google
Historique des versions de Windows
Commentaires rcents
Publi par IB dans tuto
Merci ca marche bien.
Publi par Franzi dans java
Bonjour,
Le code est simple et compile, aprs tre entr dans public
void connect, il n'effectue pas this.session.get.transport et
s'arrte. Sous eclipse avec Tomcat, j'ob...
Publi par Fobec dans CMS
//une variante avec UrlMon
uses
UrlMon;
function GetPageContent(URL: string): string;
var
MyFile: file;
Buf: array[0..14] of Char;
Filename: string;
Publi par Bonjour dans java
Joli travail!
Par contre, savez vous que votre barre de progression
s'arrte un certain pourcentage?
Publi par RIJAPOTAK dans CMS
PILOTAGE SCANNER (TWAIN-WIA), IPTC, EXIF,
METADATA, ICC PROFILES,
Développement des logiciels, Traitement
d'image, Traitement en Batch d'image et Pdf
Suivez-nous
Le site
Facebook
Google +
http://www.fobec.com/php5/1148/exporter-une-base-donnee-mysql-avec-pdo.html
Plan du site
Contact
Page 8 sur 8