Heim  >  Artikel  >  Datenbank  >  MySQL Was ist ein physisches Backup (lvm-snapshot)

MySQL Was ist ein physisches Backup (lvm-snapshot)

青灯夜游
青灯夜游nach vorne
2018-10-27 16:15:073117Durchsuche

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 snapshot
rrree

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!

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