Heim  >  Artikel  >  Datenbank  >  MySQL-Sicherung und -Wiederherstellung

MySQL-Sicherung und -Wiederherstellung

高洛峰
高洛峰Original
2016-12-02 14:53:39893Durchsuche

MySQL-Backup-Klassifizierung:
MySQL-Datensicherung:
Logische Sicherung, physische Sicherung
MySQL-Klassifizierung nach Datensatz:
Vollständige Sicherung
Inkrementelle Sicherung
Differenzielle Sicherung
Im Allgemeinen werden diese in Kombination verwendet. Beispielsweise kann eine vollständige Sicherung einmal pro Woche durchgeführt werden, eine inkrementelle Sicherung
und eine differenzielle Sicherung kann einmal täglich durchgeführt werden, dies hängt jedoch von der Geschäftslogik des Unternehmens ab, also
Durch die richtige Wahl wird der Verlust bei der Datenwiederherstellung minimiert.
MySQL wird danach klassifiziert, ob der Server ausgefallen ist:
Kaltes Backup: Der Dienst wird vollständig gestoppt
Warmes Backup: Der Dienst wird nicht heruntergefahren, aber während des Backups führen andere Transaktionen nur Abfragevorgänge aus
Hot-Backup: Der Dienst ist online und hat keinen Einfluss auf das Lesen und Schreiben (es ist jedoch schwierig, Hot-Backup für nicht-transaktionale Speicher-Engines zu implementieren, aber
kann LVM verwenden, um fast Hot-Backup zu erreichen)
Dinge, die benötigt werden Zu sichernde Dateien:
1. Datendateien
2. Protokolldateien (Transaktionsprotokoll, Binärprotokoll)
3. Gespeicherte Prozeduren, gespeicherte Funktionen, Trigger
4. Konfigurationsdatei
Protokollklassifizierung :
1. Transaktionsprotokoll:
Zufällige E/A wird in sequentielle E/A umgewandelt
Bietet die Grundlage für die Ereigniswiedergabe (Rückgängigmachen)
2. Ereignistransaktion:
Historische Zeit aufzeichnen
MySQL-Protokoll Datei
1.Fehlerprotokoll
Fehlerinformationen, Informationen, die beim Starten oder Stoppen des Serverprozesses generiert werden. Wenn der Master die Replikation hinzufügt
, wird auch das Startfehlerprotokoll der Hauptkonfigurationsdatei aufgezeichnet ,
log_error=/var/log/mysqld.err (Stellen Sie sicher, dass Sie Schreibberechtigung für mysqld haben)
2. Das Binärprotokoll Binärprotokoll
Bietet inkrementelle Sicherung
Point-in-Time-Wiederherstellung
Bietet eine Grundlage für die Replikationsarchitektur
log_bin=/data/logs/ Binary/Changelog (Standard in der Datendatei)
log_bin_index=/data/logs/relay/binarylog definiert den Index
Position des Binärdatei
3. das allgemeine Abfrageprotokoll. Es wird normalerweise empfohlen, nicht zu öffnen
general_log= ON|OFF
general_log_file=/PATH
4. das langsame Abfrageprotokoll langsames Abfrageprotokoll
slow_query_log= ON
slow_query_log_file=/PATH
long_query_time=NUM definiert den Timeout
5.Relay-Protokoll Relay-Protokoll
Standardmäßig aktiviert MySQL keine Protokolle, aber das Fehlerprotokoll (das
Fehlerprotokoll)
ist im mysqld-Skript aktiviert

Mysql häufig verwendete Sicherungstools:
mysqldump
SELECT INTO OUTFILE
mk-parallel-backup
ibbackup
mysqlhostcopy (fast kalte Sicherung der MyISAM-Speicher-Engine, der Name sieht aus wie heißes Backup )

Als nächstes werde ich eine meiner einfachen Datenbanken verwenden, um den Prozess der Datensicherung und -wiederherstellung zu demonstrieren:
1. Verwenden Sie mysqldump zum Sichern
Die Sicherung von mysqldump ist eine logische Sicherung; > Das Sicherungsformat ist wie folgt:
#mysqldump db_name [table_name] > /PATH
Natürlich gibt es viele Optionen für die Sicherung von mysqldump:
--all-databases Alle Datenbanken sichern
--events Backup-Ereignis
--routines Backup-Speicherfunktion
--triggers Backup-Trigger
--extended-insert Backup-Erweitertes Einfügen
--skip-extended-insert Backup-Erweitertes Einfügen deaktivieren
--lock-all-tables sperrt, dies ist notwendig
--flush-logs aktualisiert die Protokolldatei auf der Festplatte, es ist auch notwendig
--master-data=n{0|1|2} Wird bei der Replikation verwendet (2)
--no-data sichert nur die Tabellenstruktur in der Datenbank
--wobei „WHERE CLAUSE“ die angegebenen Daten sichert
mysql> CREATE DATABASE luowei;
mysql> SHOW DATABASES;//Alle Datenbanken anzeigen
+--------------------+
| ----------------+
|. information_schema |
| +------+
mysql> USE luowei;
mysql> CREATE TABLE st (
-> ID INT UNIQUE AUTO_INCREMENT,
-> Name VARCHAR(30) );
mysql> //Tabelle anzeigen
+----+
|. Tables_in_luowei |
+------------------+
| st |
+------------ -----+
mysql> INSERT INTO st (Name) VALUE ('a'),('b'),('c');
mysql> //Tabelle anzeigen Daten in
+----+------+
+----+------+
|
|. 2 |. 3 | Löschen Sie die Datenbank und die Tabelle, schauen Sie sich also zuerst die Daten in
an, um sie später zu überprüfen.
[root@nfs ~]# mysqldump -uroot -p luowei st >
Hier werden keine Parameter verwendet.
OK. Da mysqldump zu diesem Zeitpunkt ein logisches Backup verwendet, werden einige erstellt und gesichert Anweisungen einfügen.
Wir können es öffnen und einen Blick darauf werfen
[root@nfs ~]# cat /root/luoweidb |. MySQL-Dump 10.11
--
-- Host: localhost Datenbank: luowei
------------------------------------------- ------ ---------
-- Serverversion 5.0.77
--
-- Aktuell Datenbank: `luowei`
--
DATENBANK ERSTELLEN /*!32312 IF NOT EXISTS*/ `luowei` /*!40100 DEFAULT
CHARACTER SET latin1 */;
USE `luowei`;
--
-- Tabellenstruktur für Tabelle „st“
--
DROP TABLE IF EXISTS `st`;
SET @saved_cs_client = @@character_set_client;
SET Character_set_client = utf8 ;
CREATE TABLE ` st` (
`ID` int(11) NOT NULL auto_increment,
`Name` varchar(30) default NULL,
UNIQUE KEY `ID` (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
SET Character_set_client = @saved_cs_client;
--
-- Daten für Tabelle „st“ ausgeben
--
LOCK TABLES `st` WRITE;
INSERT INTO `st` VALUES (1,'a'),(2,'b'),(3,'c');
UNLOCK TABLES;
-- Dump abgeschlossen am 05.09.2011 um 8:00:08 Uhr
Sehen Sie, hier sind die gesamten Anweisungen, die ich gerade gemacht habe, um eine Datenbank zu erstellen, eine Tabelle zu erstellen und Daten einzufügen
;
Als nächstes machen wir es einige Datenbankwiederherstellung:
[root@nfs ~]# mysql -uroot -e "DROP DATABASE luowei;" -p //
Datenbank löschen
Passwort eingeben:
[root@nfs ~]# mysql -uroot -e " SHOW DATABASES;" -p //Gelöschte Datenbank anzeigen

Passwort eingeben:
+------------------- -------+
|. Datenbank                                                                   |. test                                               |. root@nfs ~]# mysql -uroot -p < /root/luoweidb
Passwort eingeben:
fs ~]# mysql -e "SHOW DATABASES;"
+-- --- --------------+
| Datenbank |
+------ -----+
|. hellodb |
|. --------- -------+
OK, die Datenbank wurde wiederhergestellt. Der nächste Schritt besteht darin, zu überprüfen, ob die Informationen in der Tabelle vollständig sind
[root@nfs ~ ]# mysql -e "SELECT * FROM luowei.st " -uroot -p
Passwort eingeben:
+----+------+
| +----+------ +
| 2 |
+----+---- --+
Okay, bleibt gut zusammen, Haha, natürlich werde ich die anderen Parameter nicht im Detail vorstellen. Wenn Sie sie verwenden müssen,
können Sie den HELP-Befehl verwenden, um um Hilfe zu bitten.
Im Folgenden wird eine Methode vorgestellt, die keine lokale Eingabe des MySQL-Passworts erfordert:
#vim /root/.my.cnf
[Client]
Benutzer = Root
Passwort = Redhat
Speichern Sie es, wenn Sie die Datenbank das nächste Mal bedienen, verwenden Sie direkt den MySQL-Befehl, ohne das Passwort einzugeben
; INTO OUTFILE
Verwenden Sie weiterhin die obige Tabelle zur Sicherung,
[root@nfs ~]# mysql -e "SELECT * FROM luowei.st"
+----+------+
|. Name |
+----+------+
| >+----+------+
Wenn Sie die Dateien mit einer ID kleiner oder gleich 2 sichern möchten, können Sie diese Methode zum Sichern von
mysql> verwenden OUTFILE '/tmp/st .bak' FROM st WHERE ID <=2;
[root@nfs ~]# cat /tmp/st.bak
1 a
2 b
Wir können Sehen Sie sich eine Textdatei an. Ähnlich einer Tabelle, aber diese Methode sichert nur die Daten selbst und

nicht die Tabellenstruktur. Daher müssen Sie beim Wiederherstellen eine neue Tabelle entsprechend der Struktur neu erstellen. und dann

restore
mysql> CREATE TABLE mt LIKE st; //Ich werde eine neue
Tabelle mt basierend auf dem st-Tabellenformat erstellen und dann die neu gesicherten Daten in der neuen Tabelle mt wiederherstellen. Das ähnelt dem Wiederherstellen der Originaltabelle, hehe
Haha, sei einfach faul! ! !
mysql> LOAD DATA INFILE '/tmp/st.bak' INTO TABLE mt;
mysql> SELECT * FROM mt;
+----+------+
| ID |. Name |
+----+-----+
| -+
ok, fassen wir diese beiden Methoden jetzt zusammen. Verwenden Sie zunächst mysqldump, um die Daten mit
zu sichern. Es werden einige Anweisungen gesichert, die auf der Datenbank ausgeführt werden, sodass die Wiederherstellung einfach ist 🎜>Mit SELECT INTO OUTFILE können bestimmte Daten gesichert und Daten selektiv gesichert werden.
Bei der Wiederherstellung ist dies jedoch etwas aufwändiger und es müssen Tabellen erstellt werden.

3. LVM-basierte Snapshot-Sicherung:
Arbeitsschritte:
Stellen Sie sicher, dass sich die Datendatei auf dem LV befindet
b 🎜> c. Erstellen Sie einen Snapshot des LV, in dem sich die Daten befinden.
Lösen Sie die Lesesperre der Datenbank aus. e Sichern Sie die Transaktionsprotokolldatei (
). VARIABLEN WIE 'sync_binlog' geändert in 1
>VARIABLEN ANZEIGEN WIE 'innodb_support_xa' ist im EIN-Zustand
LV-Snapshot-Sicherung
#mysql
>FLUSH TABLES WITH READ LOCK; //Add read lock
# lvcreate -L 50M -n mysnap -s /dev/ myvg/mydata //Snapshot erstellen
>UNLOCK TABLES; //Unlock
#mount /dev/myvg/mysnap /mnt // Snapshot-Volume mounten
#cd /mnt/data
# tar -jcf /root/mysql.tar.bz2 luowei/ ibdata1 ib_logfile* mysql-
bin.* //Daten sichern und komprimieren
#umount /mnt //Snapshot deinstallieren
#lvremove --force /dev/myvg/mysnap //Snapshot entfernen

LV-Recovery

cd /usr/local/mysql
#chown -R mysql:mysql . //Berechtigungen ändern
#scripts/mysql_install_db --user=mysql --datadir=/mydata/data/ //
Neu generieren
#chown -R root .
# killall mysqld //Töte alle MySQL-Prozesse
#cd /mydata/data
#tar xf /root/mysql.tar.bz2 -C ./ //Stelle die Sicherung in der MySQL-Datendatei wieder her
Dann wann Wenn wir uns bei MySQL anmelden, werden wir feststellen, dass die Originaldaten noch vorhanden sind. Exists

4. Verwenden Sie binäre Protokolldateien, um eine zeitpunktbezogene Wiederherstellung zu erreichen.
Zeigen Sie die aktuell verwendeten Transaktionsdateien an.
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
+-- ----------------+----------+--------------+---- -- --------+
|. Binlog_Do_DB |
+------ - -------+-------------+------------------+
|. bin. 000006 |. 330 |. ----+---+
FLUSH LOGS; Klicken Sie einfach auf die verwendete Transaktionsdatei und zeichnen Sie sie auf. Klicken Sie einfach auf diese Position.
Da die binäre Protokolldatei nur Datenänderungsinformationen aufzeichnet, ändert sich die
Position, die jeder Änderung entspricht.
Jetzt füge ich eine Datenzeile in die ein Tabelle
mysql> INSERT INTO st (Name) VALUE ('d');
mysql> INSERT INTO st (Name) VALUE ('E');
mysql> SHOW MASTER STATUS;
+ -------- ----------+----------+-------------+------ ----------+
|. Binlog_Do_DB |
+------ ------- -+-------------+------------------+
| .000007 |. 553 |. ---+- ----+
Da wir bereits eine vollständige Sicherung durchgeführt haben, können wir nun die
Daten ab 330# mysqlbinlog --start-position 330 mysql-bin.000007
>/root/mysql.incr.sql //Sichern Sie die hinzugefügte Binärdatei
Dann melden wir uns zu diesem Zeitpunkt bei MySQL an
mysql>DROP DATABASE luowei;
Dann die Datenbank wiederherstellen
# service mysqld stop
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/
# cd /mydata/ data/
# tar xf /root/mysql.incr.sql -C .
# mysql < /root/mysql.incr.sql
# service mysqld start
Melden Sie sich bei der Datenbank an,
Sie werden feststellen, dass die Daten normal wiederhergestellt wurden



Stellungnahme:
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