Sauvegarde Mysql
Transcription
Sauvegarde Mysql
Backupmysql Sauvegarde Mysql Sauvegarde logique La sauvegarde des bases de données peut se réaliser à travers d'un des outils les plus connus: mysqldump. Avant d'effectuer un backup, Il faut prendre des précautions tels que: l'arrêt des transactions et/ou le blocage des tables. Ceci est valable quelque soit le moteur myisam ou innodb. Myisam Par exemple, si notre base de données ne contient que des tables MyISAM et que vous souhaitez que toutes les tables soient cohérentes dans l?export, vous utiliserez la commande : shell> mysqldump -u mon_user -p toto > dump_myisam-toto.sql Il faut savoir que l?option --opt, qui implique l?option --lock-tables, est activée par défaut. Ceci est valable pour les tables d'une même base. Si vous souhaitez réaliser une sauvegarde entière de toutes les bases, il faudra utiliser l'option: --lock-all-tables mysqldump -u mon_user -p --lock-all-tables -B toto2 blog > dump_myisam-dabatabases.sql InnoDB Dans le moteur mysql fonctionne en innodb, il faut juste se poser la question si toutes les bases sont innodb ou inndb et myisam mysqldump -u mon_user -p --lock-all-tables -B toto2 blog > dump_innodb-databases.sql Dans le cas où notre base n?utiliserait que le moteur InnoDB, il faudrait utiliser l?option --single-transaction afin de ne pas poser de verrou au niveau table puisque le moteur de stockage est InnoDB en résumé, - Il faudra utiliser des verrous au niveau table (--lock-tables ou --lock-all-tables) si certaines tables ne supportent pas le mode transactionnel(on trouve souvent ce cas) - Il faudra utiliser (--single-transaction) si toutes les tables utilisent un moteur transactionnel comme InnoDB Sauvegarde physique MyIsam Pour sauvegarder une base MyISAM, il est nécessaire de copier tous les fichiers de structure (.frm), les fichiers de données (.MYD) et les fichiers d?index (.MYI). - Il faut locker tour à tour toutes les tables Sauvegarde Mysql 1 Backupmysql mysql> LOCK TABLES t1 READ, t2 READ, t3 READ, t4 READ, t..READ; - Copier les fichiers physiques en préservant les permissions - Relâcher les blocages des tables afin de permettre de nouveau l'exécution des requêtes sur ces tables. mysql> UNLOCK TABLES; Innodb Pour sauvegarder physiquement une base InnoDB, il faut : - Poser un verrou global en lecture sur l?ensemble des tables (FLUSH TABLES WITH READ LOCK). mysql>FLUSH TABLES WITH READ LOCK; - Sauvegarder tous les fichiers. - Relâcher le verrou (UNLOCK TABLES ou se déconnecter). mysql> UNLOCK TABLES; Personnellement j'utilise cette méthode quelque soit le type de moteur. J'obtiens des tables cohérentes à la fin de la restauration Outils Mysql mysqldump mysqldump permet de faire des sauvegardes logiques, il ne faut donc pas oublier que la restauration risque d?être très longue si la base de données est volumineuse Voici les principales options de mysqldump : -A, --all-databases : extrait toutes les bases. -B, --databases : exporte toutes les bases passées en paramètre séparées par un espace. --single-transaction : effectue la sauvegarde au sein d?une transaction afin de conserver la --tables : exporte les tables passées en paramètre séparées par un espace. -u, --user : spécifie le login à utiliser pour se connecter au serveur MySQL. -p, --password : spécifie le mot de passe à utiliser lors de la connexion au serveur MySQL. -P, --port : spécifie le port à utiliser pour se connecter au serveur MySQL. -R, --routines : extrait les fonctions et les procédures. Cette option n?est pas activée par --skip-extended-insert : désactive les insertions multiples, ce qui peut être utile lorsque l Outils Mysql 2 Backupmysql --opt : alias pour --add-drop-table --add-locks --create-options --disable-keys --extended-in -d, --no-data : n?exporte pas le contenu des tables. Utile si vous ne voulez récupérer que la -w, --where : pose un filtre sur les enregistrements exportés. --skip-add-drop-database, --skip-add-drop-table, --no-create-db, --no-create-info : désactive --master-data : ajoute la commande CHANGE MASTER TO dans la sortie, ce qui est utile pour cré --tab : génère pour chaque table les fichiers nom_table.sql contenant la structure de la tabl --flush-logs : force la création d?un nouveau fichier de journal binaire avant de commencer l mysqlhotcopy mysqlhotcopy est un script Perl, ne fonctionnant que sous Linux et en local, qui permet de sauvegarder physiquement les tables MyISAM et Archive et qui utilisent les ordres SQL LOCK TABLES, FLUSH TABLES et les commandes système cp et scp. Vous l?aurez compris malgré son nom, mysqlhotcopy ne fait pas de sauvegarde hot (c?est-à-dire sans poser de verrou) mais plutôt une sauvegarde de type warm, c?est-à-dire que le serveur MySQL répond aux requêtes des utilisateurs mais la sauvegarde peut en bloquer certaines en posant des verrous. Les options principales du script mysqlhotcopy sont les suivantes : --addtodest : ne renomme pas le répertoire de destination s?il existe déjà, mais y ajoute les --allowold : si des fichiers de sauvegarde portant le même nom existent déjà dans le répertoi --user : spécifie le login à utiliser pour se connecter au serveur MySQL. --password : spécifie le mot de passe à utiliser lors de la connexion au serveur MySQL. --port : spécifie le port à utiliser pour se connecter au serveur MySQL. -n, --dryrun : affiche les actions à réaliser sans les effectuer. --flushlog : force la création d?un nouveau fichier de journal binaire après avoir verrouillé --method : indique la commande à utiliser pour copier les fichiers (cp ou scp). --noindices : ne sauvegarde pas les fichiers d?index, ce qui permet de réduire la taille et d --regexp : copie toutes les bases qui correspondent à l?expression régulière fournie en param Imaginez que vous vouliez à présent sauvegarder la base db1 qui ne contient que des tables MyISAM dans le répertoire /backup/, vous utiliserez la commande : shell> mysqlhotcopy --user mon_user db1 /backup/ La commande mysqlhotcopy ne permet pas que le mot de passe soit demandé lors de l?exécution de la sauvegarde. Il faut donc soit passer le mot de passe en ligne de commande, ce que l?on évitera pour des raisons de sécurité mysqldump 3 Backupmysql (possibilité de retrouver la commande utilisée dans l?historique par exemple), soit passer par un fichier de configuration qui aura les droits d?accès adéquats. Pour cela, on crée le fichier .my.cnf dans le répertoire d?accueil ($HOME) avec le contenu suivant : [mysqlhotcopy] password=mon_mot_de_passe On prendra soin ensuite de supprimer les droits pour les autres utilisateurs : shell> chmod go-rwx ~/.my.cnf mysqlhotcopy 4