zoukankan      html  css  js  c++  java
  • MySQL 逻辑备份工具

    简介:

    Mydumper、Myloader 是一个第三方的、开源的 MySQL 逻辑备份工具。

    支持多线程,比起 mysqldump 要快很多,也能解决 innobackupex 备份工具对 MyISAM 引擎备份的不便。

    多线程快速逻辑备份,恢复速度不咋地,支持快照功能。

    呃,虽然这样好、那样好,但如果单库、又很大的时候,备份还是选择 innobackupex 物理备份吧,速度就是快。

    下载地址:https://launchpad.net/mydumper/0.9/0.9.1/+download/mydumper-0.9.1.tar.gz

    一、安装 Mydumper

    shell > yum -y install gcc gcc-c++ glib2-devel pcre-devel zlib-devel mysql-devel
    
    shell > cd /usr/local/src; wget https://launchpad.net/mydumper/0.9/0.9.1/+download/mydumper-0.9.1.tar.gz
    shell > tar zxf mydumper-0.9.1.tar.gz
    shell > cd mydumper-0.9.1
    shell > cmake . && make && make install
    
    shell > /usr/local/bin/mydumper --help
    /usr/local/bin/mydumper: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
    
    shell > find / -name "libmysqlclient.so.18"
    /usr/local/src/mysql-5.5.52/libmysql/libmysqlclient.so.18
    /usr/local/mysql-5.5.52/lib/libmysqlclient.so.18
    
    shell > ln -s /usr/local/mysql-5.5.52/lib/libmysqlclient.so.18 /usr/lib64/

    二、Mydumper 全备

    shell > /usr/local/bin/mydumper --help
    
    -B, --database           指定备份的数据库,不指定时为备份全库(除 information_schema、performance_schema)
    -T, --tables-list        指定备份的表,逗号分隔
    -o, --outputdir          指定备份目录
    -c, --compress           压缩备份输出
    -e, --build-empty-files  即使表中无数据也备份成一个文件
    -x, --regex              支持正则表达式 db.table,如 --regex '^(?!(mysql|test))' 不备份 mysql、test 库
    -m, --no-schemas         不备份表结构
    -d, --no-data            不备份数据
    -G, --triggers           备份 triggers
    -E, --events             备份 events
    -R, --routines           备份存储过程跟函数
    -k, --no-locks           不适用共享读锁,会导致数据不一致
    -D, --daemon             以守护进程的方式启动
    -I, --snapshot-interval  快照间隔时间,默认 60-h, --host
    -u, --user
    -p, --password
    -P, --PORT
    -S, --socket
    -t, --threads            启动几个线程,默认 4
    -C, --compress-protocol  MySQL 连接上使用压缩协议,建议远程备份时使用
    ...                      还有一些不常用的指令 通过 --help 获取
    shell > /usr/local/bin/mydumper -u xxxx -p xxxx -e -c -B db_xxx -o /data/backup_db/2017-07/db_xxx_05  # 目录 db_xxx_05 会自动创建
    
    shell > ls -1 /data/backup_db/2017-07/db_xxx_05
    db_xxx-schema-create.sql.gz
    db_xxx.table_1.sql.gz
    db_xxx.table_1-schema.sql.gz
    ...
    metadata
    
    # 备份目录下会生成如上几种类型的文件,可以使用 gunzip 解压后读取、分析
    # db_xxx-schema-create.sql.gz  备份的数据库创建语句,也就是说恢复时不需要事先创建数据库
    # db_xxx.table_1.sql.gz        数据表数据文件
    # db_xxx.table_1-schema.sql.gz 数据表结构文件
    
    shell > cat /data/backup_db/2017-07/db_xxx_05/metadata 
    Started dump at: 2017-07-05 14:57:56
    SHOW MASTER STATUS:
        Log: mysql-bin.000024
        Pos: 760137384
        GTID:(null)
    
    Finished dump at: 2017-07-05 15:01:20
    
    # metadata 记录了备份时刻的 MASTER 信息(如果备份的是从库,还会记录 SLAVE STATUS),备份开始时间、结束时间

    三、Myloader 全备恢复

    shell > /usr/local/bin/myloader --help
    
    -d, --directory           指定备份数据存放目录
    -o, --overwarite-tables   如表存在,则覆盖写入
    -B, --database            指定恢复的数据库
    -s, --source-db
    -e, --enable-binlog 
    -h, --host
    -u, --user
    -p, --password
    -P, --PORT
    -S, --socket
    -t, --threads
    -C, --compress-protocol
    ...
    shell > /usr/local/bin/myloader -u xxxx -p xxxx -B db_xxx -d /data/backup_db/2017-07/db_xxx_05
    
    # 这是恢复单库到一个新的 MySQL(不需要提前创建数据库),不指定 -B 时,恢复备份中的所有数据
    # 恢复单表时,解压后直接 source .sql 即可
    # 恢复到原库时,需要添加 -o 参数,覆盖写入
    # 机器性能允许的情况下,添加 -t 参数,开启多个并行线程恢复

    四、如何加快恢复速度 ?

    shell > mysql -u xxxx -p xxxx
    
    mysql > show processlist;
    
    | 26 | root | localhost | baofeng_tv | Query   |    2 | update | INSERT INTO `std_tj_sinideo` VALUES
           |
    | 27 | root | localhost | baofeng_tv | Query   |    2 | update | INSERT INTO `std_alum_kwords` VALUES
    
    | 28 | root | localhost | baofeng_tv | Query   |    1 | update | INSERT INTO `std_epode_qyi` VALUES
    
    | 29 | root | localhost | baofeng_tv | Query   |    2 | update | INSERT INTO `std_alum_stams` VALUES

    # 默认情况下,可以看到有 4 个线程在插入数据,一个线程负责一张表,执行完换下一张 ( myloader -u -p -B -d )
    # 19G 的数据库恢复了 82分22秒,简直不能忍

    shell > /usr/local/bin/mydumper -u root -c -e -B baofeng_tv -F 500 -o /data/backup_db/baofeng_tv_06 -t 8
    shell > /usr/local/bin/myloader -u root -B baofeng_tv -o -d /data/backup_db/baofeng_tv_06 -t 8

    # -F 按大小拆分备份,恢复的时候也并没什么效果,备份速度挺快,恢复不咋地

    # 那个,快照咋搞 ?

  • 相关阅读:
    Git操作命令2-在Git仓库里管理文件历史-分支操作
    mvvmlight框架搭建VS版本不同导致的问题
    wpf命令详解
    wpf触发器
    wpf控件模型
    wpf中Interaction.Behaviors详解
    wpf附加属性详解
    wpf依赖属性概述
    wpf体系结构
    MySql5.7下载安装配置教程
  • 原文地址:https://www.cnblogs.com/wangxiaoqiangs/p/7122867.html
Copyright © 2011-2022 走看看