mysqlpump

文章目录

  • 简介
  • 特性
  • 常用选项
  • 实例
      • 实例1:多线程备份
      • 实例2:多线程备份
      • 实例3:多线程备份
      • 实例4:备份用户
  • 参考文档

简介

mysqlpump是逻辑备份的工具,生成一组SQL语句,可以执行这些SQL语句来还原数据库和表。它dump一个或多个MySQL数据库,以便备份或传输到另一个服务器。

mysqlpump的并行导出功能的架构为:队列+线程,允许有多个队列,每个队列下有多个线程,而一个队列可以绑定1个或者多个数据库。但是,对于每张表的导出只能是单个线程的

mysqlpump_第1张图片
(图片来自https://yq.aliyun.com/articles/602572)

5.7.11之前不支持 --single-transaction则不允许并行,必须设置--default-parallelism=0,所以最好5.7.11之后的版本再用这个工具

特性

  • 基于表并行备份数据库和数据库中的对象,加快备份过程(mysqldump是单线程备份,速度很慢)
  • 更细粒度的控制数据库和数据库对象(表,存储过程,用户账户)的备份
  • 备份生成用户账户的语句(create user , grant) 而不是直接插入mysql系统数据库中
  • 可以将备份出来的数据进行压缩,算法可以选择LZ4和ZLIB。
  • 查看备份进度(–watch-progress)
  • 对于备份文件的应用,InnoDB会先把行都插入完成再建立二级索引,而不是先建立二级索引再插入行,后者会导致插入的过程中需要维护二级索引。

常用选项

mysqlpump跟mysqldump选项大致相同,多了几个并行复制,压缩相关的选项

常用选项 描述
–add-drop-database CREATE DATABASE之前加个DROP DATABASE语句
–add-drop-table CREATE TABLE之前加个DROP TABLE语句
–add-drop-user CREATE USER之前加个DROP USER语句
–all-databases, -A 备份所有数据库
–compress,-C 启动压缩,默认
–compress-output=algorithm 指定压缩算法,LZ4或者ZLIB,LZ4的解压方式shell> lz4 -d input_file output_file ZLIB的解压方式shell> openssl zlib -d < input_file > output_file
–default-parallelism=N 每个并行处理队列默认的线程数,默认为2,如果--parallel-schemas设置了并行度,那么会覆盖这个默认值,当 --default-parallelism=0也没有--parallel-schemas选项,mysqlpump作为单线程进程运行,不创建任何队列。5.7.11之前不支持与--single-transaction一起用
–defer-table-indexes 在备份过程中,延迟为每个表创建索引,直到数据备份完成,如果是InnoDB存储引擎,则延迟创建二级索引,默认此参数开启,禁用可以指定--skip-defer-table-indexes
–exclude-databases=db_list 不备份的数据库列表,用逗号分隔
–extended-insert=N 一条INSERT语句默认会包含多行,如果要指定每个INSERT语句中包含的行数,可以设置这个值,默认为250,值为1时,每一行会有一个INSERT语句
–host=host_name, -h host_name 指定主机名
–include-databases=db_list 需要备份的数据库列表,逗号分隔
–parallel-schemas=[N:]db_list 创建一个用于处理数据库的队列,db_list表示备份的数据库,逗号分隔,N表示该队列使用N线程,如果N未给出则使用–default-parallelism 此参数设置的值
–password[=password], -p[password] 用户密码
–routines 备份存储过程
–set-gtid-purged=value 控制是否向SET @@GLOBAL.gtid_purged输出添加语句来启用对写入备份文件的GTID信息的控制,如果是用于备份,或是用于创建第二个从库则设置为ON,如果是为了恢复误删的数据等,则设置为OFF,如果不指定默认为AUTO,判断规则是如果备份服务器启用了GTID则设置为ON
–single-transaction 设置隔离级别模式 为RR(可重复读),仅对支持事务的引擎有用,不支持事务的表不保证状态一致。备份过程不要有DDL,否则可能会导致mysqlpump的select操作检索内容的时候获取错误的状态信息退出(备份的时候会先show create table 然后select,如果两个语句中执行了ddl,会导致报错信息,表定义发生变化,)
–triggers 备份触发器
–user=user_name, -u user_name 用户
–watch-progress 显示进度信息,默认打开
–users 备份用户,默认不备份用户,如果只备份用户shell> mysqlpump --exclude-databases=% --users

可以使用通配符,%表示匹配0个或多个任意字符的字符串,_表示匹配单个任意字符

实例

实例1:多线程备份

建立一个队列来处理 db1db2另一个排队的过程db3。所有队列都使用2个线程

mysqlpump --parallel-schemas=db1,db2 --parallel-schemas=db3 --set-gtid-purged=ON --include-databases=db1,db2,db3 > pump.sql

实例2:多线程备份

建立一个队列来处理 db1,建立4个线程,使用一致性读,执行过程会先设置隔离级别为RR,执行FLUSH TABLES WITH READ LOCK,然后连接4个线程进去开启一致性视图进行备份 。这些线程启动START TRANSACTION WITH CONSISTENT SNAPSHOT之后解锁表,对于不支持事务的表,使用lock和unlock,如果不--include-databases=db1指定备份库,默认全库备份

mysqlpump --parallel-schemas=db1 --default-parallelism=4 --set-gtid-purged=ON --single-transaction  --include-databases=db1  > pump.sql

实例3:多线程备份

队列db1db2 使用五个线程,队列db3使用三个线程,默认队列使用默认的两个线程。

mysqlpump --parallel-schemas=5:db1,db2 --parallel-schemas=3:db3

实例4:备份用户

mysqlpump --exclude-databases=% --users

很多参数都与mysqldump一样,这里就省略了

参考文档

  • https://dev.mysql.com/doc/refman/5.7/en/mysqlpump.html
  • https://yq.aliyun.com/articles/602572

你可能感兴趣的:(数据库)