Maison  >  Article  >  base de données  >  MySQL introduit la sauvegarde et la récupération incrémentielles

MySQL introduit la sauvegarde et la récupération incrémentielles

coldplay.xixi
coldplay.xixiavant
2021-02-14 10:02:153882parcourir

MySQL introduit la sauvegarde et la récupération incrémentielles

Recommandations d'apprentissage gratuites : Tutoriel vidéo MySQL

Répertoire d'articles

  • 1. Sauvegarde incrémentielle MySQL
    • 1. Le concept de sauvegarde incrémentielle
      • 1.1 Pourquoi utiliser la sauvegarde incrémentielle sauvegarde
      • 1.2 Caractéristiques de la sauvegarde incrémentielle
    • 2. Exemple de sauvegarde incrémentielle
  • 2. 🎜>
  • 1. Scénario de récupération incrémentielle
    • 2. Étapes de récupération des données modifiées après la perte d'une sauvegarde complète
    • 3. 🎜>4. Récupération basée sur un point temporel et un emplacement
    • 4.1 Récupération basée sur un point temporel
    • 4.1 Opération basée sur un emplacement
      • 5 . Idées pour spécifier les stratégies de sauvegarde d'entreprise
  • 1. La sauvegarde incrémentielle MySQL

La sauvegarde incrémentielle peut réduire les coûts. taille des fichiers de sauvegarde sur la base d'une sauvegarde complète, accélérant ainsi la sauvegarde et la récupération

1. Concepts de sauvegarde incrémentielle

1.1 Pourquoi utiliser la sauvegarde incrémentielle. sauvegarde

Le chapitre précédent mentionnait qu'il existe deux façons de sauvegarder complètement, l'une consiste à utiliser tar pour empaqueter les fichiers de données, l'autre est utiliser mysqldump pour une sauvegarde complète

    Le problème avec la sauvegarde complète est facile à voir. Tous les contenus des données sont sauvegardés à chaque fois. Il y a beaucoup de données en double dans les données de sauvegarde et le temps de sauvegarde et de récupération complète est très long.
  • Pour résoudre le problème de la sauvegarde complète, il faut utiliser la sauvegarde incrémentielle : sauvegarder les fichiers ou le contenu qui ont été ajoutés ou modifiés depuis la dernière sauvegarde
  • 1.2 Caractéristiques de la sauvegarde incrémentielle.

Les avantages de la sauvegarde incrémentielle sont qu'il n'y a pas de données en double, le volume de sauvegarde n'est pas important et le temps est courtL'inconvénient est également évident. nécessite la dernière sauvegarde complète et toutes les sauvegardes incrémentielles après la sauvegarde complète pour être restaurées, et toutes les sauvegardes incrémentielles sont restaurées une par une. L'opération est plus lourde

    MySQL ne fournit pas de méthode de sauvegarde incrémentielle directe, mais la sauvegarde incrémentielle peut le faire. être obtenu indirectement via les journaux binaires de MySQL (journaux binaires
  • )
  • L'importance des journaux binaires pour la sauvegarde est la suivante :
Le journal binaire enregistre toutes les opérations qui mettent à jour ou peuvent mettre à jour la base de données

Le journal binaire commence à enregistrer après le démarrage du serveur MySQL et est recréé une fois que le fichier atteint la taille définie par max_binlog_size ou reçoit la commande flush logs Pour les fichiers journaux.

    il vous suffit d'exécuter régulièrement la méthode de vidage des journaux pour créer de nouveaux journaux, générer des séquences de fichiers binaires et enregistrer ces journaux dans un endroit sûr à temps pour effectuer une sauvegarde incrémentielle d'une période
  1. 2. Exemple de sauvegarde incrémentielle

Activer la fonction de journal binaire

vim /etc/my.cnf...[mysqld]log-bin=mysql-binbinlog_format = MIXED#指定二进制日志(binlog)的记录格式为 MIXEDsystemctl restart mysqld.service#重启服务cd /usr/local/mysql/datals -l /usr/local/mysql/data/mysql-bin.*#查看二进制文件#二进制日志(binlog)有3种不同的记录格式:STATEMENT(基于SQL语句)、ROW(基于行)、MIXED(混合模式)#默认格式是 STATEMENT

MySQL introduit la sauvegarde et la récupération incrémentiellesChoisissez chaque semaine une période pendant laquelle la charge du serveur est plus légère ou lorsqu'il y a moins de visites d'utilisateurs pour la sauvegarde
MySQL introduit la sauvegarde et la récupération incrémentielles

mysqldump -uroot -p123123 SCHOOL CLASS01 > /opt/SCHOOL_CLASS01_$(date +%F).sql#对表进行完全备份mysqldump -uroot -p123123 --all-databases SCHOOL > /opt/SCHOOL_$(date +%F).sql#对库进行完全备份crontab -e#也可以使用计划性任务来执行30 3 * * 3 mysqldump -uroot -p123123 SCHOOL CLASS01 > /opt/SCHOOL_CLASS01_$(date +%F).sql30 3 * * 3 mysqldump -uroot -p123123 --all-databases SCHOOL > /opt/SCHOOL_$(date +%F).sql每周三的凌晨 3:00 对数据库和表进行完全备份

MySQL introduit la sauvegarde et la récupération incrémentiellesPeut effectuer des opérations de sauvegarde incrémentielles chaque jour et générer de nouveaux fichiers journaux binaires, de sorte qu'après l'insertion de nouvelles données, les nouveaux fichiers binaires correspondent au contenu modifié de la base de données
MySQL introduit la sauvegarde et la récupération incrémentielles

ls /usr/local/mysql/datamysqladmin -uroot -p123123 flush-logs
Insérer de nouvelles données pour simuler l'ajout ou la modification de données

MySQL introduit la sauvegarde et la récupération incrémentielles

use SCHOOL;insert into CLASS01 values(3,'wangsan','woman','games');insert into CLASS01 values(4,'wangsi','man','runing');select * from CLASS01;
Générer un nouveau binaire et afficher son contenu

MySQL introduit la sauvegarde et la récupération incrémentielles

cd /usr/local/mysql/data/lsmysqladmin -uroot -p123123 flush-logs
  1. cp mysql-bin.000002 /opt/#将记录变更的二进制文件02复制至/opt目录下cd /opt/lsmysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002#使用64位编码机制去解码,按行读取详细内容

MySQL introduit la sauvegarde et la récupération incrémentielles

MySQL introduit la sauvegarde et la récupération incrémentielles
2. MySQL introduit la sauvegarde et la récupération incrémentielles


La récupération incrémentielle est plus lourde que la récupération complète Chaque sauvegarde incrémentielle est un individu distinct et les données ne sont pas répétées et doivent être contrôlées avec plus de précision

  • 1. Scénario de récupération incrémentielle
    • 当数据发送错误时,应根据实际情况选择使用完全备份恢复,还是增量备份
    • 增量备份的场景是:
      • 人为的 SQL 语句破坏了数据库
      • 在进行下一次全备之前发送系统故障导致数据库数据丢失
      • 在主从架构中,主库数据发送了故障
    • 根据数据丢失的情况可以分为两类:
      • 只丢失了完全备份之后更改的数据
      • 完全备份之后丢失所有的数据

    2.丢失完全备份之后更改的数据的恢复步骤

    • 当完全备份之后更改的数据丢失,需要把完全备份之后的所有增量备份文件逐个恢复
    • 步骤如下:
mysql -uroot -p123123use SCHOOL;delete from CLASS1 where id=3;delete from CLASS1 where id=4;#删除插入的两条数据,模拟完全备份后数据丢失的故障select * from CLASS01;#检查quitmysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -uroot -p123123#使用二进制文件进行恢复操作mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"#检查表内容是否恢复

MySQL introduit la sauvegarde et la récupération incrémentielles
MySQL introduit la sauvegarde et la récupération incrémentielles

3.完全备份之后丢失所有数据的恢复步骤

  • 当完全备份和增量备份之后,所有的数据丢失,需要把完全备份和所有增量备份文件逐个恢复
  • 步骤如下:
mysql -uroot -p123123use SCHOOL;drop table CLASS01;#直接删除整个表,假设完全备份后所有数据都丢失了quitmysql -uroot -p123123 SCHOOL <p><img src="https://img.php.cn/upload/article/000/000/052/c368a93d80781ae407afafe02a2ac327-11.png" alt="MySQL introduit la sauvegarde et la récupération incrémentielles"><br><img src="https://img.php.cn/upload/article/000/000/052/1481568b3321e7dca79c49d509572b7b-12.png" alt="MySQL introduit la sauvegarde et la récupération incrémentielles"></p><p><strong>4. 基于时间点与位置的恢复</strong></p>
  • 利用二进制日志可实现基于时间点与位置的恢复,例如由于误操作删除了一张表,这时完全恢复是没有用的
  • 因为日志里还有误操作的语句,我们需要的是恢复到误操作之前的状态,然后跳过误操作的语句,再恢复后面操作的语句

4.1 基于时间点的恢复

  • 基于时间点的恢复,就是将某个起始时间的二进制文件导入数据库中,从而跳过某个发生错误的时间点实现数据的恢复
  • 使用 mysqlbinlog 加上 --stop-datetime 选项,表示在哪个时间点结束,后面误操作的语句不执行
  • –start-datetime 选项表示执行后面的语句
  • 结合使用它们就可以跳过误操作的语句,完成恢复工作
  • 需要注意的是,二进制文件中保存的日期格式需要调整为用“-”分割
#恢复用户“wangsan”的数据,而不恢复“wangsi”mysql -uroot -p123123 -e "truncate table SCHOOL.CLASS01;"mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"mysqlbinlog --no-defaults --stop-datetime='2021-02-06 15:58:39' /opt/mysql-bin.000002 |mysql -uroot -p123123mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"

MySQL introduit la sauvegarde et la récupération incrémentielles

#恢复“wangsi”的数据mysqlbinlog --no-defaults --start-datetime='2021-02-06 15:58:39' /opt/mysql-bin.000002 |mysql -uroot -p

MySQL introduit la sauvegarde et la récupération incrémentielles

4.1 基于位置的操作

  • 基于位置的恢复,就是使用基于时间点的恢复
  • 可能会出现在一个时间点里既同时存在正确的操作又存在错误的操作,基于位置是一种更为精确的恢复方式
mysqlbinlog --no-defaults --stop-position='609' /opt/mysql-bin.000002 | mysql -uroot -p#使用64位编码机制去解码并按行读取二进制文件02(增量备份)的详细内容......略

MySQL introduit la sauvegarde et la récupération incrémentielles

#仅恢复“1810”之前的数据,即不恢复“wangsi”的数据mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"mysql -uroot -p123123 -e "truncate table SCHOOL.CLASS01;"mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"mysqlbinlog --no-defaults --stop-position='1810' /opt/mysql-bin.000002 | mysql -uroot -pmysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"

MySQL introduit la sauvegarde et la récupération incrémentielles

#仅恢复“wangsi”的数据,跳过“wangsan”的数据恢复,即仅有第四条记录mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"mysqlbinlog --no-defaults --start-position='1810' /opt/mysql-bin.000002 | mysql -uroot -p123123mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"

MySQL introduit la sauvegarde et la récupération incrémentielles

5. 指定企业备份策略的思路

  • 指定企业备份策略要根据企业数据库的实际读写的频繁性与数据的重要性进行
  • 数据更新频繁,则应该进行较为频繁的备份
  • 数据较为重要,则在有适当更新时进行备份
  • 在数据库压力小的时段进行全备,如一周一次,然后每天增备
  • 根据公司的规模,中小公司可一天一次全备,大公司可每周一次全备,每天进行一次增备,并且尽量为企业实现主从复制架构

相关免费学习推荐:mysql数据库(视频)

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer