zoukankan      html  css  js  c++  java
  • lvm快照备份mysql

    快照备份原理(从其他博客看的):

    原理:通过lvm快照给lvm真身拍个照片,当lvm真身发送改变时,lvm快照把lvm真身改变之前的内容存放在快照上,这样在lvm快照有效的这段时间内,我们看到的lvm快照上的内容始终是lvm真身在创建lvm快照时内容,通过备份lvm快照即可达到在线备份lvm真身的目的。需要注意的是,当lvm快照比lvm真身小时,若lvm真身发生的改变大于lvm快照,则lvm快照将变得无法读取而失效; 若lvm快照大于等于lvm真身,则不会发生前面的情况。
    当一个snapshot创建的时候,仅拷贝原始卷里数据的元数据(meta- data)。创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里,因此这个原理的实现叫做写时复制(copy-on- write)。
    在写操作写入块之前,CoW将原始数据移动到snapshot空间里,这样就保证了所有的数据在snapshot创建时保持一致。而对于snapshot的读操作,如果是读取数据块是没有修改过的,那么会将读操作直接重定向到原始卷上,如果是要读取已经修改过的块,那么就读取拷贝到snapshot中的块。

    lvm快照备份几乎热备:   

    前提:
            1、数据文件要在逻辑卷上;
            2、此逻辑卷所在卷组必须有足够空间使用快照卷;
            3、数据文件和事务日志要在同一个逻辑卷上;

    [root@localhost mydata]# df -h
    Filesystem                    Size  Used Avail Use% Mounted on
    /dev/mapper/VolGroup-lv_root  4.0G  3.7G  125M  97% /
    tmpfs                         935M     0  935M   0% /dev/shm
    /dev/sda1                     485M   39M  421M   9% /boot
    /dev/mapper/myvg-mylv         886M  151M  691M  18% /mydata           //这是mysql数据库文件和二进制日志文件还有151M可用空间
    [root@localhost mydata]# 
    

     过程:

      1.给mysql表加锁

    mysql> flush tables with read lock; 
    Query OK, 0 rows affected (0.00 sec)
    

     2、通过另一个终端,保存二进制日志文件及相关位置信息;

    [root@localhost mydata]# mysql -e 'show master statusG'>/backup/master.info
    *************************** 1. row ***************************
                File: mysql-bin.000030
            Position: 472
        Binlog_Do_DB: 
    Binlog_Ignore_DB: 
    

     3、给/mydata创建快照卷,名字为back_test

    [root@localhost mydata]# lvcreate -L 30M -s -n back_test /dev/mapper/myvg-mylv 
      Rounding up size to full physical extent 32.00 MiB
      Logical volume "back_test" created
    

    4、释放锁,插入数据
               

    mysql> insert into student (name) value ('david');
    ERROR 1223 (HY000): Can't execute the query because you have a conflicting read 
    
    lock
    mysql> unlock tables;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> insert into student (name) value ('david2');
    Query OK, 1 row affected, 1 warning (0.00 sec)
    
    mysql> insert into student (name) value ('david3');
    Query OK, 1 row affected, 1 warning (0.00 sec)
    
    mysql> commit
        -> ;
    Query OK, 0 rows affected (0.05 sec)
    

    5、挂载快照卷,备份,删除快照卷

    [root@localhost mydata]# mount -r /dev/myvg/back_test /mnt/
    [root@localhost mnt]# cp -rfia ./*  /tmp/ 
    [root@localhost /]# lvremove /dev/myvg/back_test
    Do you really want to remove active logical volume back_test? [y/n]: y
      Logical volume "back_test" successfully removed
    [root@localhost /]#

    6、增量备份二进制日志,如果有多个事务可以根据472对应的时间点来备份

    [root@localhost mydata]# mysqlbinlog --start-position=472 mysql-bin.000030 mysql-bin.000031 >/root/lv_back.sql
      //根据时间点备份多个事务,注意时间格式
    [root@localhost mydata]# mysqlbinlog --start-time='2015-08-06 17:32:08' mysql-bin.000030 mysql-bin.000031 >/root/lv_back.sql


     7.模拟mysql损坏

    [root@localhost /]# rm /mydata/* -rf
    [root@localhost /]# service mysqld stop
    MySQL server PID file could not be found!                  [FAILED]

     8.恢复

      可以不复制二进制日志,可以把二进制日志删除 

    [root@localhost mydata]# cp -riaf /tmp/*  /mydata/      //将文件复制到mysql的数据文件位置
    chown -R mysql:mysql   /mydata/*                //如果/mydata下的属主不是 mysql权限,需要修改为mysql权限
    
     mysql>set sql_log_bin=0                                   //根据情况看是否关闭
     mysql> . /root/lv_back.sql                  //还原二进制日志事务

    查看热备后执行的事务是否恢复

    mysql> select * from student;
    +----+--------+-----+------+
    | id | name   | age | Cid  |
    +----+--------+-----+------+
    |  1 | sean   |  22 |    6 |
    |  5 | alice  |   0 | NULL |
    |  6 | tom    |   0 | NULL |
    |  7 | david2 |   0 | NULL |
    |  8 | david3 |   0 | NULL |
    +----+--------+-----+------+




  • 相关阅读:
    leetcode 347. Top K Frequent Elements
    581. Shortest Unsorted Continuous Subarray
    leetcode 3. Longest Substring Without Repeating Characters
    leetcode 217. Contains Duplicate、219. Contains Duplicate II、220. Contains Duplicate、287. Find the Duplicate Number 、442. Find All Duplicates in an Array 、448. Find All Numbers Disappeared in an Array
    leetcode 461. Hamming Distance
    leetcode 19. Remove Nth Node From End of List
    leetcode 100. Same Tree、101. Symmetric Tree
    leetcode 171. Excel Sheet Column Number
    leetcode 242. Valid Anagram
    leetcode 326. Power of Three
  • 原文地址:https://www.cnblogs.com/kankanhua/p/4709301.html
Copyright © 2011-2022 走看看