ITPub博客

首页 > 数据库 > MySQL > MySQL多线程逻辑备份与恢复

MySQL多线程逻辑备份与恢复

MySQL 作者:haide1014 时间:2014-11-01 09:43:39 0 删除 编辑

MySQL多线程逻辑备份

  • Mydumper简介

    Mydumper是一个多线程的MySQL逻辑备份工具.

    • 逻辑备份速度非常快(跟mysqldump相比)
    • myisam和innodb表的一致性备份
    • 如果不是使用myisam表,几乎无”锁”(no locking)
    • 每个表都是导出到独立的文件
    • 快速压缩,通常mydumper压缩的文件比XtraBackup压缩的文件小3~5倍
  • Mydumper安装
    # yum install cmake glib2-devel zlib zlib-devel pcre-devel gcc-c++
    # wget -c https://launchpad.net/mydumper/0.5/0.5.2/+download/mydumper-0.5.2.tar.gz
    # tar zxvf mydumper-0.5.2.tar.gz
    # cd mydumper-0.5.2
    # cmake .
    # make && make install
    
  • Mydumper使用

    Mydumper通过使用多线程同时dump多个表或是表的一部分.它有很多选项参数mydumper --help.
    以下是其中三个重要参数:

    --database:指定要导出备份的数据库名
    --threads:指定使用线程的数目.通常可设置为CPU的核数目,当然有时也会设置更多.
    --rows:指定每个"块"(chunk)的行(记录)数目.具体值的设置取决于数据表的记录数目.
    

    一个备份脚本例子dbdump.sh:

    #!/bin/bash 
    
    MYDUMPER=`which mydumper`
    DIR_BACKUP=/backup
    DB_HOST=192.168.1.190
    DB_PORT=3306
    DB_NAME=sakila
    DB_USER=root
    DB_PASS=123456
    
    FDAY=`date "+%F"`
    DB_DUMP=$DIR_BACKUP/$DB_NAME.$FDAY
    
    $MYDUMPER \
        --database=$DB_NAME \
        --host=$DB_HOST \
        --port=$DB_PORT \
        --user=$DB_USER \
        --password=$DB_PASS \
        --outputdir=$DB_DUMP \
        --rows=500000 \
        --compress \
        --build-empty-files \
        --threads=2 \
        --compress-protocol \
        --kill-long-queries
    

    注:由于Mydumper不处理MySQL的视图,触发器和存储过程,因此使用mydumper去导出schema并不可靠.
    实际生产环境中,建议mydumper仅用于导出数据(使用--no-schemas),而通过mysqldump来导出schema.
    一个简单的备份schema脚本:schemadump.sh

    #!/bin/bash
    mysqldumpbin="mysqldump -uroot -p123456 -h192.168.1.190 -P3306"
    DB_NAME="sakila"
    
    $mysqldumpbin --single-transaction -d -R --skip-triggers $DB_NAME > /data/vbackup/mydumper/schema.sql
    $mysqldumpbin --single-transaction -d -t $DB_NAME > /data/vbackup/mydumper/post-schema.sql
    

MySQL多线程逻辑恢复

  • Myloader

    上面在安装Mydumper的同时也安装了Myloader.

    使用Myloader进行恢复的脚本例子dbload.sh:

    #!/bin/bash 
    
    MYLOADER=`which myloader`
    DB_HOST="192.168.1.190"
    DB_PORT=3306
    DB_NAME="sakila2"
    DB_USER="root"
    DB_PASS="123456"
    
    DB_DUMP="/data/backup/sakila.2013-04-29"
    
    $MYLOADER \
        --database=$DB_NAME \
        --host=$DB_HOST \
        --port=$DB_PORT \
        --user=$DB_USER \
        --password=$DB_PASS \
        --directory=$DB_DUMP \
        --queries-per-transaction=50000 \
        --threads=6 \
        --compress-protocol \
        --verbose=3
    

    注:
    若出现类似错误:”/usr/local/bin/myloader: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory”
    解决办法:来源:http://www.51itstudy.com/30191.html

    # locate libmysqlclient.so.18
    /usr/local/mysql/lib/libmysqlclient.so.18
    /usr/local/mysql/lib/libmysqlclient.so.18.1.0
    # echo "/usr/local/mysql/lib" >> /etc/ld.so.conf
    # ldconfig 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14431099/viewspace-1316648/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    11
  • 访问量
    54230