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...最后一个时配置文件

  • 相关阅读:
    深入Android 【一】 —— 序及开篇
    Android中ContentProvider和ContentResolver使用入门
    深入Android 【六】 —— 界面构造
    The service cannot be activated because it does not support ASP.NET compatibility. ASP.NET compatibility is enabled for this application. Turn off ASP.NET compatibility mode in the web.config or add the AspNetCompatibilityRequirements attribute to the ser
    Dynamic Business代码片段总结
    对文件的BuildAction以content,resource两种方式的读取
    paraview 3.12.0 windows下编译成功 小记
    百度网盘PanDownload使用Aria2满速下载
    netdata的安装与使用
    用PS给证件照排版教程
  • 原文地址:https://www.cnblogs.com/wxl-dede/p/5054678.html
Copyright © 2011-2022 走看看