Heim > Datenbank > MySQL-Tutorial > Hauptteil

Ausführliche Erläuterung der MySQL-Sicherung und -Wiederherstellung

青灯夜游
Freigeben: 2019-11-29 16:21:51
nach vorne
2215 Leute haben es durchsucht

Ausführliche Erläuterung der MySQL-Sicherung und -Wiederherstellung

1. MySQL-Vollsicherung und -Wiederherstellung

Der Hauptzweck der Sicherung ist die Notfallwiederherstellung, und die Sicherung kann auch Kann zum Testen von Anwendungen, zum Rollback von Datenänderungen, zur Abfrage historischer Daten, zur Prüfung usw. verwendet werden.

1. Die Bedeutung der Datensicherung

Der Wert von Daten in einem Unternehmen ist entscheidend und Daten garantieren den normalen Betrieb des Unternehmens Geschäft. Daher haben Datensicherheit und Datenzuverlässigkeit bei Betrieb und Wartung höchste Priorität, und jeder Datenverlust kann schwerwiegende Folgen für das Unternehmen haben. Normalerweise sind die Gründe für Datenverlust folgende:

Programmfehler
Menschlicher Bedienungsfehler
Bedienungsfehler
Festplattenausfall
Katastrophe (Feuer, Erdbeben) und Diebstahl
3. Gängige Sicherungsmethoden

2. Datenbanksicherungstypen

1 Perspektiven:

Datenbanksicherung kann in physische Sicherung und logische Sicherung unterteilt werden. Bei der physischen Sicherung handelt es sich um eine Sicherung der physischen Dateien des Datenbankbetriebssystems (z. B. Datendateien, Protokolldateien usw.). Diese Art der Sicherung eignet sich für große und wichtige Datenbanken, die im Falle eines Fehlers schnell wiederhergestellt werden müssen.

Physische Backups können in Kalt-Backup (Offline-Backup), Hot-Backup (Online-Backup) und Warm-Backup unterteilt werden.

  • Kalte Sicherung: Sicherungsvorgänge durchführen, wenn die Datenbank geschlossen ist.
  • Hot-Sicherung: Sicherungsvorgänge durchführen, wenn die Datenbank ausgeführt wird Methode basiert auf der Protokolldatei der Datenbank;

  • Warme Sicherung: Sicherung, wenn die Datenbank die Tabelle sperrt (kann nicht geschrieben, aber gelesen werden); Sicherung Es handelt sich um eine Sicherung der logischen Komponenten der Datenbank (z. B. Tabellen und andere Datenbankobjekte) und wird als Informationen über die logische Datenbankstruktur (Datenbank erstellen, Tabellenanweisungen erstellen) und den Inhalt (Einfügeanweisungen oder durch Trennzeichen getrennte Textdateien) ausgedrückt. . Diese Art der Sicherung wird für kleinere Datenmengen verwendet, bei denen die Datenwerte oder Tabellenstrukturen bearbeitet werden können oder die Daten auf einer anderen Maschinenarchitektur neu erstellt werden können.

2. Aus Sicht der Datenbanksicherungsstrategie:

Aus Sicht der Datenbanksicherungsstrategie Datenbanksicherung Kann in vollständige Sicherung, differenzielle Sicherung und inkrementelle Sicherung unterteilt werden. Unter diesen ist die vollständige Sicherung die Grundlage für differenzielle und inkrementelle Sicherungen.

Vollständige Sicherung: Jedes Mal eine vollständige Sicherung der Daten, also eine Sicherung der gesamten Datenbank. Die Sicherungs- und Wiederherstellungsvorgänge sind sehr einfach, es kommt jedoch zu einer großen Datenduplizierung, die viel Speicherplatz beansprucht und auch die Sicherungszeit sehr lang ist.
  • Differenzielle Sicherung: Sichern Sie alle Dateien, die seit der letzten vollständigen Sicherung geändert wurden, und die Sicherungsdaten werden immer größer. Bei der Datenwiederherstellung müssen Sie nur die letzte Vollsicherung und die aktuellste differenzielle Sicherung wiederherstellen.
  • Inkrementelle Sicherung: Es werden nur Dateien gesichert, die nach der letzten vollständigen Sicherung oder inkrementellen Sicherung geändert wurden, wobei der Zeitpunkt der letzten vollständigen Sicherung oder der letzten inkrementellen Sicherung ist. Sichert nur die dazwischen liegenden Datenänderungen, daher ist die Menge der gesicherten Daten gering, der Speicherplatz gering und die Sicherungsgeschwindigkeit hoch. Bei der Wiederherstellung sind jedoch alle Inkremente von der letzten vollständigen Sicherung bis zur letzten inkrementellen Sicherung erforderlich . Nacheinander wiederherstellen. Sobald die Daten in der Mitte beschädigt sind, gehen die Daten verloren.

3. Gängige Sicherungsmethoden

MySQL-Datenbanken können auf viele Arten gesichert werden, beispielsweise durch direktes Verpacken der Datenbankdatei (physisches Kalt-Backup), spezielles Backup-Tool (mysqldump), inkrementelles Binärprotokoll-Backup, Tool-Backup von Drittanbietern usw.

1. Physisches Cold-Backup

Physisches Cold-Backup muss durchgeführt werden, wenn die Datenbank geschlossen ist, was die Integrität der Datenbank besser gewährleisten kann Datenbank. Physisches Cold-Backup wird im Allgemeinen für nicht zum Kerngeschäft gehörende Dienste verwendet. Die Merkmale des physischen Cold-Backups sind, dass es schnell ist und die Wiederherstellung am einfachsten ist.

2. Spezielle Backup-Tools mysqldump oder mysqlhotcopy

Für die Sicherung können sowohl das Programm mysqldump als auch mysqlhotcopy verwendet werden. mysqqldump ist ein häufig verwendetes logisches Sicherungsprogramm auf der Clientseite, das eine Reihe von SQL-Anweisungen generieren kann, die ausgeführt werden, um die ursprünglichen Datenbankobjektdefinitionen und Tabellendaten zu reproduzieren. Es kann eine auf mehrere MySQL-Datenbanken übertragen, diese sichern oder auf einen Remote-SQL-Server übertragen. mysqldump ist vielseitiger, da es eine Vielzahl von Tabellen sichern kann. mysqlhotcopy funktioniert nur mit bestimmten Speicher-Engines.

3. Inkrementelle Sicherung durch Aktivieren des Binärprotokolls

MySQL unterstützt inkrementelle Sicherungen und das Binärprotokoll muss bei der Durchführung einer inkrementellen Sicherung aktiviert sein. Binäre Protokolldateien stellen Benutzern eine Kopie der Informationen zur Verfügung, die zum Wiederherstellen von Datenbankänderungen erforderlich sind, die nach der Durchführung des Sicherungspunkts vorgenommen wurden. Wenn Sie eine inkrementelle Sicherung durchführen (die Datenänderungen enthält, die seit der letzten vollständigen oder inkrementellen Sicherung vorgenommen wurden), müssen Sie das Binärprotokoll aktualisieren.

4. Vollständiger Datenbank-Backup-Vorgang

1. Vorbereitung vor dem Backup

[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.一班学生成绩;   <!--查看一班学生成绩表中所有数据-->
Nach dem Login kopieren

Ausführliche Erläuterung der MySQL-Sicherung und -Wiederherstellung

2. Physische Kaltsicherung und Wiederherstellung

Physische Kaltsicherung verwendet im Allgemeinen den Befehl tar, um den Datenbankordner direkt zu packen. Bevor Sie eine Sicherung durchführen, müssen Sie den Befehl „systemctl stop mysqld“ verwenden, um den MySQL-Dienst herunterzufahren.

1) Sichern Sie die Datenbank

Erstellen Sie ein /bak-Verzeichnis als Speicherpfad für die Sicherungsdaten und verwenden Sie tar, um die Sicherungsdatei zu erstellen. Bei der Sicherung des gesamten Datenbankordners handelt es sich um eine Vollsicherung.

[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
Nach dem Login kopieren

2) Datenbank wiederherstellen

[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服务-->
Nach dem Login kopieren

3. mysqldump-Sicherung und -Wiederherstellung

über mysqldump Der Befehl kann die angegebene Bibliothek, Tabelle oder alle Bibliotheken als SQL-Skripte exportieren, sodass der Befehl auf verschiedenen Versionen von MySQL-Servern verwendet werden kann.

1) Alle Datenbanken sichern und wiederherstellen

[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 
             <!--也可以通过这种方法恢复误删除的数据库-->
Nach dem Login kopieren

2) Tabellen in der Datenbank sichern und wiederherstellen

[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)
Nach dem Login kopieren

5. Inkrementelle MySQL-Sicherung und -Wiederherstellung

Verwenden Sie mysqldump für eine vollständige Sicherung, und die Sicherungs- und Wiederherstellungszeit ist zu lang. Bei der inkrementellen Sicherung werden Dateien oder Inhalte gesichert, die seit der letzten Sicherung hinzugefügt oder geändert wurden.

1. Merkmale der inkrementellen MySQL-Sicherung

Im Gegensatz zur vollständigen Sicherung gibt es bei der inkrementellen Sicherung keine doppelten Daten, das Sicherungsvolumen ist nicht groß. und die Zeit ist kurz; aber die Wiederherstellung ist mühsam. Zur Wiederherstellung sind die letzte vollständige Sicherung und alle inkrementellen Sicherungen nach der vollständigen Sicherung erforderlich, und alle inkrementellen Sicherungen müssen einzeln wiederhergestellt werden. Eine inkrementelle Sicherung kann indirekt über das von MySQL bereitgestellte Binärprotokoll erreicht werden.

2. Inkrementelle MySQL-Sicherung und -Wiederherstellung

Das Binärprotokoll speichert alle Vorgänge, die die Datenbank aktualisieren oder aktualisieren könnten. Das Binärprotokoll beginnt mit der Aufzeichnung nach dem Starten des MySQL-Servers und erstellt eine neue Protokolldatei, wenn die Datei den vom Binärprotokoll festgelegten Maximalwert erreicht oder den Befehl zum Flush Logs empfängt, generiert eine Folge von Binärdateien und speichert diese Protokolle in einem sicheren Speicher An einem bestimmten Ort können Sie eine inkrementelle Sicherung für einen bestimmten Zeitraum durchführen.
Um eine inkrementelle Sicherung von MySQL durchzuführen, müssen Sie zunächst die Binärprotokollfunktion aktivieren. Die Implementierungsmethode zum Aktivieren der Binärprotokollfunktion von MySQL ist wie folgt:

[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
Nach dem Login kopieren

1) Inkrementelle Sicherung

[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/   
                            <!--复制二进制日志-->
Nach dem Login kopieren

2) Simulieren Sie einen fehlerhaften Vorgang, um eine Tabelle mit Schülerleistungen einer Klasse zu löschen

[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
Nach dem Login kopieren

3) Stellen Sie die versehentlich gelöschte Tabelle wieder her

[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    |
+--------+--------+----------+--------+--------+--------+--------+
Nach dem Login kopieren

3. Positionsbasierte Wiederherstellung

[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    |
+--------+--------+----------+--------+--------+--------+--------+
Nach dem Login kopieren

Im obigen Befehl „--stop-position“ Gibt die Stoppposition an. Um die Informationen von „Chen Ming“ wiederherzustellen und die Informationswiederherstellung von „Li Ning“ zu überspringen, können Sie die Option „--start-position“ verwenden, um die Position anzugeben, an der die Datenwiederherstellung gestartet werden soll. Die zu diesem Zeitpunkt wiederhergestellten Daten beginnen von der angegebenen Position bis zum Ende der binären Protokolldatei.

[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    |
+--------+--------+----------+--------+--------+--------+--------+
Nach dem Login kopieren

4. Wiederherstellung basierend auf dem Zeitpunkt

Die Option zur Wiederherstellung von Daten basierend auf dem Zeitpunkt ist „-- stop-datetime“, die angegebene Zeit wird auch durch Abfrage des Binärprotokolls ermittelt. Durch Ausführen der folgenden Vorgänge können Sie die Daten nur vor 9:55:43 wiederherstellen, d. h. die Informationen von „Chen Ming“ werden nicht wiederhergestellt.

[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    |
+--------+--------+----------+--------+--------+--------+--------+
Nach dem Login kopieren

Führen Sie die folgenden Vorgänge aus, um nur die Informationen von „Chen Ming“ wiederherzustellen und überspringen Sie die Informationswiederherstellung von „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    |
+--------+--------+----------+--------+--------+--------+--------+
Nach dem Login kopieren

——— ——— — Dieser Artikel endet, vielen Dank fürs Lesen——————

Empfohlenes Lernen: MySQL-Tutorial

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der MySQL-Sicherung und -Wiederherstellung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!