mydumper - 备份恢复工具

news2024/10/6 18:36:34

文章目录

  • 介绍
    • 部署安装
    • 功能
  • 参数详解
    • mydumper
    • myloader
    • 配置文件
  • 实际示例
    • 操作
    • 性能验证
  • 补充
    • definer
    • lock
  • 总结
  • 相关链接


介绍

部署安装

# 当前最新 release
wget https://github.com/mydumper/mydumper/releases/download/v0.14.4-8/mydumper-0.14.4-8.el7.x86_64.rpm

# 安装
rpm -ivh mydumper-0.14.4-8.el7.x86_64.rpm

功能

  • 支持全库导出

  • 支持指定库导出

  • 支持指定表导出

  • 支持按正则匹配名称进行导出

  • 支持多线程导入、导出

  • 支持单事务备份

  • 导出函数、存储过程

  • 支持 checksum 和行号统计(备份后输出到metadata文件中)

  • 支持备份视图(备份数据同时备份视图)

  • 支持备份存储过程(需要开启参数)

  • 支持单独备份表结构(导出参数设置),支持只恢复表结构(导入参数设置)


参数详解

mydumper

# 连接相关
-u, --user                            # 用户名
-p, --password					      # 直接输入密码
-a, --ask-password				      # 终端获取密码
-h, --host 127.0.0.1                  # 指定地址
-P, --port 3306                       # 指定端口
-S, --socket                          # 指定socket文件
-C, --compress-protocol               # 压缩连接
-t, --threads 8				          # 指定线程

# 指定需要备份的库、表
-B, --database thc_5000_dev5a         # 指定数据库
-T, --tables-list db.a,db.b,db.c      # 指定表列表(明确定义,非正则)
-O, --omit-from-file                  # 文件中按照 db.table 的格式按行声明(不支持正则)跳过的 库.表(优先级大于正则匹配)
-x, --regex                           # 正则表达式, 匹配 "db.table" 部分. e.g: thc_5000_dev5a\.wh_.*
--partition-regex                     # 根据"数据库分区"进行备份
--where                               # 根据查询结果进行备份, 配合 -B, -T 或 -x 对库表进行限制,只需填写条件, --where id=3
-U, --updated-since			          # 根据 update_time 进行备份

# statement 相关设置
-s, --statement-size          # 单条sql大小限制, 默认1000000,使用需调大
-r, --rows 0                  # 导出时单个sql文件的行数,0 表示没有限制

# 锁设置
--trx-consistency-only        # 单事务备份,对标 mysqldump --single-transaction 参数,刷盘后开启事务保持数据一致性
--less-locking.               # 使用线程锁,减少全局锁的加锁时间
-k, --no-locks                # 不锁
--no-backup-locks

# 对比检查相关,记录到 metadata 文件
-M, --checksum-all            # 所有
--data-checksums              # 计算并记录 数据sql sum 值 
--schema-checksums            # 计算并记录 创建sql sum值
--routine-checksums           # 计算并记录 视图、函数、触发器 sum值

# 输出相关
-o, --outputdir /backup/xx		# 输出目录
-c, --compress					# 压缩文件

# 备份可选项
-G, --triggers                # 备份触发器,默认不备份
-E, --events                  # 备份事件,默认不备份
-R, --routines                # 备份存储过程、函数,默认不备份
--views-as-tables             # 把视图当做表进行导出
-W, --no-views                # 不备份视图, 默认进行备份
-d, --no-data                 # 只备份表结构
--skip-definer                # 备份视图、函数、存储过程、事件等时不备份definer
--set-names utf8mb4			  # 指定字符集

# 处理长时间查询
--long-query-retries          # 尝试检查长时间的查询,默认0,不重试
--long-query-retry-interval   # 检查长时间查询的语句的间隔,默认60s
--long-query-guard , -l       # 长时间执行超时秒数,默认60s
--kill-long-query , -K        # 杀掉长时间的查询而不是终止dump操作

# 其他
-v, --verbose                 # 指定日志级别,0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2
-L, --logfile                 # 记录日志
--disk-limits                 # --disk-limits 100:500 当磁盘剩余空间小于100M时暂停,500M时恢复
--defaults-file               # 可指定配置文件,用于隐藏账号密码
--defaults-extra-file

myloader

-u, --user                  # 用户名
-p, --password              # 直接输入密码
-a, --ask-password          # 终端获取密码
-h, --host 127.0.0.1
-P, --port 3306
-C, --compress-protocol     # 连接就压缩

-e, --enable-binlog.        # 主从同步中, 导入数据开启 binlog 记录, 可同步到 slave
-o, --overwrite-tables      # 先 drop, 再写入

-d, --directory             # 指定恢复数据目录
-s, --source-db             # 指定恢复库名
-B, --database              # 指定恢复的库
# 比如我导出的库包括 DB_A, DB_B, DB_C, 希望将 DB_C 恢复为 DB_D,则 -s DB_C -B DB_D

--set-names utf8mb4			# 设置字符集

-T, --tables-list
-x, --regex

--skip-triggers           # 不导入 triggers
--skip-post               # 不导入 events
--no-data                 # 不导入 数据

配置文件

  • mydumper.conf

    [mydumper]
    user = root
    password = xxx
    
    [myloader]
    user = root
    password = xxx
    
  • omit.conf

    # 指定 thc_1093_his.a_log,thc_1093_his.b_log 两张表不进行备份
    thc_1093_his.a_log
    thc_1093_his.b_log
    

实际示例

操作

  • 导出
    # 指定用户名、密码、host、port,开启协议压缩,启动8线程,每个sql不限制行数,单行宽度限制10M,指定备份 thc_1093_his 库,指定字符集 utf8mb4,需要备份 routine,默认会备份视图,跳过 definer 记录,开启单事务备份,输出到 thc_1093_his 目录,sql 文件压缩存储  
    mydumper \
    # -u root -p password \
    --defaults-file ./mydumper.conf -O ./omit.conf \  # mydumper.conf 中配置账号密码,omit.conf 配置跳过的 db.table
    -C -t 8 -s 10000000 --set-names utf8mb4 -R --skip-definer --trx-consistency-only -c \  # 这行是基本不变的配置
    -h 192.168.248.75 -P 4001 -B thc_1093_his \  # 指定实例IP,实例端口,备份库(指定表或正则参考 -T 或 -x 参数)
    -o ./thc_1093_his  # 输出位置
    
  • 导入
    # 导入, 指定用户名、密码、host、port,压缩链接,开启4线程导入,不限制行, 导入同时记录binlog, 如果表存在则先drop,备份目录指定为 back_dir,指定特定库 thc_6009_bjlha, 并还原到新库 yang(还原到原库名则不需要指定)
    myloader -u root -p password -h 192.168.248.81 -P 5111 -C \
    -t 4 \
    -r 0 \
    -e -o \
    -d ./back_dir -s thc_1093_his -B yang
    
  • 文件解析
    - matedata      # 文件内容(包括所有备份内容的checksum值)
    - .sql          # 数据
    - .schema.sql   # 
    - .
    

性能验证

  • 测试环境

    • 测试主机配置信息: 16C 64G

    • 数据大小:130G(备份后大小12G)

  • 导出测试

    mysqldumpmydumper(4 thread)mydumper(8 thread)
    时间对比55min25min
    可能是由于每个线程的IO没有长时间占用,所以4线程和8线程差距不大
    23min
    1.锁相关:默认参数,–less-locking, --trx-consistency-only 不同参数备份差距不大
    2. --rows 可以适当减少单个文件块的行数,提高效率可以到20分钟内
    资源对比-400%(内存无大量占用)800%(内存无大量占用)
  • 导入测试

    mysqldumpmydumper(4 thread)mydumper(8 thread)
    时间对比2h30min1h50m2h10min

补充

definer

  • 没有 --skip-definer 参数
    在这里插入图片描述
  • 有 --skip-definer 参数
    在这里插入图片描述
  • 使用 root 用户导入,且不对 definer 进行定义(由于不支持指定 definer,如果需要修改,参考链接中有相关内容)
    在这里插入图片描述

lock

  • 默认

    • 主线程 FLUSH TABLES WITH READ LOCK, 施加全局只读锁,以阻止DML语句写入,保证数据的一致性

    • 读取当前时间点的二进制日志文件名和日志写入的位置并记录在metadata文件中,以供即使点恢复使用

    • N个(线程数可以指定,默认是4)dump线程 START TRANSACTION WITH CONSISTENT SNAPSHOT; 开启读一致的事务

    • dump non-InnoDB tables, 首先导出非事务引擎的表

    • 主线程 UNLOCK TABLES 非 事务引擎备份完后,释放全局只读锁

    • dump InnoDB tables, 基于 事务导出InnoDB表

    • 事务结束

  • –less-locking

    • 主线程 FLUSH TABLES WITH READ LOCK (全局锁)

    • Dump线程 START TRANSACTION WITH CONSISTENT SNAPSHOT;

    • LL Dump线程 LOCK TABLES non-InnoDB (线程内部锁)

    • 主线程 UNLOCK TABLES

    • LL Dump线程 dump non-InnoDB tables

    • LL DUmp线程 UNLOCK non-InnoDB

    • Dump线程 dump InnoDB tables


总结

  • 由于是多线程操作,如果只有单表大效果不明显,多表大瓶颈转移到磁盘IO
  • 建议导入时使用导出线程数设置的一半,同时考虑磁盘IO瓶颈

相关链接

  • Github
  • MySQL全量数据备份-mydumper | StoneDB
  • mydumper安装和使用-蒲公英云
  • mysql如何修改所有的definer - 泽锦 - 博客园
  • –less-lock 和 --trx-consistency-only

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/555296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 之 firewalld 防火墙

目录 firewalld概述firewalld 与 iptables 的区别:firewalld 区域的概念firewalld防火墙预定义了9个区域:firewalld 数据处理的流程 firewalld防火墙的配置方法:永久保存配置 firewalld概述 firewalld防火墙是Centos7系统默认的防火墙管理工具&#xff…

数据分析与预处理常用的图和代码

1.训练集和测试集统计数据描述之间的差异作图&#xff1a; def diff_color(x):color red if x<0 else (green if x > 0 else black)return fcolor: {color}(train.describe() - test.describe())[features].T.iloc[:,1:].style\.bar(subset[mean, std], alignmid, colo…

国内做校园信息化的龙头企业公司有哪些?

随着数字化转型的加速&#xff0c;越来越多的学校开始寻求校园信息化的解决方案&#xff0c;相比于传统信息化模式&#xff0c;国内有哪些做校园信息化做得比较好的企业&#xff1f;他们采用的又是什么样的方式&#xff1f; 一文带你了解&#xff0c;零代码平台搭建校园信息化…

Android 14 又来了?别扶!抬起我来吧!

Android 14 又来了&#xff1f;别扶&#xff01;抬起我来吧&#xff01; 大家好&#xff0c;好久不见&#xff0c;从去年底写完年终总结之后就再也没有更新过文章&#xff0c;之前最多也就间隔一两个月时间&#xff0c;但这回间隔时间确实有点长&#xff0c;基本快半年了&…

每日一练 | 网络工程师软考真题 Day7

1、如果希望别的计算机不能通过ping命令测试效劳器的连通情况&#xff0c;可以 &#xff08;1&#xff09; 。如果希望通过默认的Telnet端口连接效劳器&#xff0c;那么下面对防火墙配置正确的选项是 &#xff08;2&#xff09; 。 &#xff08;1&#xff09; A&#xff0…

为什么说2023年是学华为认证的最佳时机?学华为认证有什么优势?

华为认证数通方向2016年以前叫数通&#xff0c;2017年开始改为R&S&#xff08;路由交换&#xff09;&#xff0c;2021年正式升级为Datacom。 新版数通认证更聚焦于技术在现实工作场景中的应用&#xff0c;并融入了大量新技术新应用&#xff0c;实用价值更高。 通过系统学…

用java带你了解IO模型

目录 1.BIO1.1 简述1.2 代码示例1.3优点和缺点1.4 思考 2. NoBlockingIO2.1 简述2.2 代码示例2.3 优点和缺点2.4 思考 3. NIO&#xff08;NewIO&#xff09;3.1 简述3.2 代码示例3.3 优点和缺点3.3 思考 4. 扩展select/poll、epoll4.1 简述4.2 select/poll4.3 epoll4.4 扩展话题…

设计模式之【备忘录模式】,“后悔药”是可以有的

文章目录 一、什么是备忘录模式1、备忘录模式使用场景2、备忘录模式优缺点3、备忘录模式的三大角色4、白箱备忘录和黑箱备忘录5、思考&#xff1a;备份频率快&#xff0c;备份对象大的备忘录应该如何设计 二、实例1、备忘录模式的一般写法2、使用栈管理富文本编辑器3、游戏状态…

【Linux】shell编程—sed编辑器

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、sed编辑器1.sed工作流程2.sed工作场景3.sed常用选项 二、sed编辑器基本用法1.打印操作2.打印行号3.增加操作4.插入操作5.替换操作7.字符转换 一、sed编辑器 sed…

RabbitMQ(2)

一、MQ的问题 基于上篇存在的问题 1. 问题说明 MQ在分布式项目中是非常重要的&#xff0c; 它可以实现异步、削峰、解耦&#xff0c;但是在项目中引入MQ也会带来一系列的问题。 今天我们要解决以下几个常见的问题&#xff1a; 消息可靠性问题&#xff1a;如何确保消息被成功送…

编译flink1.6源码并打包成CDH6.3.2的parcel

说明&#xff1a;scala &#xff1a;2.12&#xff0c;maven:3.6.1, java:1.8&#xff0c;macOS 1、指定scala,maven的环境变量 sudo vi ~/.bash_profile export PATH$PATH:$M2_HOME/bin:/Users/admin/Documents/softwares/scala-2.12.17/bin2、克隆flink代码 git clone https…

smb配置,详细图文及配置

samba :网络文件共享服务 ​ Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件&#xff0c;而SMB是Server Message Block的缩写&#xff0c;即为服务器消息块&#xff0c;SMB主要是作为Microsoft的网络通讯协议&#xff0c;后来Samba将SMB通信协议应用到了Linux系统上…

【Android入门到项目实战-- 11.4】—— ExoPlayer视频播放器框架的详细使用

目录 什么是ExoPlayer 一、基本使用 1、添加依赖项 2、布局 3、Activity 二、自定义播放暂停 1、首先如何隐藏默认的开始暂停和快进&#xff1f; 2、自定义 三、控制视频画面旋转和比例调整 四、全屏放大和缩小 1、双击视频放大缩小 2、按钮放大缩小 五、完整的实现…

JS 面试整理

1.JS运行机制&#xff08;EventLoop事件循环&#xff09; Js是单线程&#xff0c;每次只能执行一项任务&#xff0c;其他任务按照顺序排队等待&#xff0c;使用eventloop来解决线程阻塞的问题。在执行栈过程中&#xff0c;有同步代码和异步代码时&#xff0c;首先会执行完所有…

Linux学习笔记 --- 初识Linux

PC操作系统&#xff0c;也就是个人电脑所使用的操作系统 一. 操作系统概述 导学&#xff1a;了解操作系统的作用&#xff0c;了解常见的操作系统有哪些 1.1 硬件和软件 说白了&#xff0c;硬件就是你看得见&#xff0c;摸得到的。 1.2 操作系统 1.3 常见操作系统 PC操作系统…

分布式消息队列-RabbitMQ从入门到精通

文章目录 分布式消息队列认知提升分布式消息队列&#xff08;MQ&#xff09;应用场景分布式消息队列&#xff08;MQ&#xff09;应用思考点MQ本身的一些思考点业界主流的分布式消息队列&#xff08;MQ&#xff09;MQ的技术选型关注点初识 JMS 与其专业术语 RabbitMQ四种集群架构…

程序员:面试造火箭,入职拧螺丝?太难了···

刚开始工作的时候&#xff0c;我也想不通这个问题&#xff0c;甚至很鄙视这种现象。后面当了面试官&#xff0c;做到了公司中层管理&#xff0c;也会站在公司以及行业角度去重新思考这个问题。 为什么这种现象会越来越普遍呢&#xff1f;尤其在 IT 行业愈加明显。 面试看的是…

抖音SEO源码开发:技术分享与实践

抖音SEO源码开发一直是数字营销领域的重要技术之一。它可以帮助企业在搜索引擎结果页面上获得更好的排名&#xff0c;从而吸引更多的用户。为了帮助更多的企业提升在抖音平台上的曝光率&#xff0c;开发者们分享了自己的技术并进行了实践。 在抖音SEO源码开发的过程中&#xf…

Pytho制作自动更换壁纸程序,快来给你的电脑开启无限换肤吧

目录 前言环境使用:需导入的模块一. 获取壁纸二. 设置自动更换尾语 &#x1f49d; 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 环境使用: Python 3.8 解释器 Pycharm 编辑器 需导入的模块 import re # 正则表达式模块 import requests >>> pip install r…

oracle数值型函数大全(不包含三角函数)

--数值型函数大全 --1.abs(x) 返回x的绝对值 select abs(-2.1) from dual; --2.mod(x,y) 取余 select mod(5,2) from dual; --3.sign(x) 返回正负值 --x>o,则返回1 select sign(10) from dual; --x0,则返回0 select sign(0) from dual; --x<0,则返回-1 sele…