暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL备份利器:Mydumper

DBA懒人笔记 2021-04-12
1723

摘要:

        MySQL跨平台迁移,字符集转换重导库,大版本升级,误操作大表误删除恢复...... 妙用无穷!


1、工具介绍

C++开发的多线程的MySQL一致性逻辑备份工具。

github地址:https://github.com/maxbube/mydumper

官方文档:https://centminmod.com/mydumper.html

优点:好多好多,逻辑性的分库分表备份可操作性强,多线程加速成倍减少迁移时间(物理备份是有局限性的)。

缺点:非要挑刺就是不支持windows,不过可以用linux跳板机远程操作,还有就是非官方出品,不过同样是C++编写业内也使用多年了。

工具分两个命令:

    mydumper备份导出

    myloader恢复导入


2、安装

#依赖包

    yum install glib2-devel mysql-devel zlib-devel pcre-devel -y

    #rpm安装

      rpm -ivh opt/mydumper-0.9.5-2.el7.x86_64.rpm


      3、mydumper重要备份参数说明



      -B, --database 指定需要备份的DB,默认全部
      -T, --tables-list   指定需要备份的表列表逗号分开(非正则)
      -O, --omit-from-file包含数据库列表的文件。要跳过的表条目,每行一个(在应用regex选项之前跳过)
      -o, --outputdir备份文件输出的目录
      -s, --statement-size备份文件中INSERT语句的大小(以字节为单位), 默认 1000000
      -r, --rows 备份时对大表进行行数切割大小,与--chunk-filesize只能使用其一
      -F, --chunk-filesize备份时对大表进行存储切割大小,默认MB
      -c, --compress压缩输出文件
      -e, --build-empty-files只备份表结构
       -x, --regex

      使用正则匹配需要备份的表

      -i, --ignore-engines 配置忽略的引擎列表逗号隔开
      -N, --insert-ignore备份数据生成INSERT IGNORE的语法
      -m, --no-schemas备份中不生成创建schema 语句
      -d, --no-data不备份数据
      -G, --triggers  备份 triggers
      -E, --events备份 events
      -R, --routines 备份 procedures 和functions
      -W, --no-views不备份 VIEWs
      -k, --no-locks 不建议生产使用,可能导致非一致性备份
      -l, --long-query-guard设置长SQL运行等待时间(秒),默认60s,超时退出备份
      -K, --kill-long-queries 设置长SQL运行等待时间(秒),默认60s,超时kill掉长SQL继续备份
      -D, --daemon 启用守护进程模式,备份完成后进程不会退出需要注意,结合--snapshot-interval可以设置成定时任务
      -I, --snapshot-interval每次备份相隔的时间以分钟为单位,默认60,必须在--daemon的模式下
      -L, --logfile 备份日志文件路径,默认不使用而是用stout标准输出
      --tz-utc 设置时区,默认使用 --skip-tz-utc 关闭时区设置 
      --lock-all-tables使用 LOCK TABLE 替代 FTWRL
      -U, --updated-since指定备份U天前更新过的表
      --trx-consistency-only 如果只包含innodb建议加上,可以减少锁表时间,含有myisam重要数据表则建议不加,可能造成其数据不一致,binlog位置不准
      --complete-insert 备份文件中使用包含列名的完整插入语句,建议添加,兼容新增字段的情况
      -h, --host  
      -u, --user
      -p, --password 
      -a, --ask-password 
      -P, --port 
      -S, --socket
      -t, --threads并行备份的线程数,默认4
      -C, --compress-protocol在MySQL连接上使用压缩
      -v, --verbose  输出信息的级别, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2



      4、全量备份测试

      4.1、使用参数说明

      #--trx-consistency-only 因为只含有innodb表,减少lock time

      #-G -E -R 备份triggers,events,procedures ,functions 不加-W 默认备份view

      #-t 4   根据CPU和生产高低峰情况合理分配

      #-L 日志推荐输出到文件,方便后续验证结果和排错

      #-o 备份文件目录

      #-v 方便查看备份进度,建议输出到log file中

      mydumper -u root -p root123 -P 3306 -S tmp/mysql.sock  --trx-consistency-only  --complete-insert -t 4 -v 3 -c -G -E -R -L data/backup/mydumper.log -o data/backup/

        [root@localhost backup]#mydumper -u root -p root123 -P 3306 -S tmp/mysql.sock  --trx-consistency-only  --complete-insert -t 4 -v 3 -c -G -E -R -L data/backup/mydumper.log -o data/backup/
        [root@localhost backup]#
        [root@localhost backup]# ps -ef | grep mydumper
        root     25087     1 99 11:27 ?        00:00:25 mydumper -u root -p root123 -P 3306 -S /tmp/mysql.sock --trx-consistency-only --complete-insert -t 4 -v 3 -c -G -E -R -L /data/backup/mydumper.log -o /data/backup/
        root 25109 18917 0 11:27 pts/0 00:00:00 grep --color=auto mydumper


        4.2、备份完成信息

        tail -f /data/backup/mydumper.log

        2020-08-08 11:39:05 [INFO] - Thread 3 shutting down

        2020-08-08 11:39:05 [INFO] - Thread 4 shutting down

        2020-08-08 11:39:18 [INFO] - Thread 2 shutting down

        2020-08-08 11:41:59 [INFO] - Thread 1 shutting down

        2020-08-08 11:41:59 [INFO] - Finished dump at: 2020-08-08 11:41:59


        4.3、一致性metadata信息

        cat /data/backup/last_dump/metadata

        Started dump at: 2020-08-08 14:35:39

        SHOW MASTER STATUS:

            Log: mysql-bin.000303

            Pos: 235

            GTID:45fc66c4-95c5-11ea-b29a-0050569f78b2:1-12907,

        dba0c3df-2dc1-11e9-8a0c-0050569f2390:1-13686780

        Finished dump at: 2020-08-08 11:41:59


        4.4、基础后台运行脚本

          vi full_mydumper_backup.sh
          #!/bin/bash
          nohup mydumper -u root -p root123 -P 3306 -S /tmp/mysql.sock  --trx-consistency-only  --complete-insert -t 4 -v 3 -c -G -E -R -L /data/backup/mydumper.log -o /data/backup/ &


          5、myloader恢复重要参数

          -d, --directory 导入文件目录
          -q, --queries-per-transaction每个事务中包含的SQL语句,默认1000
          -o, --overwrite-tables覆盖已存在的表
          -B, --database目标数据库名
          -s, --source-db 源端数据库名
          -e, --enable-binlog 恢复操作记录binlog
          -h, --host
          -u, --user
          -p, --password
          -a, --ask-password
          -P, --port
          -S, --socket
          -t, --threads 
          -C, --compress-protocol在MySQL连接上使用压缩
          -v, --verbose输出信息的级别, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2


          6、全量恢复测试

          基础恢复脚本

            vi import_myloader.sh
            #!/bin/bash
            nohup myloader -u root -p root123 -P 3306 -S /tmp/mysql.sock -d /data/backup/last_dump -t 4 -o -v 3 > myloader.log 2>&1 &


            7、工作原理流程图


            文章转载自DBA懒人笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论