Maison > base de données > tutoriel mysql > le corps du texte

Explication détaillée de la sauvegarde et de la récupération MySQL

青灯夜游
Libérer: 2019-11-29 16:21:51
avant
2239 Les gens l'ont consulté

Explication détaillée de la sauvegarde et de la récupération MySQL

1. Sauvegarde et récupération complètes de MySQL

L'objectif principal de la sauvegarde est la reprise après sinistre, et la sauvegarde peut également être utilisé pour tester des applications, restaurer des modifications de données, interroger des données historiques, effectuer un audit, etc.

1. L'importance de la sauvegarde des données

La valeur des données dans une entreprise est cruciale, et les données garantissent le fonctionnement normal de l'entreprise. entreprise. Par conséquent, la sécurité et la fiabilité des données sont des priorités absolues en matière d’exploitation et de maintenance, et toute perte de données peut avoir de graves conséquences pour l’entreprise. Habituellement, les raisons de la perte de données sont les suivantes :

Erreur de programme
Erreur d'opération humaine
Erreur de fonctionnement
Panne de disque
Catastrophe (incendie, tremblement de terre) et vol
3. Méthodes de sauvegarde courantes

2. Types de sauvegarde de base de données

1. perspectives :

La sauvegarde de la base de données peut être divisée en sauvegarde physique et sauvegarde logique. La sauvegarde physique est une sauvegarde des fichiers physiques du système d'exploitation de la base de données (tels que les fichiers de données, les fichiers journaux, etc.). Ce type de sauvegarde convient aux bases de données volumineuses et importantes qui doivent être restaurées rapidement en cas de problème.

La sauvegarde physique peut être divisée en sauvegarde à froid (sauvegarde hors ligne), sauvegarde à chaud (sauvegarde en ligne) et sauvegarde à chaud.

  • Sauvegarde à froid : effectuez des opérations de sauvegarde lorsque la base de données est fermée ;
  • Sauvegarde à chaud : effectuez des opérations de sauvegarde lorsque la base de données est en cours d'exécution ; la méthode s'appuie sur le fichier journal de la base de données ;

  • Sauvegarde à chaud : sauvegarde lorsque la base de données verrouille la table (ne peut pas être écrite, mais peut être lue

Logique) ; sauvegarde Il s'agit d'une sauvegarde des composants logiques de la base de données (tels que les tables et autres objets de la base de données) et est exprimée sous forme d'informations sur la structure logique de la base de données (créer une base de données, instructions de création de table) et son contenu (instructions d'insertion ou fichiers texte délimités). . Ce type de sauvegarde est utilisé pour de petites quantités de données où les valeurs des données ou les structures de table peuvent être modifiées, ou les données peuvent être recréées sur une architecture de machine différente.

2. Du point de vue de la stratégie de sauvegarde de base de données :

Du point de vue de la stratégie de sauvegarde de base de données, sauvegarde de base de données peut être divisé en sauvegarde complète, sauvegarde différentielle et sauvegarde incrémentielle. Parmi eux, la sauvegarde complète constitue la base de la sauvegarde différentielle et incrémentielle.

  • Sauvegarde complète : Une sauvegarde complète des données à chaque fois, c'est-à-dire une sauvegarde de l'intégralité de la base de données. Les opérations de sauvegarde et de restauration sont très simples, mais il y a beaucoup de duplication de données, ce qui prend beaucoup d'espace disque et le temps de sauvegarde est également très long.

  • Sauvegarde différentielle : sauvegardez tous les fichiers qui ont été modifiés depuis la dernière sauvegarde complète. Le point temporel de la sauvegarde correspond à la dernière sauvegarde complète et les données de sauvegarde deviendront de plus en plus volumineuses. Lors de la restauration des données, il vous suffit de restaurer la dernière sauvegarde complète et la sauvegarde différentielle la plus récente.

  • Sauvegarde incrémentielle : seuls les fichiers qui ont été modifiés après la dernière sauvegarde complète ou la sauvegarde incrémentielle seront sauvegardés, avec l'heure de la dernière sauvegarde complète ou de la dernière sauvegarde incrémentielle comme point temporel. sauvegarde uniquement les modifications de données entre les deux, donc la quantité de données sauvegardées est petite, l'espace est petit et la vitesse de sauvegarde est rapide. Cependant, lors de la restauration, tous les incréments depuis la dernière sauvegarde complète jusqu'à la dernière sauvegarde incrémentielle sont nécessaires. . Restaurer en séquence. Une fois les données du milieu endommagées, les données seront perdues.

3. Méthodes de sauvegarde courantes

La base de données MySQL peut être sauvegardée de plusieurs manières, par exemple en empaquetant directement le Fichier de base de données (sauvegarde physique à froid), outil de sauvegarde spécial (mysqldump), sauvegarde incrémentielle du journal binaire, sauvegarde d'un outil tiers, etc.

1. Sauvegarde physique à froid

Une sauvegarde physique à froid doit être effectuée lorsque la base de données est fermée, ce qui peut mieux garantir l'intégrité de la base de données. base de données. La sauvegarde physique à froid est généralement utilisée pour les services non essentiels. Ces services permettent généralement une interruption. Les caractéristiques de la sauvegarde physique à froid sont qu'elle est rapide et que la récupération est la plus simple.

2. Outils de sauvegarde spéciaux mysqldump ou mysqlhotcopy

Le programme mysqldump et mysqlhotcopy peuvent être utilisés pour la sauvegarde. mysqldump est un programme de sauvegarde logique courant côté client qui peut générer un ensemble d'instructions SQL exécutées pour reproduire les définitions d'objets de base de données et les données de table d'origine. Il peut sauvegarder une ou plusieurs bases de données MySQL, les sauvegarder ou les transférer vers un serveur SQL distant. mysqldump est plus polyvalent car il peut sauvegarder une variété de tables. mysqlhotcopy ne fonctionne qu'avec certains moteurs de stockage.

3. Sauvegarde incrémentielle en activant le journal binaire

MySQL prend en charge la sauvegarde incrémentielle et le journal binaire doit être activé lors de l'exécution d'une sauvegarde incrémentielle. Les fichiers journaux binaires fournissent aux utilisateurs une copie des informations nécessaires pour récupérer les modifications de la base de données apportées après l'exécution du point de sauvegarde. Si vous effectuez une sauvegarde incrémentielle (contenant les modifications de données survenues depuis la dernière sauvegarde complète ou incrémentielle), vous devez actualiser le journal binaire.

4. Opération de sauvegarde complète de la base de données

1.Préparation avant la sauvegarde

[root@centos01 ~]# mysqladmin -u root password  <!--mysql数据库设置密码-->
New password:             <!--输入密码-->
Confirm new password:        <!--确认密码-->
[root@centos01 ~]# mysql -uroot -ppwd@123    <!--登录MySQL数据库-->
mysql> create database benet;        <!--创建benet数据库-->
mysql> use benet;             <!--切换到benet数据库创建表-->
mysql> create table 一班学生成绩 (姓名 char(3),班级 char(5),学号 char(8),语文 char(3),
数学char(3),英语 char(3),理综 char(3), primary key (学号));  
<!--创建表,表名字为一班学生成绩,第一列名字是姓名,第二列名字为班级,第三列名字
为学号,第四列名字为语文,第五列名字为数学,第六列名字为英语,第七列名字为理综-->
mysql> insert into 一班学生成绩 value ('张三','一班','20170822','110','105','92','235');  
                   <!--表中插入数据-->
mysql>  insert into 一班学生成绩 value ('李四','一班','20170820','95','115','110','260');  
                   <!--表中插入数据-->
mysql> insert into 一班学生成绩 value ('王五','一班','20170818','95','103','108','270');  
                   <!--表中插入数据-->
mysql> insert into 一班学生成绩 value ('赵六','一班','20170816','100','109','112','265'); 
                   <!--表中插入数据-->
mysql> select * from benet.一班学生成绩;   <!--查看一班学生成绩表中所有数据-->
Copier après la connexion

Explication détaillée de la sauvegarde et de la récupération MySQL

2. Sauvegarde et récupération physiques à froid

La sauvegarde physique à froid utilise généralement la commande tar pour empaqueter directement le dossier de base de données. Avant d'effectuer une sauvegarde, vous devez utiliser la commande "systemctl stop mysqld" pour arrêter le service mysql.

1) Sauvegardez la base de données

Créez un répertoire /bak comme chemin de stockage des données de sauvegarde et utilisez tar pour créer le fichier de sauvegarde. La sauvegarde de l'intégralité du dossier de base de données est une sauvegarde complète.

[root@centos01 ~]# systemctl stop mysqld  <!--停止mysql服务-->
[root@centos01 ~]mkdir /bak/   <!--创建存储备份目录-->
[root@centos01 ~]# tar zcf /bak/mysql_all-$(date +%F).mysql.gz /usr/local/mysql/data/    
                 <!--直接tar打包数据库文件-->
[root@centos01 ~]# ls /bak/     <!--查看备份的数据-->
-rw-r--r-- 1 root root 766598 10月 31 03:57 /bak/mysql_all-2019-10-31.mysql.gz
Copier après la connexion

2) Restaurer la base de données

[root@centos01 ~]mkdir test  <!--创建恢复数据目录-->
[root@centos01 ~]# tar zxvf /bak/mysql_all-2019-10-31.mysql.gz  -C ./test/   
                <!--解压缩备份数据到恢复目录-->
[root@centos01 data]# cd /usr/local/mysql/data/  <!--进入数据原始位置-->
[root@centos01 data]# rm -rf ./*  <!--删除数据-->
[root@centos01 ~]# cd ./test/usr/local/mysql/data/  <!--切换到恢复目录-->
[root@centos01 date]#mv ./* /usr/local/mysql/data/    <!--将恢复目录数据恢复到原始位置-->
[root@centos01 ~]# systemctl start mysqld  <!--启动mysql服务-->
Copier après la connexion

3. Sauvegarde et récupération de mysqldump

via mysqldump La commande peut exporter la bibliothèque, la table ou toutes les bibliothèques spécifiées sous forme de scripts SQL, afin que la commande puisse être utilisée sur différentes versions de serveurs MySQL.

1) Sauvegarder et restaurer toutes les bases de données

[root@centos01 ~]# mysqldump -uroot -ppwd@123 --opt --all-databases > ./test/benet_databases.sql     <!--备份所有库,opt选项是优化执行速度-->
[root@centos01 ~]# mysql -uroot -p     <!--登录数据库-->
Enter password:          <!--数据密码-->
mysql> show databases;         <!--查看所有数据库-->
+--------------------+
| Database           |
+--------------------+
| information_schema |
| benet              |
| mysql              |
| performance_schema |
| test               |
+--------------------+
mysql> drop database benet;  <!--删除benet数据库-->
mysql> show databases;      <!--查看数据库是否删除-->
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
[root@centos01 ~]# mysql -u root -p 
mysql> show databases;     <!--查看数据库是否恢复-->
+--------------------+
| Database           |
+--------------------+
| information_schema |
| benet              |
| mysql              |
| performance_schema |
| test               |
+--------------------+
mysql> source ./test/benet_databases.sql 
             <!--也可以通过这种方法恢复误删除的数据库-->
Copier après la connexion

2) Sauvegarder et restaurer les tables de la base de données

[root@centos01 ~]# mysqldump -uroo t -ppwd@123 benet 一班学生成绩 > ./test/benet_一班学生成绩.sql   
                         <!--备份数据库下的表-->
[root@centos01 ~]# mysql -uroot -p       <!--登录数据库-->
Enter password:        <!--输入密码-->
mysql> use benet;      <!--切换到benet数据库-->
mysql> drop table 一班学生成绩;      <!--删除一班学生成绩表-->
mysql> show tables;        <!--查看表是否删除--> 
Empty set (0.00 sec)
[root@centos01 ~]# mysql -uroot -p benet 
[root@centos01 ~]# mysql -uroot -p    <!--登录数据库-->
Enter password:           <!--输入密码-->
mysql> use benet;         <!--切换到benet数据库-->
Database changed
mysql> show tables;    <!--查看误删除的表是否恢复-->
+--------------------+
| Tables_in_benet    |
+--------------------+
| 一班学生成绩       |
+--------------------+
1 row in set (0.00 sec)
Copier après la connexion

5. Sauvegarde et récupération incrémentielles MySQL

Utilisez mysqldump pour une sauvegarde complète Les données de sauvegarde contiennent des données en double et le temps de sauvegarde et de récupération est trop long. La sauvegarde incrémentielle consiste à sauvegarder les fichiers ou le contenu qui ont été ajoutés ou modifiés depuis la dernière sauvegarde.

1. Caractéristiques de la sauvegarde incrémentielle MySQL

Différent de la sauvegarde complète, la sauvegarde incrémentielle n'a pas de données en double, le volume de sauvegarde n'est pas important. , et le temps est court ; mais sa récupération est gênante. La restauration nécessite la dernière sauvegarde complète et toutes les sauvegardes incrémentielles après la sauvegarde complète, et toutes les sauvegardes incrémentielles doivent être restaurées une par une. Une sauvegarde incrémentielle peut être réalisée indirectement via le journal binaire fourni par MySQL.

2. Sauvegarde et récupération incrémentielles MySQL

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 crée un nouveau fichier journal lorsque le fichier atteint la valeur maximale définie par le journal binaire ou reçoit la commande flush logs, génère une séquence de fichiers binaires et enregistre ces journaux pour un stockage sécurisé. en temps opportun, vous pouvez effectuer une sauvegarde incrémentielle pendant un certain temps.

Pour effectuer une sauvegarde incrémentielle de MySQL, vous devez d'abord activer la fonction de journal binaire. La méthode d'implémentation pour activer la fonction de journal binaire de MySQL est la suivante :

[root@centos01 ~]# vim /etc/my.cnf       <!--进入MySQL配置文件-->
.......    <!--此处省略部分内容-->
log-bin=mysql-bin      <!--开启二进制日志功能-->
[root@centos01 ~]# systemctl restart mysqld   <!--重启MySQL服务-->
[root@centos01 ~]# ls -l /usr/local/mysql/data/
......             <!--此处省略部分内容-->
-rw-rw---- 1 mysql mysql    27299 10月 31 00:00 mysql-bin.000001
-rw-rw---- 1 mysql mysql  1031892 10月 31 00:00 mysql-bin.000002
-rw-rw---- 1 mysql mysql     1574 10月 31 14:13 mysql-bin.000003
-rw-rw---- 1 mysql mysql   507535 11月  1 09:37 mysql-bin.000004
-rw-rw---- 1 mysql mysql   507229 11月  1 09:40 mysql-bin.000005
-rw-rw---- 1 mysql mysql       95 11月  1 09:37 mysql-bin.index
drwx------ 2 mysql mysql     4096 10月 31 00:00 performance_schema
drwxr-xr-x 2 mysql mysql       20 10月 30 23:56 test
Copier après la connexion

1) Sauvegarde incrémentielle

[root@centos01 ~]# mysqladmin -uroot -ppwd@123 flush-logs  <!--刷新二进制日志-->
[root@centos01 ~]# ls -l /usr/local/mysql/data/     <!--查看二进制日志文件-->
......   <!--此处省略部分内容-->
-rw-rw---- 1 mysql mysql    27299 10月 31 00:00 mysql-bin.000001
-rw-rw---- 1 mysql mysql  1031892 10月 31 00:00 mysql-bin.000002
-rw-rw---- 1 mysql mysql     1574 10月 31 14:13 mysql-bin.000003
-rw-rw---- 1 mysql mysql   507535 11月  1 09:37 mysql-bin.000004
-rw-rw---- 1 mysql mysql   507272 11月  1 09:49 mysql-bin.000005
-rw-rw---- 1 mysql mysql      107 11月  1 09:49 mysql-bin.000006
-rw-rw---- 1 mysql mysql      114 11月  1 09:49 mysql-bin.index
drwx------ 2 mysql mysql     4096 10月 31 00:00 performance_schema
drwxr-xr-x 2 mysql mysql       20 10月 30 23:56 test
[root@centos01 ~]# mysql -uroot -ppwd@123  <!--登录mysql数据库-->
mysql> use benet;           <!--切换到benet数据库-->
mysql> insert into 一班学生成绩 value ('李宁','二班','20170824','92','98','105','235');            
                    <!--录入新的数据-->
Query OK, 1 row affected (0.01 sec)
mysql> insert into 一班学生成绩 value ('陈铭','二班','20170826','111','107','96','204');           
                    <!--录入新的数据-->
Query OK, 1 row affected (0.00 sec)
mysql> select *from 一班学生成绩;    <!--查看新数据是否录入-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名   | 班级   | 学号     | 语文   | 数学   | 英语   | 理综   |
+--------+--------+----------+--------+--------+--------+--------+
| 赵六   | 一班   | 20170816 | 100    | 109    | 112    | 265    |
| 王五   | 一班   | 20170818 | 95     | 103    | 108    | 270    |
| 李四   | 一班   | 20170820 | 95     | 115    | 110    | 260    |
| 张三   | 一班   | 20170822 | 110    | 105    | 92     | 235    |
| 李宁   | 二班   | 20170824 | 92     | 98     | 105    | 235    |
| 陈铭   | 二班   | 20170826 | 111    | 107    | 96     | 204    |
+--------+--------+----------+--------+--------+--------+--------+
6 rows in set (0.00 sec)
[root@centos01 ~]# mysqladmin -uroot -ppwd@123 flush-logs  
                          <!--刷新二进制日志-->
[root@centos01 ~]# ls -l /usr/local/mysql/data/    
                               <!--查看二进制日志文件-->
......          <!--此处省略部分内容-->
-rw-rw---- 1 mysql mysql    27299 10月 31 00:00 mysql-bin.000001
-rw-rw---- 1 mysql mysql  1031892 10月 31 00:00 mysql-bin.000002
-rw-rw---- 1 mysql mysql     1574 10月 31 14:13 mysql-bin.000003
-rw-rw---- 1 mysql mysql   507535 11月  1 09:37 mysql-bin.000004
-rw-rw---- 1 mysql mysql   507272 11月  1 09:49 mysql-bin.000005
-rw-rw---- 1 mysql mysql      649 11月  1 09:58 mysql-bin.000006
-rw-rw---- 1 mysql mysql      107 11月  1 09:58 mysql-bin.000007
-rw-rw---- 1 mysql mysql      133 11月  1 09:58 mysql-bin.index
drwx------ 2 mysql mysql     4096 10月 31 00:00 performance_schema
drwxr-xr-x 2 mysql mysql       20 10月 30 23:56 test
[root@centos01 ~]# cp /usr/local/mysql/data/mysql-bin.000006 /root/test/   
                            <!--复制二进制日志-->
Copier après la connexion

2) Simuler une opération erronée pour supprimer une classe du tableau des performances des élèves

[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'drop table benet.一班学生成绩;'       
                    <!--删除一班学生成绩表-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'   
                      <!--查看表是否删除-->
ERROR 1146 (42S02) at line 1: Table 'benet.一班学生成绩' doesn't exist
Copier après la connexion

3) Restaurer le tableau supprimé accidentellement

[root@centos01 ~]# mysql -uroot -ppwd@123 
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'        
                        <!--查看完全备份数据是否恢复-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名   | 班级   | 学号     | 语文   | 数学   | 英语   | 理综   |
+--------+--------+----------+--------+--------+--------+--------+
| 赵六   | 一班   | 20170816 | 100    | 109    | 112    | 265    |
| 王五   | 一班   | 20170818 | 95     | 103    | 108    | 270    |
| 李四   | 一班   | 20170820 | 95     | 115    | 110    | 260    |
| 张三   | 一班   | 20170822 | 110    | 105    | 92     | 235    |
+--------+--------+----------+--------+--------+--------+--------+
[root@centos01 ~]# mysqlbinlog --no-defaults /root/test/mysql-bin.000006 |mysql -u root -p 
                   <!--恢复增量备份-->
Enter password:       <!--输入密码-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'      
                     <!--查看增量恢复数据是否恢复-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名   | 班级   | 学号     | 语文   | 数学   | 英语   | 理综   |
+--------+--------+----------+--------+--------+--------+--------+
| 赵六   | 一班   | 20170816 | 100    | 109    | 112    | 265    |
| 王五   | 一班   | 20170818 | 95     | 103    | 108    | 270    |
| 李四   | 一班   | 20170820 | 95     | 115    | 110    | 260    |
| 张三   | 一班   | 20170822 | 110    | 105    | 92     | 235    |
| 李宁   | 二班   | 20170824 | 92     | 98     | 105    | 235    |
| 陈铭   | 二班   | 20170826 | 111    | 107    | 96     | 204    |
+--------+--------+----------+--------+--------+--------+--------+
Copier après la connexion

3. Récupération basée sur la position

[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'drop table benet.一班学生成绩;'   
                <!--删除一班学生成绩表-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'  
                 <!--查看表是否删除-->
ERROR 1146 (42S02) at line 1: Table 'benet.一班学生成绩' doesn't exist
[root@centos01 ~]# mysql -uroot -ppwd@123 
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'     
               <!--查看完全备份是否恢复-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名   | 班级   | 学号     | 语文   | 数学   | 英语   | 理综   |
+--------+--------+----------+--------+--------+--------+--------+
| 赵六   | 一班   | 20170816 | 100    | 109    | 112    | 265    |
| 王五   | 一班   | 20170818 | 95     | 103    | 108    | 270    |
| 李四   | 一班   | 20170820 | 95     | 115    | 110    | 260    |
| 张三   | 一班   | 20170822 | 110    | 105    | 92     | 235    |
+--------+--------+----------+--------+--------+--------+--------+
[root@centos01 ~]# mysqlbinlog --no-defaults /root/test/mysql-bin.000006       
                <!--查看二进制日志文件确认恢复的位置或时间点-->
......         <!--此处省略部分内容-->
# at 176                  <!--at就是我们称之为操作ID,下面紧跟的是时间标记-->
#191101  9:55:33 server id 1  end_log_pos 329   Query   thread_id=9 exec_time=0 error_code=0
use benet/*!*/;
SET TIMESTAMP=1572573333/*!*/;
insert into 一班学生成绩 value ('李宁','二班','20170824','92','98','105','235')
/*!*/;
# at 329
#191101  9:55:33 server id 1  end_log_pos 356   Xid = 278
COMMIT/*!*/;
# at 356
#191101  9:55:43 server id 1  end_log_pos 425   Query   thread_id=9 exec_time=0 error_code=0
SET TIMESTAMP=1572573343/*!*/;
BEGIN
/*!*/;
# at 425       <!--at就是我们称之为操作ID,下面紧跟的是时间标记-->
#191101  9:55:43 server id 1  end_log_pos 579   Query   thread_id=9 exec_time=0 error_code=0
SET TIMESTAMP=1572573343/*!*/;
insert into 一班学生成绩 value ('陈铭','二班','20170826','111','107','96','204')
/*!*/;
[root@centos01 ~]# mysqlbinlog --no-defaults --stop-position='425' /root/test/mysql-bin.000006 |mysql -uroot -p       <!--基于ID恢复增量备份-->
Enter password:       <!--输入密码-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'    
               <!--查看数据是否恢复-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名   | 班级   | 学号     | 语文   | 数学   | 英语   | 理综   |
+--------+--------+----------+--------+--------+--------+--------+
| 赵六   | 一班   | 20170816 | 100    | 109    | 112    | 265    |
| 王五   | 一班   | 20170818 | 95     | 103    | 108    | 270    |
| 李四   | 一班   | 20170820 | 95     | 115    | 110    | 260    |
| 张三   | 一班   | 20170822 | 110    | 105    | 92     | 235    |
| 李宁   | 二班   | 20170824 | 92     | 98     | 105    | 235    |
+--------+--------+----------+--------+--------+--------+--------+
Copier après la connexion

Dans la commande ci-dessus, "--stop-position" spécifie la position d'arrêt. Si seulement Pour restaurer les informations de "Chen Ming" et ignorer la récupération des informations de "Li Ning", vous pouvez utiliser l'option "--start-position" pour spécifier la position où démarrer la récupération des données. Les données récupérées à ce moment commencent à partir de la position spécifiée jusqu'à la fin du fichier journal binaire.

[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'drop table benet.一班学生成绩;'    
                   <!--删除一班学生成绩表-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'  
                  <!--查看表是否删除-->
ERROR 1146 (42S02) at line 1: Table 'benet.一班学生成绩' doesn't exist
[root@centos01 ~]# mysql -uroot -ppwd@123 
[root@centos01 ~]# mysqlbinlog --no-defaults --start-position='425' /root/test/mysql-bin.000006 |mysql -uroot -p       <!--基于ID恢复增量备份-->
Enter password:        <!--输入密码-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'    
                 <!--查看数据是否恢复-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名   | 班级   | 学号     | 语文   | 数学   | 英语   | 理综   |
+--------+--------+----------+--------+--------+--------+--------+
| 赵六   | 一班   | 20170816 | 100    | 109    | 112    | 265    |
| 王五   | 一班   | 20170818 | 95     | 103    | 108    | 270    |
| 李四   | 一班   | 20170820 | 95     | 115    | 110    | 260    |
| 张三   | 一班   | 20170822 | 110    | 105    | 92     | 235    |
| 陈铭   | 二班   | 20170826 | 111    | 107    | 96     | 204    |
+--------+--------+----------+--------+--------+--------+--------+
Copier après la connexion

4. Récupération basée sur un moment précis

L'option utilisée pour récupérer des données en fonction d'un moment précis est "-- stop-datetime", l'heure spécifiée est également obtenue en interrogeant le journal binaire. En effectuant les opérations suivantes, vous ne pouvez restaurer les données qu'avant 9:55:43, c'est-à-dire que les informations de « Chen Ming » ne seront pas restaurées.

[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'drop table benet.一班学生成绩;' 
                      <!--删除一班学生成绩表-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'  
                 <!--查看表是否删除-->
ERROR 1146 (42S02) at line 1: Table 'benet.一班学生成绩' doesn't exist
[root@centos01 ~]# mysql -uroot -ppwd@123 
[root@centos01 ~]# mysqlbinlog --no-defaults --stop-datetime='2019-11-01  9:55:43' /root/test/mysql-bin.000006 |mysql -uroot -p     
                         <!--基于时间点恢复增量备份-->
Enter password:       <!--输入密码-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'    
                           <!--查看数据是否恢复-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名   | 班级   | 学号     | 语文   | 数学   | 英语   | 理综   |
+--------+--------+----------+--------+--------+--------+--------+
| 赵六   | 一班   | 20170816 | 100    | 109    | 112    | 265    |
| 王五   | 一班   | 20170818 | 95     | 103    | 108    | 270    |
| 李四   | 一班   | 20170820 | 95     | 115    | 110    | 260    |
| 张三   | 一班   | 20170822 | 110    | 105    | 92     | 235    |
| 李宁   | 二班   | 20170824 | 92     | 98     | 105    | 235    |
+--------+--------+----------+--------+--------+--------+--------+
Copier après la connexion

Effectuez les opérations suivantes pour restaurer uniquement les informations de "Chen Ming" et ignorez la récupération des informations de "Li Ning"

[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'drop table benet.一班学生成绩;'   
                      <!--删除一班学生成绩表-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'    
                 <!--查看表是否删除-->
ERROR 1146 (42S02) at line 1: Table 'benet.一班学生成绩' doesn't exist
[root@centos01 ~]# mysql -uroot -ppwd@123 
[root@centos01 ~]# mysqlbinlog --no-defaults --start-datetime='2019-11-01 9:55:43'
/root/test/mysql-bin.000006 |mysql -uroot -p      
                      <!--基于时间恢复增量备份-->
Enter password:        <!--输入密码-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'    
                       <!--查看数据是否恢复-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名   | 班级   | 学号     | 语文   | 数学   | 英语   | 理综   |
+--------+--------+----------+--------+--------+--------+--------+
| 赵六   | 一班   | 20170816 | 100    | 109    | 112    | 265    |
| 王五   | 一班   | 20170818 | 95     | 103    | 108    | 270    |
| 李四   | 一班   | 20170820 | 95     | 115    | 110    | 260    |
| 张三   | 一班   | 20170822 | 110    | 105    | 92     | 235    |
| 陈铭   | 二班   | 20170826 | 111    | 107    | 96     | 204    |
+--------+--------+----------+--------+--------+--------+--------+
Copier après la connexion
——— ——— — Cet article se termine, merci d'avoir lu——————

Apprentissage recommandé :

Tutoriel 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!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal