Der Inhalt dieses Artikels besteht darin, vorzustellen, was MySQL als physisches Backup (LVM-Snapshot) ist. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.
lvm-snapshot (Tool-Backup)
Vorteile:
Fast Hot Standby (Sperren Sie die Tabelle, bevor Sie einen Schnappschuss machen, und geben Sie ihn sofort nach der Erstellung frei)
Unterstützt alle Engines
Backup-Geschwindigkeit Schnell
Keine Notwendigkeit, teure kommerzielle Software zu verwenden (es ist Betriebssystemebene)
Nachteile:
Erfordert möglicherweise abteilungsübergreifende Zusammenarbeit (verwenden Sie Befehle auf Betriebssystemebene, DBA hat im Allgemeinen keine Berechtigung)
Zeitpunkt für Dienstausfälle kann nicht vorhergesagt werden
Es wird problematisch, wenn Daten auf mehrere Volumes verteilt sind (für Speicherebenen)
Das Prinzip des logischen Volume-Snapshots
Warum LVM-Snapshot-Backup wählen?
Grund: Da die Zeit der Sperrtabelle inkonsistent ist, kann zum Zeitpunkt der Sperrung der Tabelle kein Schreibvorgang durchgeführt werden. Erstellen Sie eine Snapshot-Sicherung davon, entsperren Sie sie sofort nach Abschluss der Sicherung und dann den Dienst kann normal verwendet werden (Schreiben und andere Vorgänge). Wenn beispielsweise die Datenmenge groß ist, kann sofort ein Snapshot erstellt und dann sofort entsperrt werden, ohne dass das Schreiben und andere Vorgänge beeinträchtigt werden. Wenn Sie mysqldump für die Sicherung verwenden und die Datenmenge groß ist, ist die Tabellensperrzeit lang, was sich auf die Effizienz auswirkt.
Betriebsprozess
1、flush table with read locak; 2、create snapshot 3、show master status; show slave status; [可选] 4、unlock tables; 5、Copy files from the snapshot 6、Unmount the snapshot. 7、Remove snapshotrrree
LVM-Backup-Beispiel
1. Daten auf ein logisches Volume migrieren
Umgebung: Die Datendatei befindet sich nicht auf dem logischen Volume, dann muss die Datendatei auf das logische Volume migriert werden
1, erstellen Sie ein logisches Volume
快照备份: 1.迁移数据到逻辑卷(不是必须,视情况而定) 2.锁表(时间) 3.给数据库所在的逻辑卷拍快照 4.解锁 5.将快照挂载到临时挂载点上 6.将快照上的所有数据拷贝到相应的备份目录里(不同主机) 7.卸载快照并删除
2. Migrieren Sie die aktuelle MySQL-Datenbank auf das logische Volume
[root@Admin ~]# pvcreate /dev/sdb [root@Admin ~]# vgcreate vg01 /dev/sdb [root@Admin ~]# lvcreate -n lv_mysql -L 4G vg01 [root@Admin ~]# mkfs.ext4 /dev/mapper/vg01-lv_mysql
2. Snapshot-Backup-Datenbank
1. Lesesperre zur Datenbank hinzufügen
1>先停止应用 2>停止mysql服务 [root@Admin ~]# service mysqld stop 3>备份所有的数据文件到指定的地方 [root@Admin ~]# tar -czvf /tmp/backmysql/mysql.tar.gz /data/DB/* 4>挂载逻辑卷到当前mysql的数据目录里 [root@Admin ~]# mount /dev/mapper/vg01-lv_mysql /data/DB/ 5>将刚刚备份的数据解压到数据目录里 [root@Admin ~]# tar xf /tmp/backmysql/mysql.tar.gz -C /data/DB/ [root@Admin ~]# mv /data/DB/data/DB/* /data/DB/ && rm -rf /data/DB/data/ 6>启动数据库 [root@Admin ~]# service mysqld start 此处启动失败原因/data/DB/数据目录的权限变成了root, 更改权限重新启动 [root@Admin ~]# chown mysql. -R /data/DB/ && service mysqld start
2. Erstellen Sie einen Snapshot des logischen Volumes, auf dem sich die MySQL-Datenbank befindet
mysql> flush table with read lock;
3. Entsperren Sie die Datenbank
[root@Admin ~]# lvcreate -n lv_mysql_s -L 50M -s /dev/vg01/lv_mysql [root@Admin ~]# dmsetup --tree ls vg01-lv_mysql (253:0) └─vg01-lv_mysql-real (253:1) └─ (8:16) vg01-lv_mysql_s (253:3) ├─vg01-lv_mysql_s-cow (253:2) │ └─ (8:16) └─vg01-lv_mysql-real (253:1) └─ (8:16)
Die oben genannten Schritte 1~3 können zu einem Schritt zusammengefasst werden
[root@Admin ~]# unlock tables
4. Mounten Sie den Snapshot im temporären Verzeichnis
[root@Admin ~]# echo "flush tables with read lock; system lvcreate -n lv_mysql_s -L 50M -s /dev/vg01/lv_mysql;unlock tables;" |mysql -p123
5. Sichern Sie die Daten
[root@Admin ~]# mkdir /mnt/mysql && mount /dev/vg01/lv_mysql_s /mnt/mysql/
6. Snapshot deinstallieren und löschen
[root@Admin ~]# ls /mnt/mysql/ # 可以看到新的挂载目录里面的数据 Admin.pid db01 ib_logfile0 mysql mysql-bin.000003 mysql-bin.000006 mysql-bin.000009 performance_schema auto.cnf db02 ib_logfile1 mysql-bin.000001 mysql-bin.000004 mysql-bin.000007 mysql-bin.000010 test binlog ibdata1 login mysql-bin.000002 mysql-bin.000005 mysql-bin.000008 mysql-bin.index [root@Admin ~]# mkdir /backup && rsync -av /mnt/mysql /backup
7. Testen und überprüfen (alles im Datenverzeichnis löschen) und dann das gesicherte Datenverzeichnis wiederherstellen
[root@Admin ~]# umount /mnt/mysql/ && lvremove /dev/vg01/lv_mysql_s
Organisieren Sie die obige Sicherung in einem Skript + einer geplanten Crontab-Aufgabe, um die Sicherung regelmäßig abzuschließen
1>我们来点狠的,直接把mysql的数据目录/data/DB/删除。 [root@Admin ~]# rm -rf /data/DB/* && ls /data/DB/ 2>删除后可以看到重启mysql直接报错了 [root@Admin ~]# service mysqld restart MySQL server PID file could not be found! [失败] Starting MySQL...The server quit without updating PID file [失败]/DB/Admin.pid). 3>根据上面的/backup里面备份的数据进行恢复 [root@Admin ~]# mv /backup/mysql/* /data/DB/ [root@Admin ~]# ls /data/DB/ auto.cnf db02 ib_logfile1 mysql-bin.000001 mysql-bin.000004 mysql-bin.000007 mysql-bin.000010 test binlog ibdata1 login mysql-bin.000002 mysql-bin.000005 mysql-bin.000008 mysql-bin.index db01 ib_logfile0 mysql mysql-bin.000003 mysql-bin.000006 mysql-bin.000009 performance_schema 4>重新启动 [root@Admin ~]# chown mysql. /data/DB/ -R [root@Admin ~]# service mysqld restart 这里权限更改了如果启动还是报错的话,查看下是否mysql进程还存在,如果存在,将其kill掉再重启就OK [root@Admin ~]# mysql -p123 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | binlog | | db01 | | db02 | | login | | mysql | | performance_schema | | test | +--------------------+ rows in set (0.00 sec)
Automatisieren Snapshot-Backup mylvmbackup
1. Installieren Sie die entsprechende Software
2. Zwei Backup-Methoden
1>mylvmbackup xxx Terminal-Backup
2>Ändern Sie die Konfigurationsdatei, um die entsprechenden Parameter anzugeben
#!/bin/bash #LVM BackMysql back_dir=/backup/`date +%F` [ -d $back_dir ] mkdir -p $back_dir echo "flush tables with read lock; system lvcreate -n lv_mysql_s -L 50M -s /dev/vg01/lv_mysql;unlock tables;" |mysql -p123 mount /dev/vg01/lv_mysql_s /mnt/mysql/ rsync -a /mnt/mysql/ $back_dir if [ $? -eq 0 ];then umount /mnt/mysql/ && lvremove -f /dev/vg01/lv_mysql_s fi
Das obige ist der detaillierte Inhalt vonMySQL Was ist ein physisches Backup (lvm-snapshot). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!