Maison  >  Article  >  base de données  >  MySQL Qu'est-ce qu'une sauvegarde physique (lvm-snapshot)

MySQL Qu'est-ce qu'une sauvegarde physique (lvm-snapshot)

青灯夜游
青灯夜游avant
2018-10-27 16:15:073129parcourir

Cet article vous présente une introduction à ce qu'est la sauvegarde physique MySQL (lvm-snapshot). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

lvm-snapshot (sauvegarde de l'outil)

Avantages :

  • Veille presque chaude (verrouillez la table avant de prendre l'instantané et relâchez-le immédiatement après la création)

  • Prend en charge tous les moteurs

  • Vitesse de sauvegarde Rapide

  • Pas besoin d'utiliser un logiciel commercial coûteux (c'est au niveau du système d'exploitation)

Inconvénients :

  • Peut nécessiter une collaboration entre les services (utilisez des commandes au niveau du système d'exploitation, le DBA n'a généralement pas d'autorité)

  • Impossible de prédire le temps d'interruption du service

  • Ce sera gênant si les données sont distribuées sur plusieurs volumes (pour les niveaux de stockage)

Le principe de l'instantané de volume logique

Pourquoi choisir la sauvegarde d'instantanés LVM ?

Raison : L'heure de verrouillage de la table étant incohérente, l'écriture ne peut pas être effectuée au moment du verrouillage de la table. Faites une sauvegarde instantanée de celle-ci, déverrouillez-la immédiatement une fois la sauvegarde terminée, puis le service. peut être utilisé normalement (écriture et autres opérations), par exemple Lorsque la quantité de données est importante, un instantané peut être pris immédiatement puis déverrouillé immédiatement, sans affecter l'écriture et d'autres opérations. Si vous utilisez mysqldump pour la sauvegarde, lorsque la quantité de données est importante, le temps de verrouillage de la table sera long, ce qui affectera l'efficacité.

Processus de fonctionnement

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
快照备份:
1.迁移数据到逻辑卷(不是必须,视情况而定)
2.锁表(时间)
3.给数据库所在的逻辑卷拍快照
4.解锁
5.将快照挂载到临时挂载点上
6.将快照上的所有数据拷贝到相应的备份目录里(不同主机)
7.卸载快照并删除

Exemple de sauvegarde LVM

1. Migrer les données vers des volumes logiques

Environnement : Le fichier de données n'est pas sur le volume logique, alors le fichier de données doit être migré vers le volume logique

  • 1. Créez un volume logique

[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. Migrez la base de données mysql actuelle vers le volume logique

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. Base de données de sauvegarde d'instantanés

  • 1. Ajouter un verrou en lecture à la base de données

mysql> flush table with read lock;
  • 2. Créez un instantané du volume logique où se trouve la base de données mysql

[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)
  • 3 . Déverrouillez la base de données

[root@Admin ~]# unlock tables
  • Les étapes 1 à 3 ci-dessus peuvent être combinées en une seule étape

[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
  • 4. Montez l'instantané dans le répertoire temporaire

[root@Admin ~]# mkdir /mnt/mysql && mount /dev/vg01/lv_mysql_s /mnt/mysql/
  • 5. 🎜>

[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
  • 6. Désinstallez l'instantané et supprimez

[root@Admin ~]# umount /mnt/mysql/ && lvremove /dev/vg01/lv_mysql_s
  • 7. Testez la vérification (supprimez tout ce qui se trouve dans le répertoire de données) Puis restaurez le répertoire de données sauvegardé

    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)

Organisez la sauvegarde ci-dessus dans un script + tâche planifiée Crontab pour effectuez la sauvegarde régulièrement

#!/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

Sauvegarde automatique des instantanés mylvmbackup

1. Installez le logiciel correspondant

2. Deux méthodes de sauvegarde

1>sauvegarde du terminal mylvmbackup xxx

2>Modifier le fichier de configuration pour spécifier les paramètres correspondants

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer