☘️博主介绍☘️:
✨又是一天没白过,我是奈斯,DBA一名✨
✌✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌✌️
❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣️❣️❣️
时光匆匆,转眼之间便迎来了星期五。那么今天继续带来关于mysql逻辑迁移工具的探讨—— mysqldump和mysqlpump这两种工具在参数设置上的差异 。在之前的文章中,已经对mysql逻辑迁移工具的重要性及应用场景进行了介绍。而今天将进一步细化讨论,专注于mysqldump和mysqlpump的参数对比,通过深入了解这些差异,我们将能够更好地比较和选择适合自己需求的工具。
mysqldump作为MySQL官方提供的备份工具,其参数丰富且功能强大。它允许我们通过指定不同的参数来实现不同的备份需求,比如仅备份数据库结构、全库备份等。这些参数的设置对于确保备份的完整性和恢复的效率至关重要。
而mysqlpump(假设中的工具),虽然与mysqldump在功能上有相似之处,但在参数设置上可能存在一些差异。这些差异可能体现在备份方式、数据导出格式、连接选项等方面。因此,在使用mysqlpump时,我们需要特别关注其参数文档或帮助信息,以确保正确理解和使用这些参数。
通过对比mysqldump和mysqlpump的 参数差异 ,我们可以更清晰地了解它们各自的特点和优势。例如,某些参数可能只在其中一个工具中可用,或者两个工具中相同参数的行为可能有所不同。这些差异将直接影响我们在实际使用中的选择和决策。
mysql逻辑迁移工具的介绍和案例,我会分成四篇内容内容进行讲解,四篇的内容分别如下:
- 第一篇:一文搞清mysqldump逻辑迁移工具的用法和定时全备实例
- 第二篇:一文搞清mysqlpump逻辑迁移工具的用法和定时全备实例
- 第三篇:mysqlpump和mysqldump参数区别总汇(当前篇)
- 第四篇:使用mysqldump全量+mysqlbinlog增量完成实例的时间点恢复
mysqlpump和mysqldump参数区别总汇:
功能/需求 | mysqldump参数 | mysqlpump参数 | 备注/说明 |
不导出表中的数据,只导出结构 | -d, --no-data | -d, --skip-dump-rows | |
输出导入时的错误日志 | --log-error=name | --log-error-file=name | |
将备份时二进制写入的文件和position点信息输出到sql文件中 | --master-data[=#] | 无相关参数 | mysqlpump:没有记录pos点的参数(master-data参数记录二进制信息),那么在进行恢复时就不知道pos点开始的位置(备份记录的pos点),只知道最后结束的日志(就是最后的日志),那么只能通过备份时间点去推断开始的pos点,从而有可能导致数据重复恢复,也许以后会支持--master-data参数或者其他替代参数。 |
导出用户和权限 | 无相关参数 | --users | mysqldump:没有参数可以导出用户和权限,所以只能写脚本实现。 |
排除对象 | 无相关参数 | --exclude-databases=name --exclude-events=name --exclude-routines=name --exclude-tables=name --exclude-triggers=name --exclude-users=name | mysqlpump:可以在全库导出时--exclude-databases=mysql排除mysql库的导出,那么在导入时就不会因为新库有mysql库而冲突
mysqldump:不支持,并且没有相关类似参数。全库导出时默认也导出了mysql库,那么在导入时就会因为新库有mysql库而冲突 |
指定包含的对象 | 无相关参数 | --include-databases=name --include-events=name --include-routines=name --include-tables=name --include-triggers=name --include-users=name | |
导出时锁定所有数据库中的所有表,导完解锁 | -x, --lock-all-tables | 无相关参数 | mysqlpump:只有--add-locks(FALSE)参数 mysqldump:包括--add-locks(TRUE)、--lock-all-tables(FALSE)、--lock-tables(TRUE) |
导出锁表,导一个锁一个,导完解锁 | -l, --lock-tables | 无相关参数 | |
用LOCK TABLES和UNLOCK TABLES语句包围每个表转储 | --add-locks | ||
导出函数、存储过程 | --routines | 两个工具参数相同,但是区别如下:
mysqldump:默认不导出函数、存储过程,所以需要在导出的时候加上相关参数。
mysqlpump:默认导出函数、存储过程。 | |
导出调度事件 | --events | 两个工具参数相同,但是区别如下:
mysqldump:默认不导出调度事件,所以需要在导出的时候加上相关参数。
mysqlpump:默认导出调度事件。 | |
导出触发器 | --triggers | 两个工具参数相同,默认都导出触发器。 | |
导出指定表 | --tables | --include-databases=name --include-tables=name | mysqlpump:导出表需要同时使用--include-tables和--include-databases参数,如果只指定--include-tables=bm那么就会导出所有库中bm表,表名之间逗号隔开。
mysqldump:使用--tables参数跟库名表名,表名之间空格隔开。 |
insert插入包含多个值 | --extended-insert | --extended-insert=# | mysqldump:是否开启insert插入包含多个值,默认为true。True:一个很长的insert语句;false:每行一个insert语句。虽然mysqldump默认是一个很长的insert语句,但也是有限度的,官方文档并没找到一个insert包含多少个值,测试也没有得出结论。
mysqlpump:定义一个insert语句包含多少个值,默认一个insert包含250个值。如果导出的数据量较大那么导入时频繁的I/O影响导入时间,数据写到redo log file才返回commit completed成功字样,为了减少了buffer到磁盘的次数,建议在1万,5万,10万。太大的话会占用过多的buffer |
导出时在CREATE TABLE前DROP TABLE IF EXISTS | --add-drop-table | 两个工具参数相同,但是区别如下:
mysqlpump:默认不删除存在的表(值为FALSE),类似oracle的ignore的追加数据,加上这个参数在导入时不会先删除存在的表,配合--force直接追加数据。
mysqldump:先删除存在的表(值为TRUE)。 |
今天的文章虽简短,却满载着实用的干货。关于 mysqldump
和mysqlpump
的参数差异 ,只是它们众多特性中的冰山一角。由于个人经验和知识有限,难免有所遗漏或不够深入。因此,我诚挚地邀请各位小伙伴,如果你们在使用这两个工具时发现了更多的差异,或是有着更深入的理解,请不吝分享。
我们共同探讨和学习,不仅能够丰富我们的知识体系,还能帮助更多的人更好地掌握和使用这些工具。每一个分享,都是对知识的传递和传承,都能让我们在学习的道路上走得更远。
那么,今天的内容就到这里结束了,我们下篇见!!!