Mysql
 sql >> Base de données >  >> RDS >> Mysql

Sauvegarde automatique ou régulière des données mysql

CSV et SELECT INTO OUTFILE

http://dev.mysql.com/doc/refman /5.7/fr/select-into.html

SELECT ... INTO OUTFILE écrit les lignes sélectionnées dans un fichier. Des terminateurs de colonne et de ligne peuvent être spécifiés pour produire un format de sortie spécifique.

Voici un exemple complet :

SELECT * FROM my_table INTO OUTFILE '/tmp/my_table.csv'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'
  FROM test_table;

Le fichier est enregistré sur le serveur et le chemin choisi doit être accessible en écriture. Bien que cette requête puisse être exécutée via PHP et une requête Web, il est préférable de l'exécuter via la console mysql.

Les données exportées de cette manière peuvent être importées dans une autre base de données en utilisant CHARGER LE FICHIER DE DONNEES

Bien que cette méthode soit supérieure pour parcourir un ensemble de résultats et enregistrer dans un fichier ligne par ligne, ce n'est pas aussi efficace que d'utiliser....

mysqldump

mysqldump est supérieur à SELECT INTO OUTFILE à bien des égards, la production de CSV n'est qu'une des nombreuses choses que cette commande peut faire.

L'utilitaire client mysqldump effectue des sauvegardes logiques, produisant un ensemble d'instructions SQL pouvant être exécutées pour reproduire les définitions d'objets de base de données d'origine et les données de table. Il vide une ou plusieurs bases de données MySQL pour la sauvegarde ou le transfert vers un autre serveur SQL. La commande mysqldump peut également générer une sortie au format CSV, autre texte délimité ou format XML.

Idéalement, mysqldump devrait être invoqué depuis votre shell. Il est possible d'utiliser exec dans php pour l'exécuter, mais comme la production du vidage peut prendre beaucoup de temps en fonction de la quantité de données et que les scripts php ne s'exécutent généralement que pendant 30 secondes, vous devez l'exécuter en arrière-plan.

mysqldump n'est pas sans son lot de problèmes.

Il n'est pas conçu comme une solution rapide ou évolutive pour sauvegarder des quantités substantielles de données. Avec de grandes tailles de données, même si l'étape de sauvegarde prend un temps raisonnable, la restauration des données peut être très lente car la relecture des instructions SQL implique des E/S disque pour l'insertion, la création d'index, etc.

Un exemple classique voir cette question : Plantage du serveur sur la sauvegarde MySQL en utilisant python où un mysqldump semble démarrer avant que le précédent ne soit terminé et rend le site Web complètement insensible.

Réplication MySQL

La réplication permet de copier les données d'un serveur de base de données MySQL (le maître) vers un ou plusieurs serveurs de base de données MySQL (les esclaves). La réplication est asynchrone par défaut; les esclaves n'ont pas besoin d'être connectés en permanence pour recevoir les mises à jour du maître. Selon la configuration, vous pouvez répliquer toutes les bases de données, les bases de données sélectionnées ou même les tables sélectionnées dans une base de données.

Ainsi réplication fonctionne différemment de SELECT INTO OUTFILE ou msyqldump C'est idéal pour garder les données dans la copie locale presque à jour (J'aurais dit parfaitement synchronisées mais il y a quelque chose appelé décalage esclave) D'autre part, si vous utilisez une tâche planifiée pour exécuter mysqldump une fois toutes les 24 heures. Imaginez ce qui peut arriver si le serveur tombe en panne après 23 heures ?

Chaque fois que vous exécutez mysqldump, vous produisez une grande quantité de données, continuez à le faire régulièrement et vous constaterez que votre disque dur est plein ou que vos factures de stockage de fichiers explosent. Avec la réplication, seules les modifications sont transmises au serveur (en utilisant le soi-disant binlog)

XtraBackup

Une alternative à la réplication consiste à utiliser Percona XtraBackup .

Percona XtraBackup est un utilitaire de sauvegarde à chaud open source pour les serveurs basés sur MySQL qui ne verrouille pas votre base de données pendant la sauvegarde.

Bien que par Percona, il est compatible avec Mysql et Mariadb. Il a la capacité de faire des sauvegardes incrémentielles, ce qui est la plus grande limitation de mysqldump.