-------------------------------------------------------------- --- -
------Outil de sauvegarde physique Innobackupex------
------------------ --- -----------------------------
Manuel officiel : https://www.percona.com /doc/percona- xtrabackup/LATEST/index.html
est principalement utilisé pour la sauvegarde à chaud des données stockées dans des moteurs tels que InnoDB et MyISAM. Lors de la sauvegarde, les données à sauvegarder sont chargées dans la mémoire et. puis écrit dans le fichier de données de sauvegarde sur le disque. Les données modifiées lors de la sauvegarde sont ajoutées au fichier de sauvegarde de la même manière que pour la récupération du journal redo.
============================================ == ================================================= == ==
Processus de préparation complet d'innobackupex :
1. Activez xtrabackup_logfile. Utilisé pour enregistrer ces nouvelles modifications de données dans xtrabackup_logfile en temps réel pendant tout le processus de sauvegarde à chaud lorsque de nouvelles opérations DML sous le moteur de stockage InnoDB produisent des modifications de données. Le format d'enregistrement est le même que celui du redo log
2, en page. unités Copiez les fichiers de données stockés dans InnoDB : fichiers ibdataX et .ibd de l'espace table partagé. Étant donné que la page peut être écrite pendant la copie, les valeurs de somme de contrôle de tête et de queue de la page seront différentes. Par conséquent, lors de la génération ultérieure de fichiers de sauvegarde, vous devez appliquer le journal avant de les utiliser pour réparer certaines pages incomplètes.
3. Tables affleurantes avec verrou de lecture. Ajoutez un verrou en lecture à la table MyISAM pour copier les données stockées dans le moteur de non-transaction MyISAM
4. Copiez les fichiers .frm, .MYD et .MYI.
5. Obtenez la dernière position du binlog au moment où la sauvegarde est terminée : xtrabackup_binlog_info (les fichiers de données InnoDB peuvent être mis à jour).
6. Déverrouiller les tables ;
7. Une fois la sauvegarde terminée, enregistrez les paramètres minimaux requis pour démarrer la sauvegarde sur backup-my.cnf
( 2) Enregistrez le LSN dans xtrabackup_logfile.
(3) Enregistrez le type de sauvegarde (sauvegarde complète : complète, incrémentielle : incrémentielle ; les sauvegardes qui ont été appliquées dans le journal seront modifiées en préparation complète) et d'autres informations dans xtrabackup_checkpoints.
(4) Enregistrez d'autres informations de sauvegarde : xtrabackup_info
Ce qui suit est un résumé des données de la table de base de données, des fichiers d'espace table (ibdata) et du journal de rétablissement (ib_logfile) dans le répertoire de données sauf copie. De plus, tous les fichiers générés :
(1) backup-my.cnf
(2) xtrabackup_binlog_info : lors de l'utilisation de MyISAM. pour la sauvegarde des données, plus précis que xtrabackup_binlog_pos_innodb
(3) xtrabackup_binlog_pos_innodb : le fichier nouvellement généré après l'application du journal enregistre uniquement la position du journal binaire d'innodb et ne calcule pas le journal binaire généré par MyISAM
(4) xtrabackup_checkpoints
(5) xtrabackup_info
(6) xtrabackup_logfile (fichier principal)
(7) xtrabackup_slave_info (sauvegarder les fichiers importants de la bibliothèque) : vous devez ajouter l'option --slave-info lors de la sauvegarde, et "modifier master" sera enregistré dans ce fichier pour..." informations. Après avoir utilisé le fichier de sauvegarde pour restaurer la base de données esclave, ces informations seront utilisées pour pointer vers la base de données maître pour la synchronisation.
============================================ == ================================================= == ==
Processus de sauvegarde incrémentielle d'innobackupex
Lorsque innobackupex sauvegarde de manière incrémentielle les données de la table InnoDB, par rapport au processus de sauvegarde complète, lorsque la sauvegarde incrémentielle copie la page, elle comparera la sauvegarde. Le LSN de la page entre le fichier et les données actuelles, et le LSN de la page liée aux données modifiées augmenteront. Ainsi, innobackupex n'a besoin que de sauvegarder les pages avec des LSN modifiés.
Lors de la sauvegarde de MyISAM, une opération de sauvegarde complète est toujours effectuée.
============================================ == ================================================= == ==
Exemple d'instruction de sauvegarde
Autorisations requises pour le compte de sauvegarde : RELOAD, LOCK TABLES, REPLICATION CLIENT
(1) Entièrement préparé :
étape 1 :
innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=username --password='user_passwd' --host=[HOST] -- port=【PORT】 --no-timestamp /tmp/innobackup_all
step2:
innobackupex --apply-log --defaults-file=/tmp/innobackup_all/backup-my .cnf --user=username --password='user_passwd' --host=[HOST]--port=[PORT] --/tmp/innobackup_all
(2) Sauvegardes partielles : formulaire de sauvegarde Par exemple : mydatabase.mytable
étape 1 :
Utilisez --include avec l'expression régulière
innobackupex --include='^mydatabase[.]mytable' /path/to /backup --no-timestamp
Utilisez --tables-file avec un fichier texte enregistrant le nom complet de la table (un nom de table par ligne)
echo "mydatabase.mytable " > /tmp/tables.txt
innobackupex --tables-file=/tmp/tables.txt /path/to/backup --no-timestamp
Utilisez --databases pour spécifier les bibliothèques et les tables (par exemple, table de sauvegarde : mydatabase.mytable et bibliothèque : mysql)
innobackupex --databases="mydatabase.mytable mysql" /path/to/backup --no -timestamp --user=backup --password=backup
étape 2 :
préparer une sauvegarde partielle : innobackupex --apply-log --export /path/to/ backup/
(--databases, les tables de base de données non spécifiées vous demanderont « est-ce que la note existe » pendant la phase de préparation, vous pouvez ignorer ce message)
(3) Sauvegarde incrémentielle (en supposant qu'elle est entièrement préparé, Chemin : $FULLBACKUP)
étape 1 :
Première sauvegarde incrémentielle (basée sur une sauvegarde complète) : innobackupex --incremental $INCREMENTALBACKUP_1 --incremental-basedir=$FULLBACKUP --user=USER --password=PASSWORD
Deuxième sauvegarde incrémentielle (basée sur la première sauvegarde incrémentielle) : innobackupex --incremental $INCREMENTALBACKUP_2 --incremental-basedir=NCREMENTALBACKUP_1 --user=USER -- password=PASSWORD
(...)
Nième fois
étape 2 : préparer
innobackupex -- apply-log --redo-only $FULLBACKUP --use-memory=1G --user=USER --password=PASSWORD
innobackupex --apply-log --redo-only $FULLBACKUP--incremental- dir=$INCREMENTALBACKUP_1 --use- memory=1G --user=DVADER --password=D4RKS1D3
innobackupex --apply-log --redo-only $FULLBACKUP --incremental-dir=$ INCREMENTALBACKUP_2 --use-memory=1G --user=DVADER --password=D4RKS1D3
(...)
innobackupex --apply-log--redo -only $FULLBACKUP --incremental-dir=$ INCREMENTALBACKUP_N --use-memory=1G --user=DVADER --password=D4RKS1D3
innobackupex --apply-log $FULLBACKUP --use- memory=1G --user=$USERNAME -- password=$PASSWORD
--use-memory : Spécifiez la mémoire que la préparation peut utiliser en conjonction avec --apply-log pour accélérer la préparation
====== ======================================== ========== ========================================= =
De Quanbei Avec Percona XtraBackup, vous pouvez exporter des tables individuelles de n'importe quelle base de données InnoDB et les importer dans Percona Server avec XtraDB ou MySQL 5.6 (la source n'a pas besoin d'être XtraDB ou MySQL 5.6, mais la destination le fait). Cela ne fonctionne que sur des fichiers .ibd individuels et ne peut pas exporter une table qui n'est pas contenue dans son propre fichier .ibd.
est requis Dans la phase de préparation, une seule table est exportée via l'option --export :
Une fois une sauvegarde complète créée, préparez-la avec l'option --export :
$ innobackupex --apply-log --export /path/to/backup
Cela créera pour chaque InnoDB avec son propre tablespace un fichier avec l'extension .exp.
Un fichier se terminant par .exp sera créé pour l'espace table de chaque table innodb
Le fichier de sortie est sous la forme :
/data/backups/mysql/test/export_test .exp
/data/backups/mysql/test/export_test.ibd
/data/backups/mysql/test/export_test.cfg
Lors de l'importation de tables à partir d'autres serveurs, vous avez besoin pour créer d'abord une table (car il n'y a pas d'informations sur la structure de la table dans le fichier de table indépendant) :
mysqlfrm --diagnostic /data/2017-03-22_16-13-00/yayun/t1.frm (en utilisant le L'outil mysql-utilities mysqlfrm lit la structure de la table à partir du fichier de sauvegarde)
mysql> CREATE TABLE mytable (...) ENGINE=InnoDB; (Allez créer une table basée sur la structure de table lue précédemment)
Supprimer les fichiers d'espace table :
mysql> ALTER TABLE mydatabase.mytable DISCARD TABLESPACE;
Copiez les fichiers .ibd et .exp exportés dans le répertoire de données :
Après cela, copiez les fichiers mytable.ibd et mytable.exp (ou mytable.cfg si vous importez vers MySQL 5.6) dans le répertoire d'accueil de la base de données
, puis importez l'espace table :
mysql> mabase de données.mytable IMPORT TABLESPACE;
-------------------------------------- --- ---
------Outil de sauvegarde logique mydumper------
---------------- --- ------------------------
Certains documents en anglais sont extraits du README sur GitHub : https://github. com/maxbube/ mydumper
Dans la version 5.5/5.6 de la base de données MySQL, par rapport à l'utilisation du mysqldump officiellement fourni pour la sauvegarde monothread, l'outil de sauvegarde multithread mydumper présente des avantages uniques. (Pour les versions postérieures à MySQL 5.7.11, le responsable a finalement résolu le problème de sauvegarde cohérente de l'outil de sauvegarde logique parallèle mysqlpump. Pour mysqlpump, veuillez vous référer à l'introduction de Daniel Jiang Chengyao : http://www.tuicool.com/articles/ E77bYz7)
Inconvénients : Il est difficile de sauvegarder sur un centre de sauvegarde distant via un streaming simultané, et le plus souvent cela se fait directement sur le disque local.
== Comment fonctionne un instantané cohérent ? ==
Tout cela est effectué selon les meilleures pratiques et traditions MySQL :
* Par précaution, les requêtes lentes sur le serveur annulent le dump, ou se faire tuer
* Le verrouillage global en écriture est acquis ("FLUSH TABLES WITH READ LOCK")
* Diverses métadonnées sont lues ("SHOW SLAVE STATUS", "SHOW MASTER STATUS")
* Autres threads connectez-vous et établissez des instantanés ("START TRANSACTION AVEC UN INSTANTANÉ CONSISTANT")
** Dans la version antérieure à la version 4.1.8, il crée une table InnoDB factice et la lit.
* Une fois que tous les threads de travail annoncent l'établissement de l'instantané, le maître exécute "DÉVERROUILLEZ LES TABLES" et démarre la mise en file d'attente des tâches.
Mécanisme de mise en œuvre de la cohérence de Mydumper :
* Lorsque vous rencontrez une requête lente, soit le dump arrête de s'exécuter, soit mydumper tue la requête lente. (Le paramètre --long-query-guard est utilisé pour convenir de la durée d'une requête lente. La valeur par défaut est de 60 secondes. Si --kill-long-queries est ajouté à ce paramètre, la requête lente sera activement supprimée. S'il n'est pas ajouté, mydumper tuera automatiquement la requête lente lorsqu'il rencontrera la requête lente. Il cessera de s'exécuter)
* Utilisez "FLUSH TABLES WITH READ LOCK" pour appliquer un verrou de lecture global, ce qui empêchera les instructions DML
* Afficher les métadonnées : "SHOW SLAVE STATUS", "SHOW MASTER STATUS"
* "START TRANSACTION AVEC un instantané cohérent" : Lorsque le démarrage de la transaction ouvre la transaction, il établit immédiatement un instantané de la lecture cohérente de la transaction en cours. Sans l'option with, la transaction ne démarrera réellement que lorsque la première instruction de la transaction sera exécutée, et un instantané de lecture cohérent sera établi
* À partir de la version 4.1.8, mydumper crée une table virtuelle de type InnoDB . Lisez les données à partir de celui-ci
* Une fois que tous les threads signalent que l'instantané de cohérence est établi, exécutez "UNLOCK TABLES" et démarrez la tâche de file d'attente.
Exemple d'instruction de sauvegarde :
mydumper --user=username --password=user_passwd --socket=/... --regex '^( ?!(mysql))' --output=/backupdir --compress --verbose=3 --logfile=/backupdir/mydumper_backup.log
Explication des paramètres communs :
-- base de données Spécifiez les bibliothèques qui doivent être sauvegardées
--tables-list Spécifiez les tables qui doivent être sauvegardées, séparées par (en cas de conflit avec l'option regex, l'expression régulière prévaudra)
- -regex '^(?!(mysql |test))' : options de filtrage de la base de données
--output=/backupdir : chemin de sortie du fichier de sauvegarde
--compress : sortie compressée fichier (suffixe .gz)
--verbose=3 : informations de niveau de journal de sortie pour faciliter l'observation de l'état de la sauvegarde (0 = silencieux, 1 = erreurs, 2 = avertissements, 3 = informations, par défaut 2)
--logfile=/ backupdir/mydumper_backup.log : Spécifiez l'emplacement du fichier journal d'exécution de mydumper
--threads Spécifiez le nombre de threads utilisés lors de la sauvegarde, la valeur par défaut est 4
--statement-size : Limiter la longueur maximale des instructions SQL (mydumper fusionnera SQL lors de la sauvegarde)
--rows : Divisez la table par le nombre de lignes. Améliorez les performances de concurrence lorsque myloader
--chunk-filesize : divisez les données de la table en fonction de la taille du fichier de sortie. Améliorez les performances de concurrence de myloader
--no-locks : ne verrouillez pas la table (les données peuvent être incohérentes)
--binlogs : sauvegardez le binlog. Lorsque la sauvegarde échoue, vous pouvez vérifier le journal de sauvegarde et trouver la cause de l'erreur à proximité du point de sauvegarde
Répertoire du fichier de sauvegarde de sortie :
* Structure de la bibliothèque : dbname-schema- créer.sql.gz
* Structure de la table : dbname.tblname1-schema.sql.gz
* Données de la table : dbname.tblname1.sql.gz
(Chaque bibliothèque et table possède son propre fichier de sauvegarde indépendant. Lorsqu'une seule table doit être restaurée, restaurez-la via mydumper Table données complètes + incrément de récupération du binlog)
* métadonnées : lors de l'inclusion de la sauvegarde, la position actuelle du binlog est
---------------- -- ------------------------------------------------ --
Dump démarré à : 2017-07-04 09:45:57
AFFICHER LE STATUT DU MAÎTRE :
Journal : mysql-bin.000048
Pos : 107
GTID : (null)
Dump terminé à : 2017-07-04 09:45:57
--------------------- ----- ---------------------------------------
* mydumper_backup.log : Enregistrez l'état d'exécution du programme de sauvegarde
Explication des paramètres pertinents de la commande de récupération myloader
--emplacement du fichier de sauvegarde du répertoire
--requêtes-par-transaction Le nombre de SQL exécutés pour chaque transaction, la valeur par défaut est 1000
--overwrite-tables Supprimez d'abord les tables existantes, puis restaurez-les (il est nécessaire de sauvegarder la structure des tables lors de la sauvegarde des fichiers)
--database spécifie la base de données qui doit être restaurée
--enable-binlog est utilisée pour restaurer les données Operation record binlog
--threads spécifie le nombre de threads utilisés lors de la restauration, la valeur par défaut est 4
- -enable-binlog : restaurer le binlog sauvegardé
Remarque : myloader ne peut être que dans la bibliothèque Récupérer au niveau niveau. La récupération d'une seule table peut appeler directement le fichier correspondant contenant les instructions SQL dans le fichier de sauvegarde
De plus, innobackupex sauvegarde les données avant ce moment où la sauvegarde est terminée, tandis que mydumper (y compris mysqldump , mysqlpump, etc.) Le moment des données sauvegardées est l'heure à laquelle la sauvegarde démarre.Démarrez la lecture à partir de l'événement lorsque la première position dans le journal binaire est égale au paramètre N.
–stop-position=N (non inclus lors de la lecture)
Arrêtez la lecture de l'événement lorsque la première position dans le journal binaire est égale ou supérieure au paramètre N.
Conseils :