关于这工具的用法和逻辑,就不在多说了,外网都是相关的介绍、使用,这个大佬的文章写的很详细,https://blog.csdn.net/qq_33656602/article/details/90671188
这里我们就整理下平常会遇到的问题吧
1、导入函数的时候报错(脱敏报错):** (myloader:2477): CRITICAL **: 16:45:48.595: Error restoring xxx from file xxxx.sql: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
报错原因: log_bin_trust_function_creators 和 bin-log导致的
官方含义:https://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html
简单来说就是假如要做主从同步,需要开启bin-log,而存储函数有可能导致主从的数据不一致。所以当开启二进制日志后,参数log_bin_trust_function_creators=off就会生效,限制存储函数的创建、修改、调用。
其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。
这种情况下一般的处理方式如下:
1.1、如果说不开启bin-log参数或者不用搭建主从,我们就直接把这个参数设置为on,然后就可以正常导入了
set global log_bin_trust_function_creators=on;(如果持久化的话,需要写到配置文件中)
1.2、要是我们必须用到bin-log的话,在创建函数的时候给这个函数加上 相关的参数即可
2、导入视图的时候报错账号不存在
(脱敏报错)** (myloader:2477): CRITICAL **: 16:45:49.143: Error restoring xx.xx from file xx.xx-schema-view.sql: The user specified as a definer ('用户'@'host') does not exist
报错原因:看报错信息其实很明显,就是报错的用户在要导入的实例中不存在,所以只需要创建下就好了。因为在源实例的时候,我们用a账号创建的视图,但是在导入到本地的时候,用的b账号导入的,在本地回放的时候检测到没有相关账号,然后出现报错
3、导入数据时报错用户权限问题
(脱敏报错)run sql error, msg offset :8030, ret:-1, query error[TRIGGER command denied to user 'abc'@'host' for table 't1'], errno:1142, sql[insert into xxxxxxxx
报错原因:这里是由于触发器所触发的sql无法执行,因为本地用户没有insert权限,所以导致回放的时候会有这种报错
解决方案:我们在本地给这个用户abc加上insert权限即可
后面持续更新。。。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。