mydumper批量备份工具

mydumper介绍

  • mydumper负责导出 MySQL 数据库的一致备份
  • myloader从 mydumper 读取备份,连接到目标数据库并导入备份。
    mydumper的github地址:https://github.com/mydumper/mydumper
    mydumper 主要有以下几点特性:
  • 支持多线程导出数据,速度更快。
  • 支持一致性备份。
  • 支持将导出文件压缩,节约空间。
  • 支持多线程恢复。
  • 支持以守护进程模式工作,定时快照和连续二进制日志。
  • 支持按照指定大小将备份文件切割。 数据与建表语句分离。

安装

第一种方法:在github上直接下载rpm包进行安装:

$ wget https://github.com/mydumper/mydumper/releases/download/v0.12.5-3/mydumper-0.12.5-3.el7.x86_64.rpm
$ rpm -ivh mydumper-0.12.5-3.el7.x86_64.rpm

第二种方法:yum安装:

$ release=$(curl -Ls -o /dev/null -w %{url_effective} https://github.com/mydumper/mydumper/releases/latest | cut -d'/' -f8)
$ yum install https://github.com/mydumper/mydumper/releases/download/${release}/mydumper-${release:1}.el7.x86_64.rpm

mydumper使用

安装完成后出现两个可执行程序:mydumper和 myloader

运行mydumper --help查看选项参数:

-B, --database                # 指定导出的数据库
-o, --outputdir               # 要将文件输出到的目录
-d, --no-data                 # 不导出表数据
-D, --daemon                  # 启用守护程序模式
-L, --logfile                 # 要使用的日志文件名,默认情况下使用标准输出
--disk-limits                 # 如果确定没有足够的磁盘空间,则设置暂停和恢复的限制。接受以下值:'<resume>:<pause>',以MB为单位。例如:100:500 当只有100MB可用时将暂停,如果有500MB可用时将恢复
-t, --threads                 # 要使用的线程数,默认为4
-C, --compress-protocol       # 对MySQL连接使用压缩
-V, --version                 # 显示程序版本并退出
-v, --verbose                 # 输出的详细性,0=无提示,1=错误,2=警告,3=信息,默认值2
--defaults-file               # 使用特定的默认文件
--ssl                         # 使用SSL连接
--ssl-mode                    # 与服务器连接的所需安全状态:DISABLED, PREFERRED, REQUIRED, VERIFY_CA, VERIFY_IDENTITY
--key                         # 密钥文件的路径名
--cert                        # 证书文件的路径名
--ca                          # 证书颁发机构文件的路径名
--capath                      # 包含PEM格式的受信任SSL CA证书的目录的路径名
--cipher                      # 用于SSL加密的允许密码列表
--tls-version                 # 服务器允许加密连接使用哪些协议
--stream                      # 一旦文件被写入,它将通过标准输出流
--no-delete                   # 流完成后,它不会删除文件
-O, --omit-from-file          # 包含数据库列表的文件。要跳过的表条目,每行一个(在应用regex选项之前跳过)
-T, --tables-list             # 要备份的表,以逗号隔开(不排除regex选项)
-h, --host                    # 连接的主机地址
-u, --user                    # 用户名
-p, --password                # 密码
-a, --ask-password            # 提示输入用户密码
-P, --port                    # 端口
-S, --socket                  # 用于连接的UNIX域套接字文件
-x, --regex                   # 正则表达式
-G, --triggers                # 导出触发器。默认情况下,不会转储触发器
--split-partitions            # 将分区转储到单独的文件中。此选项覆盖分区表的--rows选项。
--max-rows                    # 在估计表之后,限制每个块的行数,默认为1000000
--no-check-generated-fields   # 与生成的字段相关的查询将不会被执行。如果生成了列,则会导致恢复问题
--order-by-primary            # 如果不存在主键,则按主键或唯一键对数据排序
-E, --events                  # 转储事件。缺省情况下,不转储事件
-R, --routines                # 转储存储过程和函数。默认情况下,它不转储存储过程或函数
-W, --no-views                # 不转储视图
-M, --checksum-all            # 转储所有元素的校验和
--data-checksums              # 用数据转储表校验和
--schema-checksums            # 转储模式表和视图创建校验和
--routine-checksums           # 转储触发器、函数和例程校验和
--tz-utc                      # 在转储的顶部设置TIME_ZONE='+00:00',以允许在服务器具有不同时区的数据或数据在不同时区的服务器之间移动时转储时间戳数据,默认情况下使用——skip-tz-utc禁用。
--complete-insert             # 使用包含列名的完整INSERT语句
-z, --tidb-snapshot           # 用于TiDB的快照
-N, --insert-ignore           # 使用INSERT IGNORE转储行
--replace                     # 使用REPLACE转储行
--exit-if-broken-table-found  # 如果遇到损坏的表则退出
--success-on-1146             # 如果表不存在,则不增加错误计数和警告而不是关键
--use-savepoints              # 使用保存点减少元数据锁定问题,需要SUPER特权
-s, --statement-size          # 尝试INSERT语句的大小(以字节为单位),默认为1000000
-F, --chunk-filesize          # 将表拆分为输出文件大小的块。该值的单位是MB
-e, --build-empty-files       # 即使表中没有可用的数据,也要构建转储文件
--where                       # 只转储选定的记录
-i, --ignore-engines          # 逗号分隔的要忽略的存储引擎列表
--csv                         # 自动启用--load-data并设置变量以CSV格式导出。
-r, --rows                    # 尝试将表分成这样多行的块。这个选项关闭--chunk-filesize
-c, --compress                # 压缩输出文件
--exec                        # 命令使用文件作为参数执行
--long-query-retries          # 重试检查长查询,默认为0(不重试)
--long-query-retry-interval   # 重新尝试长查询检查之前的等待时间(以秒为单位),默认为60
-l, --long-query-guard        # 以秒为单位设置长查询定时器,默认为60秒
--tidb-snapshot               # 用于TiDB的快照
-U, --updated-since           # 使用Update_time只转储最近U天更新的表
-k, --no-locks                # 不执行临时共享读锁。警告:这将导致不一致的备份
-Y, --all-tablespaces         # 转储所有表空间。
--no-backup-locks             # 不使用Percona备份锁
--lock-all-tables             #  使用LOCK TABLE代替FTWRL
--less-locking                # 最小化InnoDB表的锁时间。
-m, --no-schemas              # 不备份表数据
-K, --kill-long-queries       # 终止长时间运行的查询(而不是中止)
--set-names                   # 设置名称,使用风险自负,默认二进制

导出后文件命名规则大致如下:

dbname-schema-create.sql:建库语句。
dbname-schema-post.sql:包含事件、存储过程及函数创建语句(若存在则有该文件)。
dbname.tbname.metadata:记录这个表的行数。
dbname.tbname-schema.sql:此表的创建语句。
dbname.tbname-schema-triggers.sql:创建触发器语句(若该表存在触发器 则有此文件)。
dbname.tbname.sql:该表的插入数据语句(若该表为空 则不存在此文件)。
dbname.viewname-schema.sql:创建视图语句(只列举出视图字段)。
dbname.viewname-schema-view.sql:创建视图的真正语句。
metadata:记录开始及结束备份的时间以及二进制日志位置。

常用命令
备份全部数据库:

# 备份全部数据库 
mydumper -u root -p 123456 -o /mysql_backup/all/
# 全量备份 会备份 mysql、sys 系统库及其他自建库

# 备份全部数据库 包含触发器、事件、存储过程及函数
mydumper -u root -p 123456 -G -R -E -o /mysql_backup/all2/

# 备份指定库
mydumper -u root -p 123456 -G -R -E -B db1 -o /mysql_backup/db1/

# 使用正则 排除系统库
mydumper -u root -p 123456 -G -R -E --regex '^(?!(mysql|sys))' -o /mysql_backup/all3

# 备份指定表
mydumper -u root -p 123456 -B db1 -T tb1,tb2 -o /mysql_backup/tb/

# 只备份表结构
mydumper -u root -p 123456 -d -B db1 -o /mysql_backup/nodata/

# 只备份表数据
mydumper -u root -p 123456 -m -B db1 -o /mysql_backup/noschema/

# 压缩备份某个表
mydumper -u root -p 123456 -B db1 -T tb1 -c -o /mysql_backup/compress/

#按照条件备份
mydumper -u root -p -B 数据库 -T 数据表 --where="条件" -c -o /mysql_backup/compress/
#按照行数备份
mydumper -u root -p -B 数据库 -T 数据表 --where="条件  LIMIT 条数" -c -o /mysql_backup/compress/

myloader使用

使用myloader --help查看选项参数:

-d, --directory                              # 要导入的转储文件的目录
-q, --queries-per-transaction                # 每个事务的查询数,默认为1000
-o, --overwrite-tables                       # 如果存在表则删除
--append-if-not-exist                        # 添加IF NOT EXISTS到建表语句中
-B, --database                               # 还原到的数据库(目标库)
-s, --source-db                              # 被还原的数据库(源数据库),-s db1 -B db2,表示源库中的db1数据库,导入到db2数据库中。
-e, --enable-binlog                          # 启用还原数据的二进制日志记录
--innodb-optimize-keys                       # 创建没有索引的表,并在最后添加索引
--set-names                                  # 设置名称,使用风险自负,默认二进制
-L, --logfile                                # 要使用的日志文件名称,默认使用标准输出
--purge-mode                                 # 指定截断模式,可以是:NONE, DROP, TRUNCATE and DELETE
--disable-redo-log                           # 禁用REDO_LOG,然后启用它,不检查初始状态
-r, --rows                                   # 将INSERT语句拆分为这么多行。
--max-threads-per-table                      # 每个表使用的最大线程数,默认为4
--skip-triggers                              # 跳过触发器。默认情况下,它导入触发器
--skip-post                                  # 跳过事件、存储过程和函数。默认情况下,它导入事件、存储过程或函数
--no-data	                                   # 不导入表数据
--serialized-table-creation                  # 重新创建表将以每次一个线程的方式执行
--resume                                     # 期望在备份目录中找到恢复文件,并只处理那些文件
--pmm-path                                   # 默认值将是/usr/local/percona/pmm2/collectors/textfile-collector/high-resolution
-t, --threads                                # 要使用的线程数,默认为4
-C, --compress-protocol                      # 在MySQL连接上使用压缩
-V, --version                                # 显示程序版本并退出
-v, --verbose                                # 输出的详细性,0=无提示,1=错误,2=警告,3=信息,默认值2
--no-delete                                  # 不会在流完成后删除文件
-O, --omit-from-file                         # 包含数据库列表的文件。要跳过的表项,每行一个(在应用regex选项之前跳过)
-T, --tables-list                            # 要备份的表,以逗号隔开(不排除regex选项)
-h, --host                                   # 连接的主机地址
-u, --user                                   # 用户名
-p, --password                               # 密码
-a, --ask-password                           # 提示输入用户密码
-P, --port                                   # 端口
-S, --socket                                 # 用于连接的UNIX域套接字文件
-x, --regex                                  # 正则表达式
--skip-definer                               # 从CREATE语句中移除DEFINER。缺省情况下,不修改语句

常用命令:

从备份中恢复指定的库:
$ myloader -u root -p 123456 -s testdb -o -d /backup/mysql/

导入时开启binlog:
$ myloader -u root -p 123456 -e -s testdb -o -d /backup/mysql/

将源库的testdb导入到备库的test01库:
$ myloader -u root -p 123456 -B test01 -s testdb -o -d /backup/mysql/

导入特定的表:
在导出的目录中选择metadata文件和需要单独导入的表的结构文件和数据文件移到一个新目录下,最好提前建好库表,否则需要把建库表的文件一起移动到新目录,移动到新目录后可以使用myloader指定新目录进行恢复数据。

使用java调起命令

		//拼写myDumper执行命令
        String[] cmds = new String[]{
                "mydumper", "-u", "root", "-p", "123456", "-B", "db1", "-T", "tb", "-o", "/mysql_backup/tb/"
        };
        try {
            //java调起myDumper命令
            Runtime.getRuntime().exec(cmds);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

注意:

  • -t, --threads # 要使用的线程数,默认为4这里的线程数是值备份多个表执行的线程数如果对单个表进行备份的话线程数设置是不起作用的
  • 物理机效率大于虚拟机
  • 命令使用String[]数组拼接
基于JAVA的医院门诊信息管理系统设计与实现 摘 要 医院门诊信息管理系统是一个基于Internet的应用系统,它是一个面对当前的医院门 诊管理工作基本还处于手工和半信息自动化处理状态而应运而生的一个基于Internet的 一个信息自动化的系统,整个系统从符合操作简便、界面友好、灵活、实用、安全的要求 出发,完成预约、诊断、开具处方、保存病历管理的全过程。医疗事业单位只需具备访 问Internet的条件即可在系统发布的站点上进行医疗门诊的管理。在图型化的人机界 面中完成日常的医疗门诊管理工作.一方面摆脱了时间和空间的限制,另一方面有效的解 决的数据共享的问题。经过实际使用证明,本文所设计的医院门诊信息管理系统可以满 足医院在门诊管理方面的需要。 关键词:JSP;医院门诊;信息管理系统 JSP-BASED HOSPITAL OUTPATIENT INFORMATION MANAGEMENT SYSTEM  ABSTRACT Hospital outpatient information management system is an Internet-based application system. It is an Internet-based automated information system that solves the outpatient medical management of the basic work is still in the manual and semi-automated processing of information. The entire system is simple, friendly interface, flexible, practical and safe, and complete the entire process of booking, diagnosis, prescribing and medical records management preservation. Medical institutions only need visit the Internet can use the system for the release site medical clinic management. Using the pattern of the man-machine interface complete routine outpatient medical management. While out of time and space constraints, on the other hand, it is an effective solution to the data sharing problem. Through practical show that JSP-based hospital outpatient information management system to meet the hospital in-patient management needs. Key Words: JSP; Hospital Outpatient; Information Management System 1 绪论 医院门诊信息管理系统是信息管理系统在医院门诊部门中的应用。随着Internet技 术的发展,其被广泛应用与各行各业,医院门诊部门是其一个重要的应用领域。伴随着医 院的改革,医院信息化进程的加速,建立基于Web的医院门诊信息管理系统显得尤为重要 。 1.1 课题研究现状分析 随着医疗卫生事业的发展,医院改革的深入,信息的有效、高效利用,已受到人们的 关注。充分利用现代科技手段,加强各种信息的利用开发,是医院信息管理的一个重要 内容,也是当今医院的需要。目前的医院仅仅把医院的信息管理系统作为微机工具系统, 而没有发挥其管理的真正功能;系统分散设计,各部门独立实施,没有考虑信息的关联和 共享,存在信息孤岛现象;医院管理错综复杂,从而形成了医院信息管理系统数据的多样 化,数据量大等特点[1]。 通过本次医院门诊信息系统的设计,解决医院系统中各种信息管理的集成问题,使医院 系统的各种信息管理一体化。同时,了解医院门诊的流程,把握信息管理系统开发概念, 掌握动态网站技术,熟悉系统开发的进程,做到会用相关工具设计和开发相关系统,并实 现。 1.2 技术发展趋势 随着Internet技术的普及和发展基本上各种不同的操作系统平台上都有相应的We b浏览器程序,这就使得医院门诊信息管理系统具有非常广泛的平台兼容性。客户端仅需 一个Web浏览器程序,不再需
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值