Maison  >  Article  >  Opération et maintenance  >  Sauvegarde et récupération xtrabackup, principe de fonctionnement

Sauvegarde et récupération xtrabackup, principe de fonctionnement

PHP中文网
PHP中文网original
2017-06-20 13:14:132240parcourir

Sauvegarde physique XtraBackup

Percona XtraBackup est le seul logiciel de sauvegarde à chaud MySQL open source et gratuit au monde qui effectue des sauvegardes non bloquantes pour les bases de données InnoDB et XtraDB. Avec Percona XtraBackup, vous pouvez bénéficier des avantages suivants :

  • Sauvegardes rapides et fiables

  • Traitement ininterrompu des transactions pendant la sauvegarde

  • Économisez de l'espace disque et de la bande passante réseau

  • Vérification automatique des sauvegardes

  • Créez des sauvegardes InnoDB à chaud sans suspendre la base de données

  • Effectuer une sauvegarde incrémentielle de MySQL

  • Compresser la sauvegarde MySQL compressée sur un autre serveur

  • Déplacer les tables entre les serveurs MySQL

  • Créez facilement un nouveau maître-esclave MySQL

  • Sauvegardez MySQL sans ajouter de charge au serveur

Percona XtraBackup effectue une sauvegarde MySQL à chaud, une sauvegarde MySQL compressée et incrémentielle pour toutes les versions de Percona Server, MySQL et MariaDB. Percona XtraBackup fonctionne avec MySQL, MariaDB et Percona Server. Il prend en charge la sauvegarde entièrement non bloquante des moteurs de stockage InnoDB, XtraDB et HailDB.

Comment fonctionne Percona XtraBackup

Percona XtraBackup est une fonction de récupération après incident basée sur InnoDB. Copie les fichiers de données InnoDB, ce qui entraîne des données incohérentes en interne ; mais il effectue ensuite une récupération sur incident sur les fichiers, ce qui en fait à nouveau une base de données cohérente et utilisable.

En effet, InnoDB maintient un journal redo, également appelé journal des transactions. Celui-ci contient un enregistrement de chaque modification apportée aux données InnoDB. Lorsque InnoDB démarre, il vérifie les fichiers de données et le journal des transactions et effectue deux étapes. Il applique les entrées du journal des transactions validées aux fichiers de données et effectue des opérations d'annulation sur toutes les transactions qui ont modifié les données mais n'ont pas été validées.

Percona XtraBackup commence par enregistrer le numéro de séquence du journal (LSN), puis copie les fichiers de données. Cela prend peu de temps, donc si les fichiers changent, ils reflètent l'état de la base de données à différents moments. Dans le même temps, Percona XtraBackup exécute un processus en arrière-plan qui surveille les fichiers journaux de transactions et en copie les modifications. Percona XtraBackup doit le faire en permanence car les journaux de transactions sont écrits de manière circulaire et peuvent être réutilisés après un certain temps. Percona XtraBackup nécessite une journalisation des transactions pour chaque modification depuis le début de l'exécution du fichier de données.

Percona XtraBackup utilisera Backup Lock comme alternative légère. Cette fonctionnalité est disponible dans Percona Server 5.6+. Percona XtraBackup l'utilise pour copier automatiquement les données non-InnoDB afin d'éviter de bloquer les requêtes DML qui modifient les tables InnoDB. Lorsque le serveur prend en charge les verrous de sauvegarde, xtrabackup copiera d'abord les données InnoDB, exécutera et copiera les tables MyISAM et les fichiers .frm. Une fois terminée, la sauvegarde des fichiers commencera. Il sauvegardera .frm, .MRG, .MYD, .MYI, .TRG, FLUSH TABLES AVEC READ LOCKLOCK TABLES FOR BACKUP.par

REMARQUE

le verrouillage est uniquement pour MyISAM et autres non -Tables InnoDB, seulement après que Percona XtraBackup ait terminé la sauvegarde de toutes les données et journaux InnoDB/XtraDB. Percona XtraBackup utilisera Backup Lock comme alternative légère. Cette fonctionnalité est disponible dans Percona Server 5.6+. Percona XtraBackup l'utilise pour copier automatiquement les données non-InnoDB afin d'éviter de bloquer les requêtes DML qui modifient les tables InnoDB. FLUSH TABLES AVEC READ LOCK

Après cela, xtrabackup bloquera toutes les opérations susceptibles de modifier l'emplacement du journal binaire ou le rapport. Ensuite, xtrabackup finira de copier les fichiers journaux REDO et d'obtenir les coordonnées du journal binaire. Une fois cette opération terminée, xtrabackup débloquera le journal binaire et les tables. LOCK BINLOG FOR BACKUPExec_Master_Log_PosExec_Gtid_SetSHOW MASTER/SLAVE STATUS

Enfin, la position du journal binaire sera imprimée sur STDERR et xtrabackup quittera en renvoyant 0 si tout est OK.

Il est à noter que le xtrabackup de STDERR n'est écrit dans aucun fichier. Il faut le rediriger vers un fichier, par exemple. xtrabackup OPTIONS2> backupout.log

Il créera également les fichiers suivants dans le répertoire sauvegardé.

Pendant la phase de préparation, Percona XtraBackup utilise les fichiers journaux de transactions répliqués pour effectuer une récupération sur incident sur les fichiers de données répliqués. Une fois cela fait, la base de données est prête à être restaurée et utilisée.

Les tables MyISAM et InnoDB sauvegardées finiront par être cohérentes les unes avec les autres car après le processus de préparation (récupération), les données d'InnoDB sont restaurées jusqu'au point où la sauvegarde est terminée, plutôt que restaurées jusqu'au point là où tout a commencé. Ce moment correspond à la position prise afin que les données MyISAM et les données InnoDB préparées soient synchronisées. TABLES FLUSH AVEC VERROU DE LECTURE

En bref, ces outils vous permettent d'effectuer des opérations telles que des sauvegardes en streaming et incrémentielles en copiant des fichiers de données, en copiant des fichiers journaux et en appliquant des journaux à diverses combinaisons de données.

Restaurer la sauvegarde

Pour restaurer une sauvegarde à l'aide de xtrabackup, vous pouvez utiliser l'option ou . xtrabackup –copy-backxtrabackup –move-back

xtrabackup lira les variables my.cnf datadir, innodb_data_home_dir, innodb_data_file_path, innodb_log_group_home_dir et vérifiera si le répertoire existe.

Cela copiera les tables MyISAM, les index, etc. (fichiers .FRM, .MRG, .MYD, .MYI, .TRG, .TRN, .ARM, .ARZ, .CSM, .CSV, par et .opt ) d'abord, l'étape suivante dans InnoDB concerne les tables et les index, et enfin les fichiers journaux. Il conservera les attributs des fichiers lors de leur copie, MySQL devra peut-être modifier la propriété des fichiers avant de démarrer le serveur de base de données, car ils appartiendront à l'utilisateur qui a créé la sauvegarde.

Alternativement, cette option peut être utilisée pour restaurer la sauvegarde. La seule différence avec cette option est qu'au lieu de copier le fichier, elle le déplace vers l'emplacement de destination. Cette option supprimant les fichiers de sauvegarde, elle doit être utilisée avec prudence. Cette fonctionnalité est utile dans les situations où il n'y a pas suffisamment d'espace disque libre pour enregistrer à la fois les fichiers de données et leurs copies de sauvegarde. xtrabackup –move-backxtrabackup –copy-back

Installer XtraBackup

Installer la source XtraBackup

[root@ZHENGDA ~]# uname -r
3.10.0-327 .el7.x86_64

yum -y install

Installer

yum -y install percona-xtrabackup-24

Créer un utilisateur de connexion et autoriser

mysql> CREATE USER 'zhengda'@'localhost' IDENTIFIED BY 'goyun.org';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'zhengda'@'localhost';
mysql> FLUSH PRIVILEGES;

Sauvegarde complète

(1) xtrabackup uniquement Il peut sauvegarder les tables des moteurs innodb et xtradb, mais pas les tables du moteur myisam
(2) innobackupex est un script Perl qui encapsule xtrabackup et prend en charge la sauvegarde simultanée d'innodb et de myisam, mais il doit être ajouté lors de la sauvegarde. up myisam. Un verrou de lecture global. De plus, myisam ne prend pas en charge la sauvegarde incrémentielle.

$ xtrabackup --user=zhengda --password=goyun.org --backup \ 
  --target-dir=/data/backup  
$ innobackupex --user=zhengda --password=goyun.org /path/ to /backup/dir/ 
$ innobackupex --user=zhengda --password=goyun.org --stream=tar ./ | bzip2 -

Sauvegarder vers /data/backup

备份所有库:$ innobackupex --defaults-file=/etc/my.cnf--user=zhengda \
           --password=goyun.org --socket=/tmp/mysql.sock /data/backup
           
备份两个库:$ innobackupex --databases="db1 db2"--defaults-file=/etc/my.cnf--user=zhengda \
            --password=goyun.org --socket=/tmp/mysql.sock /data/backup

Sauvegarde incrémentielle

Remarque : La première sauvegarde incrémentielle doit être basée sur la sauvegarde complète. Vous pouvez
–incremental /data/backup1 spécifiez le répertoire cible pour le stockage de sauvegarde incrémentielle
–incremental-basedir=/data/backup spécifiez le répertoire pour la sauvegarde complète

$ innobackupex  --defaults-file=etc/my.cnf --user=zhengda --password=goyun.org \
--socket=/tmp/mysql.sock --incremental /data/backuup1 --incremental-basedir=/data/backup/#会根据当天时间生成个目录

pour le deuxième incrément Pour la sauvegarde, vous besoin de spécifier le répertoire de la dernière sauvegarde incrémentielle
–incremental /data/backup2 Spécifiez le répertoire de cette sauvegarde incrémentielle
–incremental-basedir=/data/backup1 Spécifiez le répertoire de la dernière sauvegarde incrémentielle

$ innobackupex --defaults-file=/etc/my.cnf --user=zhengda --password=goyun.org \
--socket=/tmp/mysql.sock --incremental /data/backup2 --incremental-basedir=/data/backup1/(....)

Restaurer la sauvegarde

–option apply-log pour préparer la restauration de la sauvegarde
–use-memory=8G Définir la mémoire utilisée lors de la préparation de la restauration des données, ce qui peut améliorer le temps passé en préparation

$ innobackupex --apply-log --use-memory=8G /data/backup
#还原如下
$ innobackupex  --defaults-file=/etc/my.cnf --user= --password= --copy-back /data/backup
#或
$ xtrabackup --user=zhengda --password=goyun.org --copy-back --target-dir=/data/backup

Utilisez Mysqldump pour la sauvegarde logique

En tant qu'outil de sauvegarde MySQL important, mysqldump est assez puissant. Les paramètres de sauvegarde et les stratégies de récupération doivent être étudiés attentivement.

Sauvegarder la base de données :

Sauvegarder une seule base de données ou une table spécifiée dans une seule base de données :

mysqldump [OPTIONS] base de données [tb1] [tb2]…

Sauvegarder plusieurs bases de données :

mysqldump [OPTIONS] –databases [OPTIONS] DB1 [DB2 DB3…]

Sauvegarder toutes les bases de données :

mysqldump [OPTIONS ] –all-databases [OPTIONS]

Ajoutez cette option pour ne pas verrouiller les tables lors de la sauvegarde

--single-transaction

Cas : Sauvegarder toutes les bibliothèques localement

mysqldump -u root -p密码 --all-databases > ./all.sql

Case : Restaurer toutes les bibliothèques localement

mysql -u root -p密码  < ./all.sql

Cas : Sauvegarder les bibliothèques db1 et db2 locales

mysqldump -u root -p密码 --databases db1 db2 > ./db1_2.sql

Cas : Restaurer les bibliothèques db1 et db2 locales

mysql -u root -p密码 db1 db2 < ./db1_2.sql

Cas : Sur l'hôte B Exécutez la sauvegarde de la bibliothèque yun de l'hôte A vers l'hôte B. La bibliothèque yun doit être créée sur l'hôte B

-C indique que la transmission de données entre les hôtes utilise la compression des données

mysqldump --host=192.168.6.108(A) -u root -p密码 --opt yun | mysql --host=localhost(B) -u root -p密码 -C yun

Cas : dans Exécuter sur l'hôte B pour sauvegarder toutes les bases de données de l'hôte A en local

mysqldump --host=192.168.6.108(A) -u root -p密码 --all-databases > all.sql(B)

Cas : restaurer et exécuter sur l'hôte B

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn