Mysql 变量';sql#U模式';can';t设置为';无自动创建用户';

Mysql 变量';sql#U模式';can';t设置为';无自动创建用户';,mysql,mysql-workbench,data-import,Mysql,Mysql Workbench,Data Import,我正在使用MySQL Workbench 8.0。我正在尝试将测试数据转储到DB,包括包含数据的所有表、存储过程和视图 当我尝试导入时,会显示导入已完成,但有一个错误,错误为 变量“sql\u mode”不能设置为“NO\u AUTO\u CREATE\u USER”的值 操作失败,exitcode为1 同样在导入之后,如果我检查数据库,则只有表出现,但根本没有存储过程 如何解决这个问题 从MySQL Workbench 6.1 CE导出数据库,然后尝试将其导入MySQL Workbench 8

我正在使用MySQL Workbench 8.0。我正在尝试将测试数据转储到DB,包括包含数据的所有表、存储过程和视图

当我尝试导入时,会显示导入已完成,但有一个错误,错误为

变量“sql\u mode”不能设置为“NO\u AUTO\u CREATE\u USER”的值 操作失败,exitcode为1

同样在导入之后,如果我检查数据库,则只有表出现,但根本没有存储过程


如何解决这个问题

从MySQL Workbench 6.1 CE导出数据库,然后尝试将其导入MySQL Workbench 8.0.11的更新版本后,我最近也遇到了这个问题。每个都是使用社区服务器安装程序msi安装的

在做了一些搜索之后,我在MySQL网站上看到了这个bug报告:

对我有效的修复方法是手动检查转储文件并删除语句:

“NO_AUTO_CREATE_USER”位于转储文件中每个例行转储的上方。

在我这样做之后,我收到了错误

第318行出现错误1418(HY000):此函数在其声明中没有确定性、无SQL或读取SQL数据,并且启用了二进制日志记录(您可能希望使用不太安全的log\u bin\u trust\u函数\u creators变量)

但在提到这个问题之后: 只需输入:

设置全局日志\u bin\u信任函数\u creators=1

在 MySQL命令行客户端解决了这个问题,并最终允许我正确地导入包含所有转储表、数据、例程和函数的数据库


希望这能为其他人节省一些时间。

我找到了一个解决方案,如果不是解决方案的话。使用Linux获取sed实用程序,并运行我在前面的评论中提到的两个sed命令。此外,我还需要使用mysqldump选项:
--set gtid purged=OFF

我也遇到了类似的问题。通过使用mysql workbench中的
find
&
replace
选项,刚刚从导入脚本中删除了单词
NO\u AUTO\u CREATE\u USER
,并且执行得很好

修正错误 重要更改:当使用8.0服务器不支持的SQL模式时,将转储从MySQL 5.7服务器导入运行MySQL 8.0的服务器时,通常会出现
ER\u错误的\u值。这可能经常发生,因为MySQL 5.7默认启用了
NO\u AUTO\u CREATE\u USER
,但MySQL 8.0不支持

服务器在这种情况下的行为现在取决于
伪从模式
系统变量的设置。如果此设置为false,则服务器将拒绝使用
ER\u UNSUPPORTED\u SQL\u mode
的模式设置。如果
pseudo_slave_mode
为true,服务器将忽略不支持的模式并发出警告。请注意,mysqlbinlog在执行任何SQL之前将
pseudo_slave_模式
设置为true。(错误——90337,错误——27828236)

资料来源:

验证这一点: 我连接到MySQL,然后在默认选择模式的情况下,在Workbench SQL选项卡中运行以下命令:

SET pseudo_slave_mode = true;
SET @@SESSION.pseudo_slave_mode = true;
为了确保它工作正常,我使用“其他”选项卡中的“其他”命令对其进行了验证:

SHOW VARIABLES;
它向我显示了变量列表,我键入ps对其进行过滤,以找到
伪从模式
变量

是的,伪从模式
现在是打开的
(以前是关闭的)

然后我运行了.sql,它再次向我显示了
NO\u AUTO\u CREATE\u USER
错误,但这次它创建了.sql文件中所需的所有内容

然后,我将模式转储到另一个sql文件以验证它:

mysqldump-u root-p——无数据——例程my_database>schema.sql

一切都很好。这一次,它使用修改后的
sql\u模式将其转储


我希望这能对您有所帮助。

当我将mysql降级到更兼容的版本时,这对我很有用


可能还需要更新驱动程序。

查找和替换驱动程序的最佳方法。 查找NO\u AUTO\u CREATE\u USER并在不打开文件的情况下将其替换为nothing

如果*.sql文件太大无法打开,Linuxsed实用程序是最好的选择

sed -i 's/FIND_TEXT/REPLACE_TEXT/' file.sql
sed -i 's/NO_AUTO_CREATE_USER//' file.sql
-i表示--in-place[=后缀]


-s对于--separate

命令行,
--force
选项将导致
mysql
继续处理转储并忽略“NO_AUTO_CREATE_USER”(以及任何其他)错误


您也可以在MySQL工作台中启用此行为。请参阅。

您的文件很大吗?如果可能,您可以浏览转储文件,找到它试图设置NO_AUTO_CREATE_USER值的位置,并删除该部分。如果您有权访问sed实用程序,请尝试以下命令:
sed-i's/NO_AUTO_CREATE_USER//'mysqldump.sql
从转储文件中删除“NO_AUTO_CREATE_USER”文本,这就是答案,我希望有人能给它打上这样的标记——这在这个问题的拉拉维尔版本中是很难找到的。我还要补充一点,如果您的备份文件很大(我的备份文件超过200MB),它在MySQL Workbench中基本上是不可修复的,它最终会打开,但您将无法实际编辑它-请使用类似Visual Studio的代码,它几乎立即为我打开,我能够找到并替换无自动创建用户的所有内容,以修复导入错误。我已经获得了
log\u bin\u trust\u function\u creators=1
我仍然收到错误消息
变量'sql\u mode'不能设置为'NO\u AUTO\u CREATE\u USER'的值。
@pbnelson您是否也删除了转储文件中的所有'NO\u AUTO\u CREATE\u USER'变量?是的,一旦我运行了
sed-I's/NO\u AUTO\u CREATE\u USER/'mydump.sql,该文件就可以导入了