Kann ich eine MySQL-Datenbank kopieren, indem ich die Dateien kopiere? Was enthalten die Dateien genau?


13

Ich verwende eine MySQL-Datenbank und einen Ubuntu Linux-Computer.

Meine Datenbank mit dem Namen db_test, merke ich , dass unter dem Pfad /var/lib/mysql/db_testgibt es Dateien Suffix mit .frm, .MYD, .MYIwie folgt vor :

/var/lib/mysql/db_test# ls

cars.frm 
cars.MYD 
cars.MYI

customers.frm
customers.MYD
customers.MYI

departments.frm
departments.MYD
departments.MYI

... 

Scheint jeden .frm, .MYD, .MYIDateien Gruppe mit einer Tabelle in der Datenbank abgebildet.

Ich habe zwei Fragen zu stellen:

  1. Was genau machen die drei Dateien?

  2. Wenn ich ein neues Verzeichnis unter Pfad erstellen /var/lib/mysql/sagen db_test_2, und kopieren Sie alle Dateien aus db_test_1Verzeichnis db_test_2, wird es auch eine neue Datenbank erstellen , db_test_2die exakt den gleichen Inhalt (Tabellen) wie hat db_test_1‚s?

Erzeugt diese Aktion zum Verschieben von Datenbankdateien physisch dasselbe Ergebnis wie die folgenden Befehlszeilenaktionen:

  1. Dump die Datenbank db_test_1aus

  2. Erstellen Sie eine neue Datenbank db_test_2

  3. dann werfen Sie das db_test_1in die neue Datenbank - Datenbank zurück db_test_2?

In diesem Fall scheint das Verschieben von Dateien viel schneller mysqldumpzu sein als das Kopieren von Datenbanken (oder das Importieren von Daten von einer Datenbank in eine andere Datenbank in MySQL). Irgendwelche Meinungen dazu?

Antworten:


5
  1. AFAIR, .frm ist eine Beschreibungsdatei (wobei die Struktur der Datenbanktabelle beschrieben ist), .MYD ist eine Datei mit Daten, .MYI ist eine Datei mit Indizes.

  2. Ja, das Kopieren geht viel schneller. Aber es gibt ein Problem: Es ist nicht atomar. Unter hoher Last sind kopierte Dateien inkonsistent und möglicherweise sogar beschädigt. Vor allem, wenn Sie eine intelligentere Engine wie InnoDB verwenden.

Bearbeiten: ps Sie können diese Dateien sicher kopieren, aber bevor Sie den MySQL-Server stoppen sollten.


4

Sie haben ein Cmd-Line-Tool, das genau dies tut: mysqlhotcopy

Es funktioniert gut mit Myisam-Tabellen, aber nicht mit InnoDb-Tabellen.

Wenn Sie Ihren Server mit lvm konfiguriert und Ihre / var / lib / mysql auf einem dedizierten Volume gespeichert haben, empfehle ich, alle Ihre Datenbanken sehr schnell und nicht blockierend zu sichern:

mysql -U root -p
  > flush tables with read lock;

Dadurch werden alle Ihre Tabellen auf die Festplatte geschrieben und alle R / W-Vorgänge blockiert

  > system "lvcreate -s -L 1G -n lvMysql_snap /dev/vg_myserver/lv_mysql" ;

Muss an Ihre Konfiguration angepasst werden, erstellt dies eine Momentaufnahme des Dateisystems Ihrer Datenbank. Es dauert keine Zeit

  > unlock tables;

Dies geschieht, der R / W-Betrieb wird fortgesetzt.

Jetzt können Sie / dev / vg_myserver / lvMysql_snap mounten und ein Teerarchiv Ihrer Datenbank erstellen!


Dies scheint ein schneller Weg zu sein, um die Datenbank zu sichern. Aber was ist mit dem Zurückschalten dieses Schnappschusses, damit er wieder zu meiner Live-Datenbank wird? Das ist der Teil, um den ich mir wirklich Sorgen mache. Ich kann mysqldumpmeine Datenbank in weniger als 2 Sekunden. Das Wiederherstellen ist der langsame Teil, der 5-10 Minuten dauert.
Buttle Butkus

In den letzten Distributionen können lvm-Snapshots auf den Ursprung zurückgesetzt werden, aber es ist wahrscheinlich nicht das, was Sie für die Verwaltung von Datenbanksicherungen benötigen.
Olivier S

Zu mysqlhotcopy: "Dieses Dienstprogramm ist in MySQL 5.6.20 veraltet und in MySQL 5.7 entfernt." Von: [ dev.mysql.com/doc/refman/5.6/en/mysqlhotcopy.html]
zeusstl

0

Dies funktioniert für MyISAM, jedoch nicht für InnoDB. Siehe /server//a/367321/57569

Aus dieser Antwort über InnoDB:

Wenn Sie nur daran denken, die .frm- und .ibd-Datei zu kopieren, sind Sie in der Welt der Verletzungen. Das Kopieren der .frm- und .ibd-Datei einer InnoDB-Tabelle ist nur dann sinnvoll, wenn Sie sicherstellen können, dass die Tablespace-ID der .ibd-Datei genau mit dem Tablespace-ID-Eintrag in den Metdaten der ibdata1-Datei übereinstimmt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.