Selon nos projet, nous avons besoin par mesure de sécurité, pour un besoin de migration ou autres de faire simplement un backup complet de notre base de données !
Voici une libraire pour CodeIgniter 3 de réaliser cette opération de manière très simple ! L’avantage de cette lib c’est que vous pourrez configurer vos export avant autant de paramètres qu’avec un outils Gui (genre PhpMyAdmin).
Le résutlat ? Un fichier zip sur votre laptop avec toutes votre bdd !
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Db_backup {
protected $CI;
public function __construct() {
$this->CI = &get_instance();
$this->CI->load->dbutil();
$this->CI->load->helper('file');
$this->CI->load->library('zip');
}
public function backup($options = array()) {
// Options par défaut
$default_options = array(
'format' => 'zip',
'filename' => 'backup_' . date('Y-m-d-His') . '.zip',
'tables' => '*',
'add_drop' => TRUE,
'add_insert' => TRUE,
'add_create_table' => TRUE,
'add_create_database' => FALSE,
'add_drop_database' => FALSE,
'newline' => "\n",
'if_not_exists' => FALSE,
'encoding' => 'utf8',
'gzip_compression' => FALSE
);
// Fusionner les options par défaut avec les options passées
$backup_options = array_merge($default_options, $options);
// Définir l'encodage de la base de données
$this->CI->db->query("SET NAMES '".$backup_options['encoding']."'");
// Obtenir la liste des tables dans la base de données
$tables = $this->CI->db->list_tables();
// Vérifier si toutes les tables doivent être sauvegardées ou seulement certaines
if ($backup_options['tables'] !== '*') {
$tables = array_intersect($tables, (array) $backup_options['tables']);
}
// Créer le contenu de la sauvegarde pour chaque table
$content = '';
foreach ($tables as $table) {
$content .= $this->CI->dbutil->backup(array(
'tables' => array($table),
'add_drop' => $backup_options['add_drop'],
'add_insert' => $backup_options['add_insert'],
'add_create_table' => $backup_options['add_create_table'],
'add_create_database' => $backup_options['add_create_database'],
'add_drop_database' => $backup_options['add_drop_database'],
'newline' => $backup_options['newline'],
'if_not_exists' => $backup_options['if_not_exists']
));
}
// Vérifier le format de sauvegarde
if ($backup_options['format'] === 'zip') {
// Ajouter la sauvegarde à l'archive ZIP
$this->CI->zip->add_data('backup.sql', $content);
// Créer le fichier ZIP
$this->CI->zip->archive($backup_options['filename']);
// Télécharger le fichier ZIP
$this->CI->zip->download($backup_options['filename']);
} else {
// Créer le fichier de sauvegarde
write_file($backup_options['filename'], $content);
// Vérifier si la compression Gzip est activée
if ($backup_options['gzip_compression']) {
// Créer une version compressée du fichier de sauvegarde
$this->compress_gzip($backup_options['filename']);
}
}
}
protected function compress_gzip($filename) {
// Vérifier si l'extension zlib est disponible
if (extension_loaded('zlib')) {
// Lire le contenu du fichier
$content = file_get_contents($filename);
// Compresser le contenu avec Gzip
$compressed_content = gzencode($content, 9);
// Écrire le contenu compressé dans un nouveau fichier
$compressed_filename = $filename . '.gz';
write_file($compressed_filename, $compressed_content);
}
}
}
Voici les paramètre disponibles :
- format : Le format de sauvegarde souhaité. Actuellement, seule la sauvegarde au format ZIP est prise en charge.
- filename : Le nom du fichier de sauvegarde.
- tables : Les tables à sauvegarder. Par défaut, toutes les tables sont sauvegardées.
- add_drop : Ajouter les instructions DROP TABLE dans la sauvegarde. Par défaut : TRUE.
- add_insert : Ajouter les instructions INSERT INTO dans la sauvegarde. Par défaut : TRUE.
- add_create_table : Ajouter les instructions CREATE TABLE dans la sauvegarde. Par défaut : TRUE.
- add_create_database : Ajouter les instructions CREATE DATABASE dans la sauvegarde. Par défaut : FALSE.
- add_drop_database : Ajouter les instructions DROP DATABASE dans la sauvegarde. Par défaut : FALSE.
- newline : Le caractère de nouvelle ligne à utiliser dans la sauvegarde. Par défaut : “\n”.
- if_not_exists : Utiliser l’instruction IF NOT EXISTS lors de la création des tables. Par défaut : FALSE.
- encoding : L’encodage à utiliser pour la sauvegarde. Par défaut : ‘utf8’.
- gzip_compression : Activer la compression Gzip pour le fichier de sauvegarde. Par défaut : FALSE.
Et voici comment l’utiliser !
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Backup extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->library('db_backup');
}
public function index() {
// Options de sauvegarde
$backup_options = array(
'format' => 'zip',
'filename' => 'backup_' . date('Y-m-d-His') . '.zip',
'tables' => '*', // Sauvegarder toutes les tables
'add_drop' => TRUE,
'add_insert' => TRUE,
'add_create_table' => TRUE,
'add_create_database' => FALSE,
'add_drop_database' => FALSE,
'newline' => "\n",
'if_not_exists' => FALSE,
'encoding' => 'utf8',
'gzip_compression' => FALSE
);
// Effectuer la sauvegarde
$this->db_backup->backup($backup_options);
}
}
Voilà ! Faites en un bon usage 😉