变量'sql_mode'不能设置为'NO_AUTO_CREATE_USER'的值

Raj*_* ML 11 mysql data-import mysql-workbench

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

当我尝试导入它时说导入完成了一个错误,错误是

变量'sql_mode'不能设置为'NO_AUTO_CREATE_USER'的值使用exitcode 1操作失败

如果我检查数据库,导入后,只有表已经到来,但根本没有存储过程.

怎么解决这个问题?

Dil*_*lon 30

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

在做了一些搜索之后,我在MySQL网站上看到了这个错误报告: 在8.0.11上用5.7.22创建的Restaure转储

对我有用的修复是手动浏览我的转储文件并删除语句:

'NO_AUTO_CREATE_USER'位于转储文件中的每个例程转储之上. 声明删除图像示例

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

错误1418(HY000)在第318行:此函数在其声明中没有DETERMINISTIC,NO SQL或READS SQL DATA,并且启用了二进制日志记录(您可能希望使用安全性较低的log_bin_trust_function_creators变量)

但在提到这个已回答的问题之后: 此函数在其声明中没有DETERMINISTIC,NO SQL或READS SQL DATA,并且启用了二进制日志记录 ,只需输入:

SET GLOBAL log_bin_trust_function_creators = 1;

在MySQL命令行中,客户端解决了这个问题,最后允许我使用所有转储的表,数据,例程和函数正确导入我的数据库.

希望这能节省一些时间.

  • 从 mysql5.7 `sed -i 's/,NO_AUTO_CREATE_USER//g' path/da_name.sql` 清理 mysqldump 文件 (7认同)
  • 这就是答案,我希望有人将其标记为这样 - 在这个问题的 Laravel 相关版本中很难找到。我还要补充一点,如果您的备份文件很大(我的超过 200MB),它将在 MySQL Workbench 中基本上无法打开,它最终会打开但您将无法实际编辑它 - 使用类似 Visual Studio Code 的东西相反,它几乎立即为我打开,我能够为 NO_AUTO_CREATE_USER 查找和替换全部以修复导入错误。 (4认同)
  • @Leith,您可以编辑 config 文件夹中的 database.php 并将 strict 从 true 更改为 false,而不是更改供应商文件夹中的文件。然而,你的评论确实让我走上了正确的道路来解决这个问题! (3认同)
  • 我已经得到了 `log_bin_trust_function_creators = 1;` 并且仍然收到错误消息 `Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'` (2认同)

Sho*_*mon 6

查找和替换的最佳方法。找到NO_AUTO_CREATE_USER并在不打开文件的情况下将其替换为

如果 *.sql 文件很大而无法打开,Linux sed实用程序是最好的选择。

sed -i 's/FIND_TEXT/REPLACE_TEXT/' file.sql
sed -i 's/NO_AUTO_CREATE_USER//' file.sql
Run Code Online (Sandbox Code Playgroud)

-i 代表 --in-place[=SUFFIX]

-s 代表 --separate


man*_*ear 5

我也遇到了类似的问题。刚刚NO_AUTO_CREATE_USER通过在 mysql 工作台中使用find&replace选项从导入脚本中删除了这些词,它执行得很好。


Ped*_*llo 5

错误已修复

重要更改:当使用 8.0 服务器不支持的 SQL 模式时,将转储从MySQL 5.7服务器导入运行MySQL 8.0的服务器通常会失败ER_WRONG_VALUE_FOR_VAR。由于NO_AUTO_CREATE_USER在 MySQL 5.7 中默认启用但在 MySQL 8.0 中不支持,这可能经常发生。

服务器在这种情况下的行为现在取决于pseudo_slave_mode系统变量的设置。如果这是错误的,服务器将拒绝模式设置ER_UNSUPPORTED_SQL_MODE。如果pseudo_slave_mode为 true,则服务器忽略不支持的模式并发出警告。请注意,mysqlbinlogpseudo_slave_mode在执行任何 SQL 之前设置为 true。(错误#90337,错误#27828236)

来源:MySQL 发行说明。

验证这一点:

我连接到 MySQL,然后默认选择了我的架构,我在 Workbench SQL 选项卡中运行了以下命令:

SET pseudo_slave_mode = true;
SET @@SESSION.pseudo_slave_mode = true;
Run Code Online (Sandbox Code Playgroud)

为了确保它有效,我在其他选项卡中使用其他命令对其进行了验证:

SHOW VARIABLES;
Run Code Online (Sandbox Code Playgroud)

它向我展示了变量列表,我过滤了它,输入ps来查找pseudo_slave_mode变量

在此处输入图片说明

是啊pseudo_slave_modeON现在(当先前未OFF

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

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

mysqldump -u root -p --no-data --routines my_database > schema.sql

一切正常。这次它用修改后的sql_mode

我希望这对你有帮助。