zoukankan      html  css  js  c++  java
  • Mysql增量备份之Mysqldump&Mylvmbackup

     Mysqldump增量备份

     

    使用Mysqldump备份工具实现完全备份,并结合二进制日志实现增量备份。

    特点:逻辑备份工具、支持InnoDB热备份、MyISAM温备份;备份与恢复较慢

    一、备份数据库

    mysqldump -uroot -p123.com --lock-all-tables --flush-logs --databases test > /mysqlbackup/test_`date +%F`.sql
    --lock-all-tables:备份时为所有表请求加锁
    --flush-log:备份之前刷新日志
    
    

    二、备份二进制文件

    在test库中创建一个表,增加数据,模拟增量备份,并查看当前二进制日志位置。

    cp /usr/local/mysql/data/mysqld-bin.00000* /mysqlbackup
    
    
    mysql> create table abc (number INT(11), name varchar(100));
    mysql> show master status;
    +-------------------+----------+--------------+------------------+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +-------------------+----------+--------------+------------------+
    | mysqld-bin.000004 | 221 | | |
    +-------------------+----------+--------------+------------------+
    
    

    三、查看二进制文件和完整备份后LOG_POS值在什么位置

    less /mysqlbackup/test_2013-09-29.sql  #前几行可以看到在106
    -- Position to start replication or point-in-time recovery from
    -- CHANGE MASTER TO MASTER_LOG_FILE='mysqld-bin.000005', MASTER_LOG_POS=106;
    
    

    四、二进制增量备份

    1>.完整备份后到现在备份:

    mysqlbinlog --start-position=106 /var/lib/mysql/mysqld-bin/mysql/mysqld-bin.000005 > /mysqlbackup/test_incremental.sql
    --start-position:从哪个位置开始导出二进制日志
    --stop-position:从哪个位置结束,到末尾可以不指定
    
    

    2>.向数据库添加一条记录,然后删除数据库,再恢复到当前数据

    mysql>create table abd (number INT(1),name varchar(10));
    mysql> show master status;   #查看二进制所在位置
    +-------------------+----------+--------------+------------------+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +-------------------+----------+--------------+------------------+
    | mysqld-bin.000005 | 527 | | |
    +-------------------+----------+--------------+------------------+
    
    

    五、恢复数据到当前数据,需要恢复完整备份+增量备份+增量备份后删除之前的二进制文件

    mysqlbinlog /var/lib/mysql/mysqld-bin.000005  #查看二进制,看在什么时候做的,文件最后下面看出在446
    # at 446
    #130929 11:04:16 server id 1 end_log_pos 527 Query thread_id=10 exec_time=0 error_code=0
    SET TIMESTAMP=1380467056/*!*/;
    drop database test
    /*!*/;
    
    

    六、导出之前删除数据库至增量备份后的二进制文件

    mysqlbinlog --start-position=220 --stop-position=446 /var/lib/mysql/mysqld-bin.000005 > /mysqlbackup/test_446.sql
    mysql> source/backupn/test_2013-09-06.sql #恢复完整备份
    mysql> source/backup/test_incremental.sql #恢复增量备份
    mysql> source/backup/test_446.sql #恢复增量后至删除前的数据
    mysql> use test;
    mysql> show tables;查看数据恢复成功!
     

    Mylvmbackup快速完整备份

    mylvmbackup 是一个工具,用于快速创建完整的物理备份MySQL服务器的数据文件,备份数据时,将锁定 MySQL 所有的表,并将缓存中数据写到磁盘,然后执行 LVM 快照后解锁。

    使用LVM逻辑卷快照功能实现几乎热血备份的完全备份,并结合二进制日志实现增量备份。

    特点:几乎接近于热备份、物理备份、备份与恢复较快。

    必须mysql数据库存放目录是LVM卷下,如果要做增量备份,bin-log日志也要在LVM卷下,而且LVM卷要有空间给快照备份。

    修改mysql和bin-log日志位置:

    vi /etc/my.cnf
    datadir=/myvg/data
    bin-log=/myvg/binlog/mysqld-bin
    
    

    mysql有以下几种日志:
    错误日志: -log-err
    查询日志: -log
    慢查询日志: -log-slow-queries
    更新日志: -log-update
    二进制日志: -log-bin

    一、创建LVM卷

    1>.创建物理卷
    pvcreate /dev/sdb

    2>.创建卷组
    vgcreate myvg /dev/sdb

    3>.创建逻辑卷
    lvcreate -n mylv -L 19G myvg

    4>.格式化文件系统
    mkfs.ext4 /dev/myvg/mylv
     
    5>.挂载使用
    mount /dev/myvg/mylv/ /data
    
    

    二、安装使用Mylvmbackup

    wget http://www.lenzg.net/mylvmbackup/mylvmbackup-0.14-0.noarch.rpm
    yum install -y perl-TimeDate perl-Config-IniFiles perl-DBD-MySQL #安装依赖包
    rpm -ivh mylvmbackup-0.14-0.noarch.rpm
    
    

     1.修改配置文件

    vi /etc/mylvmbackup.conf
    [mysql]
    user=root
    password=123.com
    host=localhost
    port=3306
    socket=/tmp/mysql.sock
    mycnf=/etc/my.cnf
    [lvm]
    vgname=myvg #卷组的名字
    lvname=mylv #逻辑卷的名字
    lvsize=5G #备份时创建的snapshot的大小
    [fs]
    mountdir=/opt/snap_mnt #snapshot的mount位置
    backupdir=/backup #备份打包后的存放位置
    relpath=mysqldata #如果只是想备份逻辑卷下的某个目录的话,则要指出来
    [tools]
    lvcreate=/usr/sbin/lvcreate
    lvremove=/usr/sbin/lvremove
    mount=/bin/mount
    tar=/bin/tar
    umount=/bin/umount
    [misc]
    prefix=backup #备份打包文件的命名前缀
    suffix=_mysql #定义备份文件名后缀

    2.备份数据库并验证备份文件

    root@202 ~]# mylvmbackup
    20130906 11:55:33 Info: Running: lvremove -f /dev/myvg/mysql_snap
    Logical volume "mysql_snap"successfully removed
    20130906 11:55:34 Info: DONE: Removing snapshot
    出现以上信息表示备份成功,最后删除快照卷!
    
    [root@202 ~]# ls /mysqlbackup/
    backup-201309029_115532_mysql.tar.gz
  • 相关阅读:
    Java实现 LeetCode 784 字母大小写全排列(DFS)
    Java实现 LeetCode 784 字母大小写全排列(DFS)
    Java实现 LeetCode 783 二叉搜索树节点最小距离(遍历)
    Java实现 LeetCode 783 二叉搜索树节点最小距离(遍历)
    Java实现 LeetCode 783 二叉搜索树节点最小距离(遍历)
    Java实现 LeetCode 781 森林中的兔子(分析题)
    一种机制,与js类似
    图片热区
    我对 aspnetpager和repeater以及查询条件的封装
    我对webform的整改。
  • 原文地址:https://www.cnblogs.com/lfl17718347843/p/11908699.html
Copyright © 2011-2022 走看看