mysqlpump 水深无声 2021-12-11 18:23 107阅读 0赞 ### 文章目录 ### * 简介 * 特性 * 常用选项 * 实例 * * * 实例1:多线程备份 * 实例2:多线程备份 * 实例3:多线程备份 * 实例4:备份用户 * 参考文档 # 简介 # mysqlpump是逻辑备份的工具,生成一组SQL语句,可以执行这些SQL语句来还原数据库和表。它dump一个或多个MySQL数据库,以便备份或传输到另一个服务器。 mysqlpump的并行导出功能的架构为:队列+线程,允许有多个队列,每个队列下有多个线程,而一个队列可以绑定1个或者多个数据库。但是,对于每张表的导出只能是单个线程的 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0w4MzUzMTEzMjQ_size_16_color_FFFFFF_t_70] (图片来自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选项大致相同,多了几个并行复制,压缩相关的选项 <table> <thead> <tr> <th>常用选项</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>–add-drop-database</td> <td>CREATE DATABASE之前加个DROP DATABASE语句</td> </tr> <tr> <td>–add-drop-table</td> <td>CREATE TABLE之前加个DROP TABLE语句</td> </tr> <tr> <td>–add-drop-user</td> <td>CREATE USER之前加个DROP USER语句</td> </tr> <tr> <td>–all-databases, -A</td> <td>备份所有数据库</td> </tr> <tr> <td>–compress,-C</td> <td>启动压缩,默认</td> </tr> <tr> <td>–compress-output=algorithm</td> <td>指定压缩算法,LZ4或者ZLIB,LZ4的解压方式<code>shell> lz4 -d input_file output_file</code> ZLIB的解压方式<code>shell> openssl zlib -d < input_file > output_file</code></td> </tr> <tr> <td>–default-parallelism=N</td> <td>每个并行处理队列默认的线程数,默认为2,如果<code>--parallel-schemas</code>设置了并行度,那么会覆盖这个默认值,当 <code>--default-parallelism=0</code>也没有<code>--parallel-schemas</code>选项,mysqlpump作为单线程进程运行,不创建任何队列。5.7.11之前不支持与<code>--single-transaction</code>一起用</td> </tr> <tr> <td>–defer-table-indexes</td> <td>在备份过程中,延迟为每个表创建索引,直到数据备份完成,如果是InnoDB存储引擎,则延迟创建二级索引,默认此参数开启,禁用可以指定<code>--skip-defer-table-indexes</code></td> </tr> <tr> <td>–exclude-databases=db_list</td> <td>不备份的数据库列表,用逗号分隔</td> </tr> <tr> <td>–extended-insert=N</td> <td>一条INSERT语句默认会包含多行,如果要指定每个INSERT语句中包含的行数,可以设置这个值,默认为250,值为1时,每一行会有一个INSERT语句</td> </tr> <tr> <td>–host=<em>host_name</em>, -h <em>host_name</em></td> <td>指定主机名</td> </tr> <tr> <td>–include-databases=<em>db_list</em></td> <td>需要备份的数据库列表,逗号分隔</td> </tr> <tr> <td>–parallel-schemas=[<em>N</em>:]<em>db_list</em></td> <td>创建一个用于处理数据库的队列,db_list表示备份的数据库,逗号分隔,N表示该队列使用N线程,如果N未给出则使用–default-parallelism 此参数设置的值</td> </tr> <tr> <td>–password[=<em>password</em>], -p[<em>password</em>]</td> <td>用户密码</td> </tr> <tr> <td>–routines</td> <td>备份存储过程</td> </tr> <tr> <td>–set-gtid-purged=<em>value</em></td> <td>控制是否向<code>SET @@GLOBAL.gtid_purged</code>输出添加语句来启用对写入备份文件的GTID信息的控制,如果是用于备份,或是用于创建第二个从库则设置为ON,如果是为了恢复误删的数据等,则设置为OFF,如果不指定默认为AUTO,判断规则是如果备份服务器启用了GTID则设置为ON</td> </tr> <tr> <td>–single-transaction</td> <td>设置隔离级别模式 为RR(可重复读),仅对支持事务的引擎有用,不支持事务的表不保证状态一致。备份过程不要有DDL,否则可能会导致mysqlpump的select操作检索内容的时候获取错误的状态信息退出(备份的时候会先show create table 然后select,如果两个语句中执行了ddl,会导致报错信息,表定义发生变化,)</td> </tr> <tr> <td>–triggers</td> <td>备份触发器</td> </tr> <tr> <td>–user=<em>user_name</em>, -u <em>user_name</em></td> <td>用户</td> </tr> <tr> <td>–watch-progress</td> <td>显示进度信息,默认打开</td> </tr> <tr> <td>–users</td> <td>备份用户,默认不备份用户,如果只备份用户<code>shell> mysqlpump --exclude-databases=% --users</code></td> </tr> </tbody> </table> > 可以使用通配符,%表示匹配0个或多个任意字符的字符串,\_表示匹配单个任意字符 # 实例 # ### 实例1:多线程备份 ### 建立一个队列来处理 `db1`和`db2`另一个排队的过程`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:多线程备份 ### 队列`db1`和`db2` 使用五个线程,队列`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_dev.mysql.com_doc_refman_5.7_en_mysqlpump.html] * [https://yq.aliyun.com/articles/602572][https_yq.aliyun.com_articles_602572] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0w4MzUzMTEzMjQ_size_16_color_FFFFFF_t_70]: /images/20211211/b55b3896a54b413ba51479f53393676c.png [https_dev.mysql.com_doc_refman_5.7_en_mysqlpump.html]: https://dev.mysql.com/doc/refman/5.7/en/mysqlpump.html [https_yq.aliyun.com_articles_602572]: https://yq.aliyun.com/articles/602572
相关 使用 mysqlpump 进行 Mysql 逻辑备份 在本文中,我们将使用mysqlpump来演示 Mysql 逻辑备份。 有几种方法可以备份 MySQL 数据。 它们是: – 1) 物理备份 2) 逻辑备份 物理 待我称王封你为后i/ 2023年10月01日 08:01/ 0 赞/ 7 阅读
相关 备份-mysqlpump mysqlpump备份与mysqldump相似,但它提供了一些其他功能,常用的有以下几种。 并行备份 在备份的时候可以指定线程的数量,从而起到加速备份的作用。如 ╰+攻爆jí腚メ/ 2023年02月28日 04:19/ 0 赞/ 5 阅读
相关 MySQL 5.7 mysqlpump 备份工具 MySQL5.7之后多了一个备份工具:mysqlpump。它是mysqldump的一个衍生,mysqldump就不多说明了,现在看看mysqlpump到底有了哪些提升,可以查看 客官°小女子只卖身不卖艺/ 2022年05月15日 10:23/ 0 赞/ 230 阅读
还没有评论,来说两句吧...