💫《博主主页》:奈斯DB-CSDN博客
🔥《擅长领域》:擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控;并对SQLserver、NoSQL(MongoDB)有了解
💖如果觉得文章对你有所帮助,欢迎点赞收藏加关注💖
时光匆匆,转眼之间便迎来了星期五。今天这篇文章分享一下关于MySQL逻辑迁移工具的探讨—— mysqldump和mysqlpump这两种工具在参数设置上的差异 ,博主也是经常使用mysqldump或者mysqlpump进行数据的导出导入,所以在使用之余也整理了两个工具在参数上的区别,通过这篇文章分享给大家。通过深入了解这些差异,我们将能够更好地比较和选择适合自己需求的工具。
mysqldump作为MySQL官方提供的备份工具,其参数丰富且功能强大。它允许我们通过指定不同的参数来实现不同的备份需求,比如仅备份数据库结构、全库备份等。这些参数的设置对于确保备份的完整性和恢复的效率至关重要。
而mysqlpump,虽然与mysqldump在功能上有相似之处,但在参数设置上可能存在一些差异。这些差异可能体现在备份方式、数据导出格式、连接选项等方面。因此,在使用mysqlpump时,我们需要特别关注其参数文档或帮助信息,以确保正确理解和使用这些参数。
通过对比mysqldump和mysqlpump的 参数差异 ,我们可以更清晰地了解它们各自的特点和优势。例如,某些参数可能只在其中一个工具中可用,或者两个工具中相同参数的行为可能有所不同。这些差异将直接影响我们在实际使用中的选择和决策。
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:没有参数可以导出用户和权限,可以通过导出mysql库(权限和用户都在mysql数据库中)或者写脚本实现。 |
排除对象 | 无相关参数 | --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 | mysqldump:使用--tables参数跟库名表名,表名之间空格隔开。
mysqlpump:导出表需要同时使用--include-tables和--include-databases参数,如果只指定--include-tables=bm那么就会导出所有库中bm表,表名之间逗号隔开。 |
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 | 两个工具参数相同,但是区别如下:
mysqldump:先删除存在的表(值为TRUE)。
mysqlpump:默认不删除存在的表(值为FALSE)。需要注意的是--force只是强制继续,即使我们得到一个SQL错误。如果导入时提示表存在(ERROR 1050 (42S01) at line 24: Table 'qwe' already exists),那么就会中断导入这个进程,加上此参数的话那么就先忽略这张已经存在的表或者这些表,强制继续导入下一张表。需要注意的是并不会对已经存在的表追加数据,只是忽略而已。 |
今天的文章虽简短,却满载着实用的干货。关于 mysqldump
和mysqlpump
的参数差异 ,只是它们众多特性中的冰山一角。由于个人经验和知识有限,难免有所遗漏或不够深入。因此,我诚挚地邀请各位小伙伴,如果你们在使用这两个工具时发现了更多的差异,或是有着更深入的理解,请不吝分享。
我们共同探讨和学习,不仅能够丰富我们的知识体系,还能帮助更多的人更好地掌握和使用这些工具。每一个分享,都是对知识的传递和传承,都能让我们在学习的道路上走得更远。
那么,今天的内容就到这里结束了,我们下篇见!!!