zoukankan      html  css  js  c++  java
  • mysql 基于LVM快照的备份

     

    lvm原理:

    当源数据改变的时候呢,cow就会记录下改变的值,当从快照读出的时候,如果数据没有改变那还是读取原来lvm的数据,如果数据改变了,那么该读取cow上面的数据。所以原来的lvm,也就是创建快照之前的lvm和现在cow快照上的数据是一致的。

    优点

    几乎是热备,不需要停mysql服务器,但是在执行快照时,依然要加上锁虽然时间很短

    备份速度快

    无需使用其他软件

    缺点

    无法预计服务停止时间,上锁时间,取决于上锁前执行最长的查询语句

    数据如果分布在多个物理卷上就可能复杂的多。

    创建快照前的准备,一般生产环境中,mysql在开始提供服务的时候,其文件数据都该保存在lvm卷中。实验中我们先创建lvm然后把mysql的数据目录mv到lvm中,这样就可以模拟生产环境了。

    创建lvm

    /etc/init.d/mysqld stop    ##先停数据库

    pvcreate /dev/sdb

    vgcreate sqlbak /dev/sdb

    vcreate -L 500M -n sqlbck_lv sqlbak

    mkfs.ext4 /dev/sqlbak/sqlbck_lv

    mount /dev/sqlbak/sqlbck_lv /mnt/

    mv /usr/local/mysql/* /mnt

    /* 在移动之前,或者在创建lvm的时候,根据mysql数据目录的大小来创建lvm

    我在创建的时候就忽略这点,所以我只能扩容了

    lvcreate -L +300 /dev/sqlbak/sqlbck_lv sqlbak

    缩减也复习下:

    /etc/init.d/mysqld stop

    umount /dev/sqlbak/sqlbck_lv            ##先卸载!

    e2fsck -f /dev/sqlbak/sqlbck_lv

    resize2fs /dev/sqlbak/sqlbck_lv 800M

    lvreduce -L 800M /dev/sqlbak/sqlbck_lv

    */

    /etc/init.d/mysqld start

    现在正式开始备份

    step1: 锁表,保证数据的一致性。flush table with read lock;

    step2:查看master二进制当前的状态,以便slave的复制使用,或者其他的恢复使用。show master status;

    step3: 为mysql数据目录所在的lvm做快照 lvcreate -s -n sqlbak_snap -L 100M /dev/sqlbak/sqlbck_lv

    step4: 解锁unlock tables;

    此时快照创建完毕,挂载快照到一个目录下,就可以读取里面的数据。当然也可以mv到其他的目录下用来恢复。

    为了测试呢:我们先在mysql 插入一条数据。然后在mount 之前的快照,把mysql的数据目录设成挂载快照的挂载点,重新启动mysql,查看数据是否是之前的的数据。

    最后:恢复完成之后,删除快照:lvremove /dev/sqlbak/sqlbak_snap

    一般的错误都是权限的问题,第一反应看日志!

    使用mylvmbackup备份数据。其本质就是对上面的操作进行封装

    需要两点注意的是:mysql必须运行在lvm上;lvm有空余的空间用来生成临时的快照

    依赖性真tm多

    yum install make perl perl-Config-IniFiles perl-TimeDate perl-DBD-MySQL

    wget http://www.lenzg.net/mylvmbackup/mylvmbackup-0.13.tar.gz

    tar zxvf mylvmbackup-0.13.tar.gz

    cd mylvmbackup-0.13

    make install

    which mylvmbackup

    备份 MyISAM

    mylvmbackup --user=root --password=yourrootsqlpassword --mycnf=/etc/mysql/my.cnf --vgname=server1 --lvname=mysql --backuptype=tar

    --lvmsize=100M(快照大小) --backupdir=/path/backup

    备份InnoDB:

    mylvmbackup --user=root --password=yourrootsqlpassword --innodb_recover --skip_flush_tables --mycnf=/etc/mysql/my.cnf --vgname=server1 --lvname=mysql --backuptype=tar

    备份的目录一个tar包 包含:三个文件目录,一个backup数据目录,.pos二进制锁表时的日志文件名和position。 backup-cnf...最后一个时配置文件

  • 相关阅读:
    【今日CS 视觉论文速览】Mon, 7 Jan 2019
    文章汇总页面
    【MarkDown】转义字符
    hdu 4678 Mine 博弈论
    hdu 4294 Multiple
    hdu 4291 A Short problem
    hdu 4672 Present Day, Present Time 博弈论
    hdu 3544 Alice's Game 博弈论
    hdu 3389 Game 博弈论
    hdu 2147 kiki's game 博弈论
  • 原文地址:https://www.cnblogs.com/wxl-dede/p/5054678.html
Copyright © 2011-2022 走看看