Heim  >  Artikel  >  Datenbank  >  Bringen Sie Ihnen bei, wie Sie eine einzelne Tabelle in MySQL mit physischen Methoden wiederherstellen

Bringen Sie Ihnen bei, wie Sie eine einzelne Tabelle in MySQL mit physischen Methoden wiederherstellen

藏色散人
藏色散人nach vorne
2023-01-22 08:30:021842Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über MySQL. Er führt hauptsächlich in die schnelle Wiederherstellung einer einzelnen Tabelle in MySQL ein und zeigt Ihnen Schritt für Schritt! Schauen wir es uns gemeinsam an, ich hoffe, es wird für alle hilfreich sein.

Bringen Sie Ihnen bei, wie Sie eine einzelne Tabelle in MySQL mit physischen Methoden wiederherstellen

Verwendung

1. Erstellen Sie zunächst eine Testtabelle test1 und fügen Sie mehrere Daten ein:

mysql> create table test1 (id int auto_increment primary key,name varchar(20));
Query OK, 0 rows affected (0.05 sec)

mysql> insert into test1 (name) values ('张三'),('李四'),('王二');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test1;
+----+--------+
| id | name   |
+----+--------+
|  1 | 张三   |
|  2 | 李四   |
|  3 | 王二   |
+----+--------+
3 rows in set (0.00 sec)

2. Erstellen Sie die Zieltabelle test2:

mysql> create table test2 like test1;
Query OK, 0 rows affected (0.10 sec)
查看数据目录里面的ibd文件(test2.ibd、test1.ibd):
-rw-r-----. 1 * * 114688 Nov  2 16:20 test1.ibd
-rw-r-----. 1 * * 114688 Nov  2 16:23 test2.ibd

3. Verwerfen Sie die IDB von Tabelle test2 Methodendatei (um den nächsten Schritt des Kopierens der Daten von test1 vorzubereiten):

mysql> alter table test2 discard tablespace;   
Query OK, 0 rows affected (0.02 sec)

查看ibd文件情况,发现test2的ibd文件已经被删除

-rw-r----- 1 * * 114688 Nov  2 16:20 test1.ibd

4. Führen Sie den folgenden Befehl aus, um eine CFG-Datei von test1 zu generieren:

mysql> flush table test1 for export; 
Query OK, 0 rows affected (0.00 sec)

生成了一个test1.cfg的cfg文件

-rw-r----- 1 * *    655 Nov  2 16:25 test1.cfg
-rw-r----- 1 * * 114688 Nov  2 16:20 test1.ibd

5 Fügen Sie die Quelltabelle test1 zur Zieltabelle test2 hinzu und ändern Sie die Dateiberechtigungen:

cp test1.cfg test2.cfg
cp test1.ibd test2.ibd
chown -R mysql.mysql test2.*

6 Nachdem der Kopiervorgang abgeschlossen ist, führen Sie den Befehl select aus und finden Sie den folgenden Fehler:

mysql> select * from test2;
ERROR 1100 (HY000): Table 'test2' was not locked with LOCK TABLES

7. cfg-Datei der Quelltabelle und dann die ibd-Datei importieren:

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

并用alter table的方法为目标表test2导入这个ibd文件:

mysql> alter table test2 import tablespace; 
Query OK, 0 rows affected (0.03 sec)
1 row in set (0.00 sec)

8. Führen Sie select erneut aus und stellen Sie fest, dass die Daten importiert wurden:

mysql> select * from test2;
+----+--------+
| id | name   |
+----+--------+
|  1 | 张三   |
|  2 | 李四   |
|  3 | 王二   |
+----+--------+
3 rows in set (0.00 sec)

Einführung in die physische Kopiermethode

Der Kern der oben genannten physischen Einzeltabellenkopie Die Methode liegt im Befehl cp, da es sich um eine physische Kopie handelt. Wenn die kopierte Tabelle sehr groß ist, ist die physische Kopie viel schneller als das logische SQL-Schreiben, z. B. das Einfügen in eine SELECT-Anweisung.

简单总结一下上述物理复制过程:
  • 1. Erstellen Sie eine tabellenähnliche Syntax, um eine leere Zieltabelle mit derselben Tabellenstruktur zu erstellen Quelltabelle, um eine CFG-Datei zu generieren und die Tabelle zu sperren
  • 4. Verwenden Sie den Befehl cp, um die CFG-Datei und die IBD-Datei der Quelltabelle in die Zieltabelle zu kopieren Quelltabelle
  • 6. Der Befehl alter table import importiert die IBD der Zieltabellendatendateien.
  • Einführung in die Exportsyntax:
  • 1 Mit diesem Befehl werden die Daten zu dieser Tabelle im Speicher auf der Festplatte aktualisiert, um sicherzustellen, dass die Daten von binlog aufgezeichnet werden können.
2 Tabelle oder Neuladeberechtigung;

3. Dieser Vorgang hält die gemeinsame MDL-Sperre der aktuellen Tabelle aufrecht und verhindert, dass andere Sitzungen die Tabellenstruktur ändern. Wenn die FOR EXPORT-Operation abgeschlossen ist, wird die zuvor erworbene MDL-Sperre nicht freigegeben 4. InnoDB Eine Datei mit dem Namen table_name.cfg wird im selben Datenbankverzeichnis wie die Tabelle generiert. 5. Nach der Verarbeitung der Tabellenkopie müssen Sie UNLOCK-Tabellen verwenden, um die MDL-Sperre der Quelltabelle aufzuheben trennen.
  • Hinweis:
  • Da alter table for export die Tabelle sperrt, ist diese Methode besser geeignet, die Replikationsbeziehung in der Slave-Datenbank zu stoppen und dann den Tabellenreplikationsvorgang durchzuführen. Wenn in der aktuellen Quelltabelle ein Geschäftsvorgang vorhanden ist, ist eine sorgfältige Überlegung erforderlich.
  • Empfohlenes Lernen: „
  • MySQL-Video-Tutorial

Das obige ist der detaillierte Inhalt vonBringen Sie Ihnen bei, wie Sie eine einzelne Tabelle in MySQL mit physischen Methoden wiederherstellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen